Merge "Always check for legacy runner" into androidx-master-dev
diff --git a/activity/activity/build.gradle b/activity/activity/build.gradle
index 016daa3..441962f 100644
--- a/activity/activity/build.gradle
+++ b/activity/activity/build.gradle
@@ -21,7 +21,7 @@
     api("androidx.core:core:1.1.0")
     api(project(":lifecycle:lifecycle-runtime"))
     api(project(":lifecycle:lifecycle-viewmodel"))
-    api("androidx.savedstate:savedstate:1.0.0-rc01")
+    api("androidx.savedstate:savedstate:1.0.0")
     api(project(":lifecycle:lifecycle-viewmodel-savedstate"))
 
     androidTestImplementation(KOTLIN_STDLIB)
diff --git a/appcompat/build.gradle b/appcompat/build.gradle
index c22f193..21a0e1d 100644
--- a/appcompat/build.gradle
+++ b/appcompat/build.gradle
@@ -15,7 +15,7 @@
     api("androidx.core:core:1.1.0")
     implementation("androidx.collection:collection:1.0.0")
     api("androidx.cursoradapter:cursoradapter:1.0.0")
-    api("androidx.fragment:fragment:1.1.0-rc01")
+    api("androidx.fragment:fragment:1.1.0")
     api(project(":appcompat:appcompat-resources"))
     api("androidx.drawerlayout:drawerlayout:1.0.0")
 
diff --git a/appcompat/resources/build.gradle b/appcompat/resources/build.gradle
index de2a07f..953b1a1 100644
--- a/appcompat/resources/build.gradle
+++ b/appcompat/resources/build.gradle
@@ -28,8 +28,8 @@
     api("androidx.annotation:annotation:1.1.0")
     api("androidx.core:core:1.0.1")
     implementation("androidx.collection:collection:1.0.0")
-    api("androidx.vectordrawable:vectordrawable:1.1.0-rc01")
-    api("androidx.vectordrawable:vectordrawable-animated:1.1.0-rc01")
+    api("androidx.vectordrawable:vectordrawable:1.1.0")
+    api("androidx.vectordrawable:vectordrawable-animated:1.1.0")
 
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
     androidTestImplementation(ANDROIDX_TEST_CORE)
diff --git a/autofill/api/1.0.0-beta01.txt b/autofill/api/1.0.0-beta01.txt
new file mode 100644
index 0000000..7f3a0cf
--- /dev/null
+++ b/autofill/api/1.0.0-beta01.txt
@@ -0,0 +1,47 @@
+// Signature format: 3.0
+package androidx.autofill {
+
+  public final class HintConstants {
+    method public static String generateSmsOtpHintForCharacterPosition(int);
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_DAY = "birthDateDay";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_FULL = "birthDateFull";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_MONTH = "birthDateMonth";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_YEAR = "birthDateYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE = "creditCardExpirationDate";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY = "creditCardExpirationDay";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH = "creditCardExpirationMonth";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR = "creditCardExpirationYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_NUMBER = "creditCardNumber";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE = "creditCardSecurityCode";
+    field public static final String AUTOFILL_HINT_EMAIL_ADDRESS = "emailAddress";
+    field public static final String AUTOFILL_HINT_GENDER = "gender";
+    field @Deprecated public static final String AUTOFILL_HINT_NAME = "name";
+    field public static final String AUTOFILL_HINT_NEW_PASSWORD = "newPassword";
+    field public static final String AUTOFILL_HINT_NEW_USERNAME = "newUsername";
+    field public static final String AUTOFILL_HINT_PASSWORD = "password";
+    field public static final String AUTOFILL_HINT_PERSON_NAME = "personName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_FAMILY = "personFamilyName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_GIVEN = "personGivenName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE = "personMiddleName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE_INITIAL = "personMiddleInitial";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_PREFIX = "personNamePrefix";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_SUFFIX = "personNameSuffix";
+    field @Deprecated public static final String AUTOFILL_HINT_PHONE = "phone";
+    field public static final String AUTOFILL_HINT_PHONE_COUNTRY_CODE = "phoneCountryCode";
+    field public static final String AUTOFILL_HINT_PHONE_NATIONAL = "phoneNational";
+    field public static final String AUTOFILL_HINT_PHONE_NUMBER = "phoneNumber";
+    field public static final String AUTOFILL_HINT_PHONE_NUMBER_DEVICE = "phoneNumberDevice";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS = "postalAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_COUNTRY = "addressCountry";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_ADDRESS = "extendedAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_POSTAL_CODE = "extendedPostalCode";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_LOCALITY = "addressLocality";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_REGION = "addressRegion";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS = "streetAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
+    field public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
+    field public static final String AUTOFILL_HINT_USERNAME = "username";
+  }
+
+}
+
diff --git a/autofill/api/current.txt b/autofill/api/current.txt
index a56ee53..7f3a0cf 100644
--- a/autofill/api/current.txt
+++ b/autofill/api/current.txt
@@ -2,6 +2,7 @@
 package androidx.autofill {
 
   public final class HintConstants {
+    method public static String generateSmsOtpHintForCharacterPosition(int);
     field public static final String AUTOFILL_HINT_BIRTH_DATE_DAY = "birthDateDay";
     field public static final String AUTOFILL_HINT_BIRTH_DATE_FULL = "birthDateFull";
     field public static final String AUTOFILL_HINT_BIRTH_DATE_MONTH = "birthDateMonth";
@@ -39,14 +40,6 @@
     field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS = "streetAddress";
     field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
     field public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
-    field public static final String AUTOFILL_HINT_SMS_OTP_1 = "smsOTPCode1";
-    field public static final String AUTOFILL_HINT_SMS_OTP_2 = "smsOTPCode2";
-    field public static final String AUTOFILL_HINT_SMS_OTP_3 = "smsOTPCode3";
-    field public static final String AUTOFILL_HINT_SMS_OTP_4 = "smsOTPCode4";
-    field public static final String AUTOFILL_HINT_SMS_OTP_5 = "smsOTPCode5";
-    field public static final String AUTOFILL_HINT_SMS_OTP_6 = "smsOTPCode6";
-    field public static final String AUTOFILL_HINT_SMS_OTP_7 = "smsOTPCode7";
-    field public static final String AUTOFILL_HINT_SMS_OTP_8 = "smsOTPCode8";
     field public static final String AUTOFILL_HINT_USERNAME = "username";
   }
 
diff --git a/autofill/api/public_plus_experimental_1.0.0-beta01.txt b/autofill/api/public_plus_experimental_1.0.0-beta01.txt
new file mode 100644
index 0000000..7f3a0cf
--- /dev/null
+++ b/autofill/api/public_plus_experimental_1.0.0-beta01.txt
@@ -0,0 +1,47 @@
+// Signature format: 3.0
+package androidx.autofill {
+
+  public final class HintConstants {
+    method public static String generateSmsOtpHintForCharacterPosition(int);
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_DAY = "birthDateDay";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_FULL = "birthDateFull";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_MONTH = "birthDateMonth";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_YEAR = "birthDateYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE = "creditCardExpirationDate";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY = "creditCardExpirationDay";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH = "creditCardExpirationMonth";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR = "creditCardExpirationYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_NUMBER = "creditCardNumber";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE = "creditCardSecurityCode";
+    field public static final String AUTOFILL_HINT_EMAIL_ADDRESS = "emailAddress";
+    field public static final String AUTOFILL_HINT_GENDER = "gender";
+    field @Deprecated public static final String AUTOFILL_HINT_NAME = "name";
+    field public static final String AUTOFILL_HINT_NEW_PASSWORD = "newPassword";
+    field public static final String AUTOFILL_HINT_NEW_USERNAME = "newUsername";
+    field public static final String AUTOFILL_HINT_PASSWORD = "password";
+    field public static final String AUTOFILL_HINT_PERSON_NAME = "personName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_FAMILY = "personFamilyName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_GIVEN = "personGivenName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE = "personMiddleName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE_INITIAL = "personMiddleInitial";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_PREFIX = "personNamePrefix";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_SUFFIX = "personNameSuffix";
+    field @Deprecated public static final String AUTOFILL_HINT_PHONE = "phone";
+    field public static final String AUTOFILL_HINT_PHONE_COUNTRY_CODE = "phoneCountryCode";
+    field public static final String AUTOFILL_HINT_PHONE_NATIONAL = "phoneNational";
+    field public static final String AUTOFILL_HINT_PHONE_NUMBER = "phoneNumber";
+    field public static final String AUTOFILL_HINT_PHONE_NUMBER_DEVICE = "phoneNumberDevice";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS = "postalAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_COUNTRY = "addressCountry";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_ADDRESS = "extendedAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_POSTAL_CODE = "extendedPostalCode";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_LOCALITY = "addressLocality";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_REGION = "addressRegion";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS = "streetAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
+    field public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
+    field public static final String AUTOFILL_HINT_USERNAME = "username";
+  }
+
+}
+
diff --git a/autofill/api/public_plus_experimental_current.txt b/autofill/api/public_plus_experimental_current.txt
index a56ee53..7f3a0cf 100644
--- a/autofill/api/public_plus_experimental_current.txt
+++ b/autofill/api/public_plus_experimental_current.txt
@@ -2,6 +2,7 @@
 package androidx.autofill {
 
   public final class HintConstants {
+    method public static String generateSmsOtpHintForCharacterPosition(int);
     field public static final String AUTOFILL_HINT_BIRTH_DATE_DAY = "birthDateDay";
     field public static final String AUTOFILL_HINT_BIRTH_DATE_FULL = "birthDateFull";
     field public static final String AUTOFILL_HINT_BIRTH_DATE_MONTH = "birthDateMonth";
@@ -39,14 +40,6 @@
     field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS = "streetAddress";
     field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
     field public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
-    field public static final String AUTOFILL_HINT_SMS_OTP_1 = "smsOTPCode1";
-    field public static final String AUTOFILL_HINT_SMS_OTP_2 = "smsOTPCode2";
-    field public static final String AUTOFILL_HINT_SMS_OTP_3 = "smsOTPCode3";
-    field public static final String AUTOFILL_HINT_SMS_OTP_4 = "smsOTPCode4";
-    field public static final String AUTOFILL_HINT_SMS_OTP_5 = "smsOTPCode5";
-    field public static final String AUTOFILL_HINT_SMS_OTP_6 = "smsOTPCode6";
-    field public static final String AUTOFILL_HINT_SMS_OTP_7 = "smsOTPCode7";
-    field public static final String AUTOFILL_HINT_SMS_OTP_8 = "smsOTPCode8";
     field public static final String AUTOFILL_HINT_USERNAME = "username";
   }
 
diff --git a/content/api/res-1.1.0-alpha01.txt b/autofill/api/res-1.0.0-beta01.txt
similarity index 100%
copy from content/api/res-1.1.0-alpha01.txt
copy to autofill/api/res-1.0.0-beta01.txt
diff --git a/autofill/api/restricted_1.0.0-beta01.txt b/autofill/api/restricted_1.0.0-beta01.txt
new file mode 100644
index 0000000..7f3a0cf
--- /dev/null
+++ b/autofill/api/restricted_1.0.0-beta01.txt
@@ -0,0 +1,47 @@
+// Signature format: 3.0
+package androidx.autofill {
+
+  public final class HintConstants {
+    method public static String generateSmsOtpHintForCharacterPosition(int);
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_DAY = "birthDateDay";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_FULL = "birthDateFull";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_MONTH = "birthDateMonth";
+    field public static final String AUTOFILL_HINT_BIRTH_DATE_YEAR = "birthDateYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE = "creditCardExpirationDate";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY = "creditCardExpirationDay";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH = "creditCardExpirationMonth";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR = "creditCardExpirationYear";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_NUMBER = "creditCardNumber";
+    field public static final String AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE = "creditCardSecurityCode";
+    field public static final String AUTOFILL_HINT_EMAIL_ADDRESS = "emailAddress";
+    field public static final String AUTOFILL_HINT_GENDER = "gender";
+    field @Deprecated public static final String AUTOFILL_HINT_NAME = "name";
+    field public static final String AUTOFILL_HINT_NEW_PASSWORD = "newPassword";
+    field public static final String AUTOFILL_HINT_NEW_USERNAME = "newUsername";
+    field public static final String AUTOFILL_HINT_PASSWORD = "password";
+    field public static final String AUTOFILL_HINT_PERSON_NAME = "personName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_FAMILY = "personFamilyName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_GIVEN = "personGivenName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE = "personMiddleName";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_MIDDLE_INITIAL = "personMiddleInitial";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_PREFIX = "personNamePrefix";
+    field public static final String AUTOFILL_HINT_PERSON_NAME_SUFFIX = "personNameSuffix";
+    field @Deprecated public static final String AUTOFILL_HINT_PHONE = "phone";
+    field public static final String AUTOFILL_HINT_PHONE_COUNTRY_CODE = "phoneCountryCode";
+    field public static final String AUTOFILL_HINT_PHONE_NATIONAL = "phoneNational";
+    field public static final String AUTOFILL_HINT_PHONE_NUMBER = "phoneNumber";
+    field public static final String AUTOFILL_HINT_PHONE_NUMBER_DEVICE = "phoneNumberDevice";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS = "postalAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_COUNTRY = "addressCountry";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_ADDRESS = "extendedAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_POSTAL_CODE = "extendedPostalCode";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_LOCALITY = "addressLocality";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_REGION = "addressRegion";
+    field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS = "streetAddress";
+    field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
+    field public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
+    field public static final String AUTOFILL_HINT_USERNAME = "username";
+  }
+
+}
+
diff --git a/autofill/api/restricted_current.txt b/autofill/api/restricted_current.txt
index a56ee53..7f3a0cf 100644
--- a/autofill/api/restricted_current.txt
+++ b/autofill/api/restricted_current.txt
@@ -2,6 +2,7 @@
 package androidx.autofill {
 
   public final class HintConstants {
+    method public static String generateSmsOtpHintForCharacterPosition(int);
     field public static final String AUTOFILL_HINT_BIRTH_DATE_DAY = "birthDateDay";
     field public static final String AUTOFILL_HINT_BIRTH_DATE_FULL = "birthDateFull";
     field public static final String AUTOFILL_HINT_BIRTH_DATE_MONTH = "birthDateMonth";
@@ -39,14 +40,6 @@
     field public static final String AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS = "streetAddress";
     field public static final String AUTOFILL_HINT_POSTAL_CODE = "postalCode";
     field public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
-    field public static final String AUTOFILL_HINT_SMS_OTP_1 = "smsOTPCode1";
-    field public static final String AUTOFILL_HINT_SMS_OTP_2 = "smsOTPCode2";
-    field public static final String AUTOFILL_HINT_SMS_OTP_3 = "smsOTPCode3";
-    field public static final String AUTOFILL_HINT_SMS_OTP_4 = "smsOTPCode4";
-    field public static final String AUTOFILL_HINT_SMS_OTP_5 = "smsOTPCode5";
-    field public static final String AUTOFILL_HINT_SMS_OTP_6 = "smsOTPCode6";
-    field public static final String AUTOFILL_HINT_SMS_OTP_7 = "smsOTPCode7";
-    field public static final String AUTOFILL_HINT_SMS_OTP_8 = "smsOTPCode8";
     field public static final String AUTOFILL_HINT_USERNAME = "username";
   }
 
diff --git a/autofill/build.gradle b/autofill/build.gradle
index 408ec27..f574f9d 100644
--- a/autofill/build.gradle
+++ b/autofill/build.gradle
@@ -25,7 +25,9 @@
     id("kotlin-android")
 }
 
-dependencies {}
+dependencies {
+    implementation("androidx.core:core:1.1.0")
+}
 
 androidx {
     name = "AndroidX Autofill"
diff --git a/autofill/src/main/java/androidx/autofill/HintConstants.java b/autofill/src/main/java/androidx/autofill/HintConstants.java
index 4c4c5fe..e0ce904 100644
--- a/autofill/src/main/java/androidx/autofill/HintConstants.java
+++ b/autofill/src/main/java/androidx/autofill/HintConstants.java
@@ -16,6 +16,9 @@
 
 package androidx.autofill;
 
+import androidx.annotation.NonNull;
+import androidx.core.util.Preconditions;
+
 /**
  * Contains all the officially supported autofill hint constants.
  *
@@ -551,8 +554,7 @@
      * should be <code>{@value #AUTOFILL_HINT_SMS_OTP}</code>).
      *
      * <p>When annotating OTP code fields which map to a single digit of the code consider using
-     * <code>{@value #AUTOFILL_HINT_SMS_OTP_1}</code> through <code>
-     * {@value #AUTOFILL_HINT_SMS_OTP_8}</code>
+     * <code>{@link #generateSmsOtpHintForCharacterPosition}</code>
      *
      * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
      * hints.
@@ -560,106 +562,22 @@
     public static final String AUTOFILL_HINT_SMS_OTP = "smsOTPCode";
 
     /**
-     * Hint indicating that this view can be autofilled with the first character/digit of a SMS One
-     * Time Password (OTP).
+     * Generates the corresponding hint that indicates that this view can be autofilled with the
+     * {@code characterPosition}'th character/digit of a SMS One Time Password (OTP).
      *
      * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
      * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_1}</code>).
+     * should be <code>smsOTPCode{characterPosition}</code>).
      *
      * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
      * hints.
+     *
+     * @param characterPosition value between 1 and 8 representing the character position of the OTP
+     *     code that the service should autofill in the associated view.
      */
-    public static final String AUTOFILL_HINT_SMS_OTP_1 = "smsOTPCode1";
-
-    /**
-     * Hint indicating that this view can be autofilled with the second character/digit of a SMS One
-     * Time Password (OTP).
-     *
-     * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
-     * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_2}</code>).
-     *
-     * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
-     * hints.
-     */
-    public static final String AUTOFILL_HINT_SMS_OTP_2 = "smsOTPCode2";
-
-    /**
-     * Hint indicating that this view can be autofilled with the third character/digit of a SMS One
-     * Time Password (OTP).
-     *
-     * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
-     * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_3}</code>).
-     *
-     * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
-     * hints.
-     */
-    public static final String AUTOFILL_HINT_SMS_OTP_3 = "smsOTPCode3";
-
-    /**
-     * Hint indicating that this view can be autofilled with the fourth character/digit of a SMS One
-     * Time Password (OTP).
-     *
-     * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
-     * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_4}</code>).
-     *
-     * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
-     * hints.
-     */
-    public static final String AUTOFILL_HINT_SMS_OTP_4 = "smsOTPCode4";
-
-    /**
-     * Hint indicating that this view can be autofilled with the fifth character/digit of a SMS One
-     * Time Password (OTP).
-     *
-     * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
-     * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_5}</code>).
-     *
-     * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
-     * hints.
-     */
-    public static final String AUTOFILL_HINT_SMS_OTP_5 = "smsOTPCode5";
-
-    /**
-     * Hint indicating that this view can be autofilled with the sixth character/digit of a SMS One
-     * Time Password (OTP).
-     *
-     * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
-     * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_6}</code>).
-     *
-     * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
-     * hints.
-     */
-    public static final String AUTOFILL_HINT_SMS_OTP_6 = "smsOTPCode6";
-
-    /**
-     * Hint indicating that this view can be autofilled with the seventh character/digit of a SMS
-     * One Time Password (OTP).
-     *
-     * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
-     * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_7}</code>).
-     *
-     * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
-     * hints.
-     */
-    public static final String AUTOFILL_HINT_SMS_OTP_7 = "smsOTPCode7";
-
-    /**
-     * Hint indicating that this view can be autofilled with the eighth character/digit of a SMS One
-     * Time Password (OTP).
-     *
-     * <p>Can be used with either {@link android.view.View#setAutofillHints(String[])} or <a
-     * href="#attr_android:autofillHint">{@code android:autofillHint}</a> (in which case the value
-     * should be <code>{@value #AUTOFILL_HINT_SMS_OTP_8}</code>).
-     *
-     * <p>See {@link android.view.View#setAutofillHints(String...)} for more info about autofill
-     * hints.
-     */
-    public static final String AUTOFILL_HINT_SMS_OTP_8 = "smsOTPCode8";
+    @NonNull
+    public static String generateSmsOtpHintForCharacterPosition(int characterPosition) {
+        Preconditions.checkArgumentInRange(characterPosition, 1, 8, "characterPosition");
+        return ("smsOTPCode" + characterPosition).intern();
+    }
 }
diff --git a/benchmark/common/api/1.0.0-alpha06.txt b/benchmark/common/api/1.0.0-alpha06.txt
index ed62b8e..d811783 100644
--- a/benchmark/common/api/1.0.0-alpha06.txt
+++ b/benchmark/common/api/1.0.0-alpha06.txt
@@ -9,6 +9,10 @@
     method public boolean keepRunning();
     method public void pauseTiming();
     method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion! Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
   }
 
 }
diff --git a/benchmark/common/api/api_lint.ignore b/benchmark/common/api/api_lint.ignore
new file mode 100644
index 0000000..bf46838
--- /dev/null
+++ b/benchmark/common/api/api_lint.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+MissingNullability: androidx.benchmark.BenchmarkState#Companion:
+    Missing nullability on field `Companion` in class `class androidx.benchmark.BenchmarkState`
diff --git a/benchmark/common/api/current.txt b/benchmark/common/api/current.txt
index ed62b8e..d811783 100644
--- a/benchmark/common/api/current.txt
+++ b/benchmark/common/api/current.txt
@@ -9,6 +9,10 @@
     method public boolean keepRunning();
     method public void pauseTiming();
     method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion! Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
   }
 
 }
diff --git a/benchmark/common/api/public_plus_experimental_1.0.0-alpha06.txt b/benchmark/common/api/public_plus_experimental_1.0.0-alpha06.txt
index 6849f29..efa9c80 100644
--- a/benchmark/common/api/public_plus_experimental_1.0.0-alpha06.txt
+++ b/benchmark/common/api/public_plus_experimental_1.0.0-alpha06.txt
@@ -8,8 +8,16 @@
   public final class BenchmarkState {
     method public boolean keepRunning();
     method public void pauseTiming();
-    method public static void reportData(String className, String testName, long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=0) long thermalThrottleSleepSeconds, @IntRange(from=1) int repeatIterations);
+    method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=0) long thermalThrottleSleepSeconds, @IntRange(from=1) int repeatIterations);
     method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion! Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
+    method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=0) long thermalThrottleSleepSeconds, @IntRange(from=1) int repeatIterations);
+  }
+
+  @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
   }
 
 }
diff --git a/benchmark/common/api/public_plus_experimental_current.txt b/benchmark/common/api/public_plus_experimental_current.txt
index 6849f29..efa9c80 100644
--- a/benchmark/common/api/public_plus_experimental_current.txt
+++ b/benchmark/common/api/public_plus_experimental_current.txt
@@ -8,8 +8,16 @@
   public final class BenchmarkState {
     method public boolean keepRunning();
     method public void pauseTiming();
-    method public static void reportData(String className, String testName, long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=0) long thermalThrottleSleepSeconds, @IntRange(from=1) int repeatIterations);
+    method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public static void reportData(String className, String testName, long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=0) long thermalThrottleSleepSeconds, @IntRange(from=1) int repeatIterations);
     method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion! Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
+    method @androidx.benchmark.BenchmarkState.Companion.ExperimentalExternalReport public void reportData(String className, String testName, long totalRunTimeNs, java.util.List<java.lang.Long> dataNs, @IntRange(from=0) int warmupIterations, @IntRange(from=0) long thermalThrottleSleepSeconds, @IntRange(from=1) int repeatIterations);
+  }
+
+  @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.FUNCTION) public static @interface BenchmarkState.Companion.ExperimentalExternalReport {
   }
 
 }
diff --git a/benchmark/common/api/restricted_1.0.0-alpha06.txt b/benchmark/common/api/restricted_1.0.0-alpha06.txt
index 5e1532d..1ff8212 100644
--- a/benchmark/common/api/restricted_1.0.0-alpha06.txt
+++ b/benchmark/common/api/restricted_1.0.0-alpha06.txt
@@ -13,6 +13,10 @@
     method public void pauseTiming();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void report(String fullClassName, String simpleClassName, String methodName);
     method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion! Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class IsolationActivity extends android.app.Activity {
diff --git a/benchmark/common/api/restricted_current.txt b/benchmark/common/api/restricted_current.txt
index 5e1532d..1ff8212 100644
--- a/benchmark/common/api/restricted_current.txt
+++ b/benchmark/common/api/restricted_current.txt
@@ -13,6 +13,10 @@
     method public void pauseTiming();
     method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void report(String fullClassName, String simpleClassName, String methodName);
     method public void resumeTiming();
+    field public static final androidx.benchmark.BenchmarkState.Companion! Companion;
+  }
+
+  public static final class BenchmarkState.Companion {
   }
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class IsolationActivity extends android.app.Activity {
diff --git a/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt b/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt
index 1b42ad2..52245e1 100644
--- a/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt
+++ b/benchmark/common/src/main/java/androidx/benchmark/BenchmarkState.kt
@@ -461,7 +461,7 @@
         )
     }
 
-    internal companion object {
+    companion object {
         private const val TAG = "Benchmark"
         private const val STUDIO_OUTPUT_KEY_PREFIX = "android.studio.display."
         private const val STUDIO_OUTPUT_KEY_ID = "benchmark"
@@ -547,7 +547,7 @@
             ResultWriter.appendReport(report)
         }
 
-        internal fun ideSummaryLineWrapped(key: String, nanos: Long): String {
+        private fun ideSummaryLineWrapped(key: String, nanos: Long): String {
             val warningLines =
                 Errors.acquireWarningStringForLogging()?.split("\n") ?: listOf()
             return (warningLines + ideSummaryLine(key, nanos))
@@ -560,7 +560,7 @@
 
         // NOTE: this summary line will use default locale to determine separators. As
         // this line is only meant for human eyes, we don't worry about consistency here.
-        fun ideSummaryLine(key: String, nanos: Long) = String.format(
+        internal fun ideSummaryLine(key: String, nanos: Long) = String.format(
             // 13 is used for alignment here, because it's enough that 9.99sec will still
             // align with any other output, without moving data too far to the right
             "%13s ns %s",
@@ -568,7 +568,7 @@
             key
         )
 
-        fun Bundle.putIdeSummaryLine(testName: String, nanos: Long) {
+        internal fun Bundle.putIdeSummaryLine(testName: String, nanos: Long) {
             putString(
                 STUDIO_OUTPUT_KEY_PREFIX + STUDIO_OUTPUT_KEY_ID,
                 ideSummaryLineWrapped(testName, nanos)
diff --git a/biometric/build.gradle b/biometric/build.gradle
index 20593ee..a65294f 100644
--- a/biometric/build.gradle
+++ b/biometric/build.gradle
@@ -10,9 +10,9 @@
 
 dependencies {
     api("androidx.annotation:annotation:1.1.0")
-    api("androidx.appcompat:appcompat:1.1.0-rc01")
-    api("androidx.core:core:1.1.0-rc03")
-    api("androidx.fragment:fragment:1.1.0-rc01")
+    api("androidx.appcompat:appcompat:1.1.0")
+    api("androidx.core:core:1.1.0")
+    api("androidx.fragment:fragment:1.1.0")
 
     androidTestImplementation(ANDROIDX_TEST_CORE)
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
@@ -31,6 +31,11 @@
     aaptOptions {
         noCompress 'ttf'
     }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
 }
 
 androidx {
diff --git a/biometric/src/androidTest/java/androidx/biometric/DeviceCredentialHandlerBridgeTest.java b/biometric/src/androidTest/java/androidx/biometric/DeviceCredentialHandlerBridgeTest.java
index baa8324..1d55d79 100644
--- a/biometric/src/androidTest/java/androidx/biometric/DeviceCredentialHandlerBridgeTest.java
+++ b/biometric/src/androidTest/java/androidx/biometric/DeviceCredentialHandlerBridgeTest.java
@@ -21,6 +21,7 @@
 import android.content.DialogInterface;
 import android.os.Build;
 
+import androidx.annotation.NonNull;
 import androidx.biometric.DeviceCredentialHandlerBridge.DeviceCredentialResult;
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -40,10 +41,17 @@
             new BiometricPrompt.AuthenticationCallback() {
             };
 
-    private static final DialogInterface.OnClickListener CLICK_LISTENER = (dialog, which) -> {
-    };
+    private static final DialogInterface.OnClickListener CLICK_LISTENER =
+            new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialog, int which) {
+                }
+            };
 
-    private static final Executor EXECUTOR = runnable -> {
+    private static final Executor EXECUTOR = new Executor() {
+        @Override
+        public void execute(@NonNull Runnable runnable) {
+        }
     };
 
     @After
diff --git a/biometric/src/main/java/androidx/biometric/BiometricFragment.java b/biometric/src/main/java/androidx/biometric/BiometricFragment.java
index a124457..c44183f 100644
--- a/biometric/src/main/java/androidx/biometric/BiometricFragment.java
+++ b/biometric/src/main/java/androidx/biometric/BiometricFragment.java
@@ -83,7 +83,12 @@
 
     // Do not rely on the application's executor when calling into the framework's code.
     private final Handler mHandler = new Handler(Looper.getMainLooper());
-    private final Executor mExecutor = mHandler::post;
+    private final Executor mExecutor = new Executor() {
+        @Override
+        public void execute(@NonNull Runnable runnable) {
+            mHandler.post(runnable);
+        }
+    };
 
     // Also created once and retained.
     private final android.hardware.biometrics.BiometricPrompt.AuthenticationCallback
@@ -91,16 +96,19 @@
             new android.hardware.biometrics.BiometricPrompt.AuthenticationCallback() {
                 @Override
                 public void onAuthenticationError(final int errorCode,
-                        final CharSequence errString) {
-                    mClientExecutor.execute(() -> {
-                        CharSequence error = errString;
-                        if (error == null) {
-                            error = mContext.getString(R.string.default_error_msg) + " "
-                                    + errorCode;
+                                                  final CharSequence errString) {
+                    mClientExecutor.execute(new Runnable() {
+                        @Override
+                        public void run() {
+                            CharSequence error = errString;
+                            if (error == null) {
+                                error = mContext.getString(R.string.default_error_msg) + " "
+                                        + errorCode;
+                            }
+                            mClientAuthenticationCallback
+                                    .onAuthenticationError(Utils.isUnknownError(errorCode)
+                                            ? BiometricPrompt.ERROR_VENDOR : errorCode, error);
                         }
-                        mClientAuthenticationCallback
-                                .onAuthenticationError(Utils.isUnknownError(errorCode)
-                                        ? BiometricPrompt.ERROR_VENDOR : errorCode, error);
                     });
                     cleanup();
                 }
@@ -116,15 +124,25 @@
                         final android.hardware.biometrics.BiometricPrompt.AuthenticationResult
                                 result) {
                     mClientExecutor.execute(
-                            () -> mClientAuthenticationCallback.onAuthenticationSucceeded(
-                                    new BiometricPrompt.AuthenticationResult(
-                                            unwrapCryptoObject(result.getCryptoObject()))));
+                            new Runnable() {
+                                @Override
+                                public void run() {
+                                    mClientAuthenticationCallback.onAuthenticationSucceeded(
+                                            new BiometricPrompt.AuthenticationResult(
+                                                    unwrapCryptoObject(result.getCryptoObject())));
+                                }
+                            });
                     cleanup();
                 }
 
                 @Override
                 public void onAuthenticationFailed() {
-                    mClientExecutor.execute(mClientAuthenticationCallback::onAuthenticationFailed);
+                    mClientExecutor.execute(new Runnable() {
+                        @Override
+                        public void run() {
+                            mClientAuthenticationCallback.onAuthenticationFailed();
+                        }
+                    });
                 }
             };
 
@@ -140,43 +158,49 @@
     // Also created once and retained.
     @SuppressWarnings("deprecation")
     private final DialogInterface.OnClickListener mDeviceCredentialButtonListener =
-            (dialog, which) -> {
-                if (which == DialogInterface.BUTTON_NEGATIVE) {
-                    final FragmentActivity activity = getActivity();
-                    if (!(activity instanceof DeviceCredentialHandlerActivity)) {
-                        Log.e(TAG, "Failed to check device credential. Parent handler not found.");
-                        return;
-                    }
+            new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialog, int which) {
+                    if (which == DialogInterface.BUTTON_NEGATIVE) {
+                        final FragmentActivity activity = BiometricFragment.this.getActivity();
+                        if (!(activity instanceof DeviceCredentialHandlerActivity)) {
+                            Log.e(TAG, "Failed to check device credential."
+                                    + " Parent handler not found.");
+                            return;
+                        }
 
-                    final KeyguardManager km = activity.getSystemService(KeyguardManager.class);
-                    if (km == null) {
-                        Log.e(TAG, "Failed to check device credential. KeyguardManager was null.");
-                        return;
-                    }
+                        final KeyguardManager km = activity.getSystemService(KeyguardManager.class);
+                        if (km == null) {
+                            Log.e(TAG, "Failed to check device credential."
+                                    + " KeyguardManager was null.");
+                            return;
+                        }
 
-                    // Pass along the title and subtitle from the biometric prompt.
-                    final CharSequence title;
-                    final CharSequence subtitle;
-                    if (mBundle != null) {
-                        title = mBundle.getCharSequence(BiometricPrompt.KEY_TITLE);
-                        subtitle = mBundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
-                    } else {
-                        title = null;
-                        subtitle = null;
-                    }
+                        // Pass along the title and subtitle from the biometric prompt.
+                        final CharSequence title;
+                        final CharSequence subtitle;
+                        if (mBundle != null) {
+                            title = mBundle.getCharSequence(BiometricPrompt.KEY_TITLE);
+                            subtitle = mBundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
+                        } else {
+                            title = null;
+                            subtitle = null;
+                        }
 
-                    // Prevent the bridge from resetting until the confirmation activity finishes.
-                    DeviceCredentialHandlerBridge bridge =
-                            DeviceCredentialHandlerBridge.getInstanceIfNotNull();
-                    if (bridge != null) {
-                        bridge.startIgnoringReset();
-                    }
+                        // Prevent bridge from resetting until the confirmation activity finishes.
+                        DeviceCredentialHandlerBridge bridge =
+                                DeviceCredentialHandlerBridge.getInstanceIfNotNull();
+                        if (bridge != null) {
+                            bridge.startIgnoringReset();
+                        }
 
-                    // Launch a new instance of the confirm device credential Settings activity.
-                    final Intent intent = km.createConfirmDeviceCredentialIntent(title, subtitle);
-                    intent.setFlags(
-                            Intent.FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
-                    activity.startActivityForResult(intent, 0 /* requestCode */);
+                        // Launch a new instance of the confirm device credential Settings activity.
+                        final Intent intent =
+                                km.createConfirmDeviceCredentialIntent(title, subtitle);
+                        intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK
+                                | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+                        activity.startActivityForResult(intent, 0 /* requestCode */);
+                    }
                 }
             };
 
@@ -294,10 +318,13 @@
 
             if (allowDeviceCredential) {
                 mStartRespectingCancel = false;
-                mHandler.postDelayed(() -> {
-                    // Hack almost over 9000, ignore cancel signal if it's within the first quarter
-                    // second.
-                    mStartRespectingCancel = true;
+                mHandler.postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        // Hack almost over 9000, ignore cancel signal if it's within the first
+                        // quarter second.
+                        mStartRespectingCancel = true;
+                    }
                 }, 250 /* ms */);
             }
 
diff --git a/biometric/src/main/java/androidx/biometric/BiometricManager.java b/biometric/src/main/java/androidx/biometric/BiometricManager.java
index 34de4c9..1faa39e 100644
--- a/biometric/src/main/java/androidx/biometric/BiometricManager.java
+++ b/biometric/src/main/java/androidx/biometric/BiometricManager.java
@@ -111,20 +111,19 @@
     }
 
     /**
-     * Determines if biometrics can be used, or in other words, whether {@link BiometricPrompt}
-     * can be expected to be shown (hardware available, templates enrolled, user-enabled).
+     * Determines if biometrics can be used, or equivalently, whether {@link BiometricPrompt} can
+     * be shown (hardware available, templates enrolled, user-enabled).
      *
      * @return {@link #BIOMETRIC_SUCCESS} if a biometric can currently be used (enrolled and
      * available), {@link #BIOMETRIC_ERROR_NONE_ENROLLED} if the user does not have any enrolled,
-     * or {@link #BIOMETRIC_ERROR_HW_UNAVAILABLE} or {@link #BIOMETRIC_ERROR_NO_HARDWARE} if none
-     * are currently enabled/supported.
+     * or {@link #BIOMETRIC_ERROR_NO_HARDWARE} if none are currently enabled/supported.
      */
     public @BiometricError int canAuthenticate() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
             return Api29Impl.canAuthenticate(mBiometricManager);
         } else {
             if (!mFingerprintManager.isHardwareDetected()) {
-                return BIOMETRIC_ERROR_HW_UNAVAILABLE;
+                return BIOMETRIC_ERROR_NO_HARDWARE;
             } else if (!mFingerprintManager.hasEnrolledFingerprints()) {
                 return BIOMETRIC_ERROR_NONE_ENROLLED;
             } else {
diff --git a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
index 15cfcc2..5959f79 100644
--- a/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
+++ b/biometric/src/main/java/androidx/biometric/BiometricPrompt.java
@@ -463,20 +463,24 @@
             new DialogInterface.OnClickListener() {
                 @Override
                 public void onClick(DialogInterface dialog, int which) {
-                    mExecutor.execute(() -> {
-                        if (usingBiometricFragment()) {
-                            final CharSequence errorText =
-                                    mBiometricFragment.getNegativeButtonText();
-                            mAuthenticationCallback.onAuthenticationError(
-                                    ERROR_NEGATIVE_BUTTON, errorText != null ? errorText : "");
-                            mBiometricFragment.cleanup();
-                        } else {
-                            final CharSequence errorText =
-                                    mFingerprintDialogFragment.getNegativeButtonText();
-                            mAuthenticationCallback.onAuthenticationError(
-                                    ERROR_NEGATIVE_BUTTON, errorText != null ? errorText : "");
-                            mFingerprintHelperFragment.cancel(
-                                    FingerprintHelperFragment.USER_CANCELED_FROM_NEGATIVE_BUTTON);
+                    mExecutor.execute(new Runnable() {
+                        @Override
+                        public void run() {
+                            if (usingBiometricFragment()) {
+                                final CharSequence errorText =
+                                        mBiometricFragment.getNegativeButtonText();
+                                mAuthenticationCallback.onAuthenticationError(
+                                        ERROR_NEGATIVE_BUTTON, errorText != null ? errorText : "");
+                                mBiometricFragment.cleanup();
+                            } else {
+                                final CharSequence errorText =
+                                        mFingerprintDialogFragment.getNegativeButtonText();
+                                mAuthenticationCallback.onAuthenticationError(
+                                        ERROR_NEGATIVE_BUTTON, errorText != null ? errorText : "");
+                                mFingerprintHelperFragment.cancel(
+                                        FingerprintHelperFragment
+                                                .USER_CANCELED_FROM_NEGATIVE_BUTTON);
+                            }
                         }
                     });
                 }
diff --git a/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java b/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
index 19ac3f9..94b192b 100644
--- a/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
+++ b/biometric/src/main/java/androidx/biometric/FingerprintDialogFragment.java
@@ -149,58 +149,68 @@
     // Also created once and retained.
     @SuppressWarnings("deprecation")
     private final DialogInterface.OnClickListener mDeviceCredentialButtonListener =
-            (dialog, which) -> {
-                if (which == DialogInterface.BUTTON_NEGATIVE) {
-                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
-                        Log.e(TAG, "Failed to check device credential. Not supported prior to L.");
-                        return;
-                    }
+            new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialog, int which) {
+                    if (which == DialogInterface.BUTTON_NEGATIVE) {
+                        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+                            Log.e(TAG, "Failed to check device credential."
+                                    + " Not supported prior to L.");
+                            return;
+                        }
 
-                    final FragmentActivity activity = getActivity();
-                    if (!(activity instanceof DeviceCredentialHandlerActivity)) {
-                        Log.e(TAG, "Failed to check device credential. Parent handler not found.");
-                        return;
-                    }
+                        final FragmentActivity activity =
+                                FingerprintDialogFragment.this.getActivity();
+                        if (!(activity instanceof DeviceCredentialHandlerActivity)) {
+                            Log.e(TAG, "Failed to check device credential."
+                                    + " Parent handler not found.");
+                            return;
+                        }
 
-                    final Object service = activity.getSystemService(Context.KEYGUARD_SERVICE);
-                    if (!(service instanceof KeyguardManager)) {
-                        Log.e(TAG, "Failed to check device credential. KeyguardManager not found.");
-                        return;
-                    }
-                    final KeyguardManager km = (KeyguardManager) service;
+                        final Object service = activity.getSystemService(Context.KEYGUARD_SERVICE);
+                        if (!(service instanceof KeyguardManager)) {
+                            Log.e(TAG, "Failed to check device credential."
+                                    + " KeyguardManager not found.");
+                            return;
+                        }
+                        final KeyguardManager km = (KeyguardManager) service;
 
-                    // Dismiss the fingerprint dialog without forwarding errors to the client.
-                    final FingerprintHelperFragment fingerprintHelperFragment =
-                            (FingerprintHelperFragment) getFragmentManager().findFragmentByTag(
-                                    BiometricPrompt.FINGERPRINT_HELPER_FRAGMENT_TAG);
-                    if (fingerprintHelperFragment != null) {
-                        fingerprintHelperFragment.setConfirmingDeviceCredential(true);
-                    }
-                    onCancel(dialog);
+                        // Dismiss the fingerprint dialog without forwarding errors to the client.
+                        final FingerprintHelperFragment fingerprintHelperFragment =
+                                (FingerprintHelperFragment) FingerprintDialogFragment.this
+                                        .getFragmentManager()
+                                        .findFragmentByTag(
+                                                BiometricPrompt.FINGERPRINT_HELPER_FRAGMENT_TAG);
+                        if (fingerprintHelperFragment != null) {
+                            fingerprintHelperFragment.setConfirmingDeviceCredential(true);
+                        }
+                        FingerprintDialogFragment.this.onCancel(dialog);
 
-                    // Pass along the title and subtitle from the biometric prompt.
-                    final CharSequence title;
-                    final CharSequence subtitle;
-                    if (mBundle != null) {
-                        title = mBundle.getCharSequence(BiometricPrompt.KEY_TITLE);
-                        subtitle = mBundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
-                    } else {
-                        title = null;
-                        subtitle = null;
-                    }
+                        // Pass along the title and subtitle from the biometric prompt.
+                        final CharSequence title;
+                        final CharSequence subtitle;
+                        if (mBundle != null) {
+                            title = mBundle.getCharSequence(BiometricPrompt.KEY_TITLE);
+                            subtitle = mBundle.getCharSequence(BiometricPrompt.KEY_SUBTITLE);
+                        } else {
+                            title = null;
+                            subtitle = null;
+                        }
 
-                    // Prevent the bridge from resetting until the confirmation activity finishes.
-                    DeviceCredentialHandlerBridge bridge =
-                            DeviceCredentialHandlerBridge.getInstanceIfNotNull();
-                    if (bridge != null) {
-                        bridge.startIgnoringReset();
-                    }
+                        // Prevent bridge from resetting until the confirmation activity finishes.
+                        DeviceCredentialHandlerBridge bridge =
+                                DeviceCredentialHandlerBridge.getInstanceIfNotNull();
+                        if (bridge != null) {
+                            bridge.startIgnoringReset();
+                        }
 
-                    // Launch a new instance of the confirm device credential Settings activity.
-                    final Intent intent = km.createConfirmDeviceCredentialIntent(title, subtitle);
-                    intent.setFlags(
-                            Intent.FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
-                    activity.startActivityForResult(intent, 0 /* requestCode */);
+                        // Launch a new instance of the confirm device credential Settings activity.
+                        final Intent intent =
+                                km.createConfirmDeviceCredentialIntent(title, subtitle);
+                        intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK
+                                | Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+                        activity.startActivityForResult(intent, 0 /* requestCode */);
+                    }
                 }
             };
 
@@ -247,13 +257,16 @@
                 isDeviceCredentialAllowed()
                         ? getString(R.string.confirm_device_credential_password)
                         : mBundle.getCharSequence(BiometricPrompt.KEY_NEGATIVE_TEXT);
-        builder.setNegativeButton(negativeButtonText, (dialog, which) -> {
-            if (isDeviceCredentialAllowed()) {
-                mDeviceCredentialButtonListener.onClick(dialog, which);
-            } else if (mNegativeButtonListener != null) {
-                mNegativeButtonListener.onClick(dialog, which);
-            } else {
-                Log.w(TAG, "No suitable negative button listener.");
+        builder.setNegativeButton(negativeButtonText, new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                if (FingerprintDialogFragment.this.isDeviceCredentialAllowed()) {
+                    mDeviceCredentialButtonListener.onClick(dialog, which);
+                } else if (mNegativeButtonListener != null) {
+                    mNegativeButtonListener.onClick(dialog, which);
+                } else {
+                    Log.w(TAG, "No suitable negative button listener.");
+                }
             }
         });
 
@@ -429,7 +442,12 @@
     private void dismissAfterDelay() {
         mErrorText.setTextColor(mErrorColor);
         mErrorText.setText(R.string.fingerprint_error_lockout);
-        mHandler.postDelayed(this::dismiss, HIDE_DIALOG_DELAY);
+        mHandler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                FingerprintDialogFragment.this.dismiss();
+            }
+        }, HIDE_DIALOG_DELAY);
     }
 
     private void handleDismissDialogError() {
diff --git a/biometric/src/main/java/androidx/biometric/FingerprintHelperFragment.java b/biometric/src/main/java/androidx/biometric/FingerprintHelperFragment.java
index 9eae282..7e3f2f9 100644
--- a/biometric/src/main/java/androidx/biometric/FingerprintHelperFragment.java
+++ b/biometric/src/main/java/androidx/biometric/FingerprintHelperFragment.java
@@ -78,8 +78,9 @@
     // Also created once and retained.
     @SuppressWarnings("deprecation")
     private final androidx.core.hardware.fingerprint.FingerprintManagerCompat.AuthenticationCallback
-            mAuthenticationCallback = new androidx.core.hardware.fingerprint
-            .FingerprintManagerCompat.AuthenticationCallback() {
+            mAuthenticationCallback =
+            new androidx.core.hardware.fingerprint.FingerprintManagerCompat
+                    .AuthenticationCallback() {
 
                 private void dismissAndForwardResult(final int errMsgId,
                         final CharSequence errString) {
@@ -87,8 +88,13 @@
                             .sendToTarget();
                     if (!mConfirmingDeviceCredential) {
                         mExecutor.execute(
-                                () -> mClientAuthenticationCallback.onAuthenticationError(errMsgId,
-                                        errString));
+                                new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        mClientAuthenticationCallback
+                                                .onAuthenticationError(errMsgId, errString);
+                                    }
+                                });
                     }
                 }
 
@@ -121,9 +127,21 @@
                         mHandler.obtainMessage(FingerprintDialogFragment.MSG_SHOW_ERROR,
                                 errMsgIdToSend, 0, errStringNonNull).sendToTarget();
                         if (!mConfirmingDeviceCredential) {
-                            mHandler.postDelayed(() -> mExecutor.execute(
-                                    () -> mClientAuthenticationCallback.onAuthenticationError(
-                                            errMsgIdToSend, errStringNonNull)),
+                            mHandler.postDelayed(
+                                    new Runnable() {
+                                        @Override
+                                        public void run() {
+                                            mExecutor.execute(new Runnable() {
+                                                @Override
+                                                public void run() {
+                                                    mClientAuthenticationCallback
+                                                            .onAuthenticationError(
+                                                                    errMsgIdToSend,
+                                                                    errStringNonNull);
+                                                }
+                                            });
+                                        }
+                                    },
                                     FingerprintDialogFragment.HIDE_DIALOG_DELAY);
                         }
                     }
@@ -144,9 +162,14 @@
                     mHandler.obtainMessage(
                             FingerprintDialogFragment.MSG_DISMISS_DIALOG_AUTHENTICATED)
                             .sendToTarget();
-                    mExecutor.execute(() -> mClientAuthenticationCallback.onAuthenticationSucceeded(
-                            new BiometricPrompt.AuthenticationResult(
-                                    unwrapCryptoObject(result.getCryptoObject()))));
+                    mExecutor.execute(new Runnable() {
+                        @Override
+                        public void run() {
+                            mClientAuthenticationCallback.onAuthenticationSucceeded(
+                                    new BiometricPrompt.AuthenticationResult(
+                                            unwrapCryptoObject(result.getCryptoObject())));
+                        }
+                    });
                     cleanup();
                 }
 
@@ -155,7 +178,12 @@
                     mHandler.obtainMessage(FingerprintDialogFragment.MSG_SHOW_HELP,
                             mContext.getResources().getString(R.string.fingerprint_not_recognized))
                             .sendToTarget();
-                    mExecutor.execute(mClientAuthenticationCallback::onAuthenticationFailed);
+                    mExecutor.execute(new Runnable() {
+                        @Override
+                        public void run() {
+                            mClientAuthenticationCallback.onAuthenticationFailed();
+                        }
+                    });
                 }
             };
 
@@ -235,6 +263,7 @@
 
     /**
      * Cancel the authentication.
+     *
      * @param canceledFrom one of the USER_CANCELED_FROM* constants
      */
     void cancel(int canceledFrom) {
@@ -268,8 +297,8 @@
      * if conditions are not met
      */
     @SuppressWarnings("deprecation")
-    private boolean handlePreAuthenticationErrors(androidx.core.hardware.fingerprint
-            .FingerprintManagerCompat fingerprintManager) {
+    private boolean handlePreAuthenticationErrors(
+            androidx.core.hardware.fingerprint.FingerprintManagerCompat fingerprintManager) {
         if (!fingerprintManager.isHardwareDetected()) {
             sendErrorToClient(BiometricPrompt.ERROR_HW_UNAVAILABLE);
             return true;
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt
index d1acea7..697578a 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryGroups.kt
@@ -36,6 +36,7 @@
     val CARDVIEW = LibraryGroup("androidx.cardview")
     val COLLECTION = LibraryGroup("androidx.collection")
     val CONCURRENT = LibraryGroup("androidx.concurrent")
+    val CONTENTACCESS = LibraryGroup("androidx.contentaccess")
     val CONTENTPAGER = LibraryGroup("androidx.contentpager")
     val COORDINATORLAYOUT = LibraryGroup("androidx.coordinatorlayout")
     val COMPOSE = LibraryGroup("androidx.compose", false)
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 9989cc3..65b038d 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -31,7 +31,7 @@
     val ARCH_CORE_TESTING = ARCH_CORE
     val ARCH_RUNTIME = Version("2.2.0-alpha01")
     val ASYNCLAYOUTINFLATER = Version("1.1.0-alpha01")
-    val AUTOFILL = Version("1.0.0-alpha03")
+    val AUTOFILL = Version("1.0.0-beta01")
     val BENCHMARK = Version("1.0.0-alpha06")
     val BIOMETRIC = Version("1.0.0-beta02")
     val BROWSER = Version("1.2.0-alpha08")
@@ -45,6 +45,7 @@
     val COLLECTION = Version("1.2.0-alpha01")
     val CONTENTPAGER = Version("1.1.0-alpha01")
     val COMPOSE = Version("0.1.0-dev01")
+    val CONTENTACCESS = Version("1.0.0-alpha01")
     val COORDINATORLAYOUT = Version("1.1.0-beta02")
     val CORE = Version("1.2.0-alpha05")
     val CORE_ROLE = Version("1.0.0-alpha02")
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
index 1bbfb4b..5ea3a23 100644
--- a/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/CheckApiEquivalenceTask.kt
@@ -56,6 +56,12 @@
     }
 
     private fun summarizeDiff(a: File, b: File): String {
+        if (!a.exists()) {
+            return "${a.toString()} does not exist"
+        }
+        if (!b.exists()) {
+            return "${b.toString()} does not exist"
+        }
         val process = ProcessBuilder(listOf("diff", a.toString(), b.toString()))
                 .redirectOutput(ProcessBuilder.Redirect.PIPE)
                 .start()
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
index 6881dd8..9da49fa 100644
--- a/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/UpdateApiTask.kt
@@ -57,7 +57,7 @@
         if (updateRestrictedAPIs) {
             return outputApiLocations.get().flatMap { it.files() }
         }
-        return outputApiLocations.get().map { it.publicApiFile }
+        return outputApiLocations.get().flatMap { it.nonRestrictedFiles() }
     }
 
     @TaskAction
diff --git a/car/cluster/build.gradle b/car/cluster/build.gradle
index 4624b32..2a2bf47 100644
--- a/car/cluster/build.gradle
+++ b/car/cluster/build.gradle
@@ -25,7 +25,7 @@
 
 dependencies {
     api(project(":car"))
-    api("androidx.versionedparcelable:versionedparcelable:1.1.0-rc01")
+    api("androidx.versionedparcelable:versionedparcelable:1.1.0")
     api("androidx.annotation:annotation:1.1.0")
 
     annotationProcessor(project(":versionedparcelable-annotation"))
diff --git a/car/core/build.gradle b/car/core/build.gradle
index eba467e..26993c3 100644
--- a/car/core/build.gradle
+++ b/car/core/build.gradle
@@ -9,7 +9,7 @@
 }
 
 dependencies {
-    api("androidx.appcompat:appcompat:1.1.0-rc01")
+    api("androidx.appcompat:appcompat:1.1.0")
     api("androidx.cardview:cardview:1.0.0")
     api("androidx.annotation:annotation:1.1.0")
     api(project(":recyclerview:recyclerview"))
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt
index 3cfbc1d..166e952 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt
@@ -29,7 +29,7 @@
 import androidx.ui.core.dp
 import androidx.ui.core.toRect
 import androidx.ui.graphics.SolidColor
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.ui.graphics.Color
 import androidx.ui.layout.FlexColumn
 import androidx.ui.layout.FlexRow
@@ -49,7 +49,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -82,7 +82,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -114,7 +114,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -148,7 +148,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -181,7 +181,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -215,7 +215,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -247,7 +247,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -279,7 +279,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -311,7 +311,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -343,7 +343,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -376,7 +376,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -408,7 +408,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -440,7 +440,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -472,7 +472,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -504,7 +504,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -537,7 +537,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -569,7 +569,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -602,7 +602,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -637,7 +637,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -668,7 +668,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -702,7 +702,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -733,7 +733,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -767,7 +767,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -803,7 +803,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -836,7 +836,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -868,7 +868,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -901,7 +901,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -933,7 +933,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -967,7 +967,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1000,7 +1000,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1032,7 +1032,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1064,7 +1064,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1100,7 +1100,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1132,7 +1132,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1165,7 +1165,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1198,7 +1198,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1230,7 +1230,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1264,7 +1264,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1302,7 +1302,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1335,7 +1335,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1367,7 +1367,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1399,7 +1399,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1432,7 +1432,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1470,7 +1470,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1508,7 +1508,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1546,7 +1546,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1578,7 +1578,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1609,7 +1609,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1641,7 +1641,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1673,7 +1673,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1705,7 +1705,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1737,7 +1737,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1769,7 +1769,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1801,7 +1801,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1832,7 +1832,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1864,7 +1864,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1897,7 +1897,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1934,7 +1934,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1965,7 +1965,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -1998,7 +1998,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2030,7 +2030,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2062,7 +2062,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2094,7 +2094,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2127,7 +2127,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2159,7 +2159,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2192,7 +2192,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2225,7 +2225,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2259,7 +2259,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2296,7 +2296,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2329,7 +2329,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2362,7 +2362,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2399,7 +2399,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2431,7 +2431,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2463,7 +2463,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2495,7 +2495,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2527,7 +2527,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2559,7 +2559,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2592,7 +2592,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2624,7 +2624,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2656,7 +2656,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2688,7 +2688,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2727,7 +2727,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2759,7 +2759,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2792,7 +2792,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2823,7 +2823,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2854,7 +2854,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2886,7 +2886,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2918,7 +2918,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2950,7 +2950,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -2982,7 +2982,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3015,7 +3015,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3047,7 +3047,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3079,7 +3079,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3111,7 +3111,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3147,7 +3147,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3178,7 +3178,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3211,7 +3211,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3244,7 +3244,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3277,7 +3277,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3308,7 +3308,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3341,7 +3341,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3374,7 +3374,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3407,7 +3407,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3439,7 +3439,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3472,7 +3472,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3504,7 +3504,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3535,7 +3535,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3568,7 +3568,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3600,7 +3600,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3631,7 +3631,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3665,7 +3665,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3701,7 +3701,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3732,7 +3732,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3764,7 +3764,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3797,7 +3797,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3831,7 +3831,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3863,7 +3863,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3895,7 +3895,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3927,7 +3927,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3959,7 +3959,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -3990,7 +3990,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4023,7 +4023,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4061,7 +4061,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4094,7 +4094,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4127,7 +4127,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4159,7 +4159,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4191,7 +4191,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4222,7 +4222,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4255,7 +4255,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4287,7 +4287,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4318,7 +4318,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4351,7 +4351,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4383,7 +4383,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4416,7 +4416,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4447,7 +4447,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4478,7 +4478,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4510,7 +4510,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4543,7 +4543,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4574,7 +4574,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4605,7 +4605,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4637,7 +4637,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4669,7 +4669,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4702,7 +4702,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4735,7 +4735,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4773,7 +4773,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4807,7 +4807,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4842,7 +4842,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4881,7 +4881,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp5.toColor()).applyBrush(paint)
+                    SolidColor(tmp5.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4913,7 +4913,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
@@ -4945,7 +4945,7 @@
             Padding(top=1.dp,  bottom=1.dp, left=1.dp, right=1.dp) {
                 Draw { canvas, parentSize ->
                     val paint = Paint()
-                    SolidColor(tmp3.toColor()).applyBrush(paint)
+                    SolidColor(tmp3.toColor()).applyTo(paint)
                     canvas.drawRect(parentSize.toRect(), paint)
                 }
                 if(constraints.maxHeight > constraints.maxWidth) {
diff --git a/contentaccess/OWNERS b/contentaccess/OWNERS
new file mode 100644
index 0000000..075ab06
--- /dev/null
+++ b/contentaccess/OWNERS
@@ -0,0 +1 @@
+sumir@google.com
diff --git a/contentaccess/runtime/build.gradle b/contentaccess/runtime/build.gradle
new file mode 100644
index 0000000..19aefc3
--- /dev/null
+++ b/contentaccess/runtime/build.gradle
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import static androidx.build.dependencies.DependenciesKt.*
+import androidx.build.LibraryGroups
+import androidx.build.LibraryVersions
+import androidx.build.AndroidXExtension
+import androidx.build.Publish
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+    id("kotlin-android")
+}
+
+dependencies {
+    
+}
+
+
+androidx {
+    name = "Android ContentAccess - Runtime"
+    publish = Publish.NONE
+    mavenVersion = LibraryVersions.CONTENTACCESS
+    mavenGroup = LibraryGroups.CONTENTACCESS
+    inceptionYear = "2019"
+    description = "This library is the runtime component for ContentAccess, a Jetpack library for" +
+            " simplifying ContentProvider usage."
+    url = AndroidXExtension.ARCHITECTURE_URL
+}
diff --git a/contentaccess/runtime/src/main/AndroidManifest.xml b/contentaccess/runtime/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..a763983
--- /dev/null
+++ b/contentaccess/runtime/src/main/AndroidManifest.xml
@@ -0,0 +1,23 @@
+<!--
+  ~ Copyright (C) 2016 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="androidx.contentaccess">
+
+    <application>
+    </application>
+
+</manifest>
diff --git a/content/OWNERS b/contentpager/OWNERS
similarity index 100%
rename from content/OWNERS
rename to contentpager/OWNERS
diff --git a/content/api/1.0.0.txt b/contentpager/api/1.0.0.txt
similarity index 100%
rename from content/api/1.0.0.txt
rename to contentpager/api/1.0.0.txt
diff --git a/content/api/1.1.0-alpha01.txt b/contentpager/api/1.1.0-alpha01.txt
similarity index 100%
rename from content/api/1.1.0-alpha01.txt
rename to contentpager/api/1.1.0-alpha01.txt
diff --git a/content/api/api_lint.ignore b/contentpager/api/api_lint.ignore
similarity index 100%
rename from content/api/api_lint.ignore
rename to contentpager/api/api_lint.ignore
diff --git a/content/api/current.txt b/contentpager/api/current.txt
similarity index 100%
rename from content/api/current.txt
rename to contentpager/api/current.txt
diff --git a/content/api/restricted_1.1.0-alpha01.txt b/contentpager/api/public_plus_experimental_1.1.0-alpha01.txt
similarity index 100%
copy from content/api/restricted_1.1.0-alpha01.txt
copy to contentpager/api/public_plus_experimental_1.1.0-alpha01.txt
diff --git a/content/api/restricted_current.txt b/contentpager/api/public_plus_experimental_current.txt
similarity index 100%
copy from content/api/restricted_current.txt
copy to contentpager/api/public_plus_experimental_current.txt
diff --git a/content/api/res-1.0.0.txt b/contentpager/api/res-1.0.0.txt
similarity index 100%
rename from content/api/res-1.0.0.txt
rename to contentpager/api/res-1.0.0.txt
diff --git a/content/api/res-1.1.0-alpha01.txt b/contentpager/api/res-1.1.0-alpha01.txt
similarity index 100%
rename from content/api/res-1.1.0-alpha01.txt
rename to contentpager/api/res-1.1.0-alpha01.txt
diff --git a/content/api/restricted_1.0.0.txt b/contentpager/api/restricted_1.0.0.txt
similarity index 100%
rename from content/api/restricted_1.0.0.txt
rename to contentpager/api/restricted_1.0.0.txt
diff --git a/content/api/restricted_1.1.0-alpha01.txt b/contentpager/api/restricted_1.1.0-alpha01.txt
similarity index 100%
rename from content/api/restricted_1.1.0-alpha01.txt
rename to contentpager/api/restricted_1.1.0-alpha01.txt
diff --git a/content/api/restricted_current.txt b/contentpager/api/restricted_current.txt
similarity index 100%
rename from content/api/restricted_current.txt
rename to contentpager/api/restricted_current.txt
diff --git a/content/api_legacy/0.0.0.txt b/contentpager/api_legacy/0.0.0.txt
similarity index 100%
rename from content/api_legacy/0.0.0.txt
rename to contentpager/api_legacy/0.0.0.txt
diff --git a/content/api_legacy/27.0.0.txt b/contentpager/api_legacy/27.0.0.txt
similarity index 100%
rename from content/api_legacy/27.0.0.txt
rename to contentpager/api_legacy/27.0.0.txt
diff --git a/content/api_legacy/27.1.0.txt b/contentpager/api_legacy/27.1.0.txt
similarity index 100%
rename from content/api_legacy/27.1.0.txt
rename to contentpager/api_legacy/27.1.0.txt
diff --git a/content/api_legacy/28.0.0-alpha1.txt b/contentpager/api_legacy/28.0.0-alpha1.txt
similarity index 100%
rename from content/api_legacy/28.0.0-alpha1.txt
rename to contentpager/api_legacy/28.0.0-alpha1.txt
diff --git a/content/api_legacy/current.txt b/contentpager/api_legacy/current.txt
similarity index 100%
rename from content/api_legacy/current.txt
rename to contentpager/api_legacy/current.txt
diff --git a/content/build.gradle b/contentpager/build.gradle
similarity index 100%
rename from content/build.gradle
rename to contentpager/build.gradle
diff --git a/content/lint-baseline.xml b/contentpager/lint-baseline.xml
similarity index 100%
rename from content/lint-baseline.xml
rename to contentpager/lint-baseline.xml
diff --git a/content/src/androidTest/AndroidManifest.xml b/contentpager/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from content/src/androidTest/AndroidManifest.xml
rename to contentpager/src/androidTest/AndroidManifest.xml
diff --git a/content/src/androidTest/java/androidx/contentpager/content/ContentPagerTest.java b/contentpager/src/androidTest/java/androidx/contentpager/content/ContentPagerTest.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/ContentPagerTest.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/ContentPagerTest.java
diff --git a/content/src/androidTest/java/androidx/contentpager/content/LoaderQueryRunnerTest.java b/contentpager/src/androidTest/java/androidx/contentpager/content/LoaderQueryRunnerTest.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/LoaderQueryRunnerTest.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/LoaderQueryRunnerTest.java
diff --git a/content/src/androidTest/java/androidx/contentpager/content/QueryTest.java b/contentpager/src/androidTest/java/androidx/contentpager/content/QueryTest.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/QueryTest.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/QueryTest.java
diff --git a/content/src/androidTest/java/androidx/contentpager/content/TestActivity.java b/contentpager/src/androidTest/java/androidx/contentpager/content/TestActivity.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/TestActivity.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/TestActivity.java
diff --git a/content/src/androidTest/java/androidx/contentpager/content/TestContentObserver.java b/contentpager/src/androidTest/java/androidx/contentpager/content/TestContentObserver.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/TestContentObserver.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/TestContentObserver.java
diff --git a/content/src/androidTest/java/androidx/contentpager/content/TestContentProvider.java b/contentpager/src/androidTest/java/androidx/contentpager/content/TestContentProvider.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/TestContentProvider.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/TestContentProvider.java
diff --git a/content/src/androidTest/java/androidx/contentpager/content/TestQueryCallback.java b/contentpager/src/androidTest/java/androidx/contentpager/content/TestQueryCallback.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/TestQueryCallback.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/TestQueryCallback.java
diff --git a/content/src/androidTest/java/androidx/contentpager/content/TestQueryRunner.java b/contentpager/src/androidTest/java/androidx/contentpager/content/TestQueryRunner.java
similarity index 100%
rename from content/src/androidTest/java/androidx/contentpager/content/TestQueryRunner.java
rename to contentpager/src/androidTest/java/androidx/contentpager/content/TestQueryRunner.java
diff --git a/content/src/main/AndroidManifest.xml b/contentpager/src/main/AndroidManifest.xml
similarity index 100%
rename from content/src/main/AndroidManifest.xml
rename to contentpager/src/main/AndroidManifest.xml
diff --git a/content/src/main/java/androidx/contentpager/content/ContentPager.java b/contentpager/src/main/java/androidx/contentpager/content/ContentPager.java
similarity index 100%
rename from content/src/main/java/androidx/contentpager/content/ContentPager.java
rename to contentpager/src/main/java/androidx/contentpager/content/ContentPager.java
diff --git a/content/src/main/java/androidx/contentpager/content/InMemoryCursor.java b/contentpager/src/main/java/androidx/contentpager/content/InMemoryCursor.java
similarity index 100%
rename from content/src/main/java/androidx/contentpager/content/InMemoryCursor.java
rename to contentpager/src/main/java/androidx/contentpager/content/InMemoryCursor.java
diff --git a/content/src/main/java/androidx/contentpager/content/LoaderQueryRunner.java b/contentpager/src/main/java/androidx/contentpager/content/LoaderQueryRunner.java
similarity index 100%
rename from content/src/main/java/androidx/contentpager/content/LoaderQueryRunner.java
rename to contentpager/src/main/java/androidx/contentpager/content/LoaderQueryRunner.java
diff --git a/content/src/main/java/androidx/contentpager/content/Query.java b/contentpager/src/main/java/androidx/contentpager/content/Query.java
similarity index 100%
rename from content/src/main/java/androidx/contentpager/content/Query.java
rename to contentpager/src/main/java/androidx/contentpager/content/Query.java
diff --git a/core/core/build.gradle b/core/core/build.gradle
index da8e582..c9de600 100644
--- a/core/core/build.gradle
+++ b/core/core/build.gradle
@@ -13,7 +13,7 @@
     api("androidx.annotation:annotation:1.1.0")
     implementation("androidx.collection:collection:1.0.0")
     api(ARCH_LIFECYCLE_RUNTIME)
-    api("androidx.versionedparcelable:versionedparcelable:1.1.0-rc01")
+    api("androidx.versionedparcelable:versionedparcelable:1.1.0")
 
     androidTestImplementation(KOTLIN_STDLIB)
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
diff --git a/emoji/appcompat/build.gradle b/emoji/appcompat/build.gradle
index fc25a57..2d14f26 100644
--- a/emoji/appcompat/build.gradle
+++ b/emoji/appcompat/build.gradle
@@ -25,7 +25,7 @@
 
 dependencies {
     api(project(":emoji"))
-    api("androidx.appcompat:appcompat:1.1.0-rc01")
+    api("androidx.appcompat:appcompat:1.1.0")
 }
 
 androidx {
diff --git a/fragment/fragment-ktx/build.gradle b/fragment/fragment-ktx/build.gradle
index 7a021ff..0e13c77 100644
--- a/fragment/fragment-ktx/build.gradle
+++ b/fragment/fragment-ktx/build.gradle
@@ -35,7 +35,7 @@
 
 dependencies {
     api(project(":fragment:fragment"))
-    api(project(":activity:activity-ktx")) {
+    api("androidx.activity:activity-ktx:1.1.0-alpha03") {
         because 'Mirror fragment dependency graph for -ktx artifacts'
     }
     api("androidx.core:core-ktx:1.1.0") {
diff --git a/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioDialogFragmentTest.kt b/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioDialogFragmentTest.kt
index da620ea..40766cd 100644
--- a/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioDialogFragmentTest.kt
+++ b/fragment/fragment-testing/src/androidTest/java/androidx/fragment/app/testing/FragmentScenarioDialogFragmentTest.kt
@@ -301,7 +301,7 @@
                 assertThat(fragment.dialog).isNotNull()
                 assertThat(fragment.requireDialog().isShowing).isTrue()
                 fragment.dismiss()
-                fragment.requireFragmentManager().executePendingTransactions()
+                fragment.parentFragmentManager.executePendingTransactions()
                 assertThat(fragment.dialog).isNull()
             }
         }
diff --git a/fragment/fragment/api/1.2.0-alpha04.txt b/fragment/fragment/api/1.2.0-alpha04.txt
index 8256d08..0a8cb1f 100644
--- a/fragment/fragment/api/1.2.0-alpha04.txt
+++ b/fragment/fragment/api/1.2.0-alpha04.txt
@@ -39,13 +39,14 @@
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method public Object? getEnterTransition();
     method public Object? getExitTransition();
-    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
     method public final Object? getHost();
     method public final int getId();
     method public final android.view.LayoutInflater getLayoutInflater();
     method public androidx.lifecycle.Lifecycle getLifecycle();
     method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
     method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
     method public Object? getReenterTransition();
     method public final android.content.res.Resources getResources();
     method public final boolean getRetainInstance();
@@ -118,7 +119,7 @@
     method public final androidx.fragment.app.FragmentActivity requireActivity();
     method public final android.os.Bundle requireArguments();
     method public final android.content.Context requireContext();
-    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
     method public final Object requireHost();
     method public final androidx.fragment.app.Fragment requireParentFragment();
     method public final android.view.View requireView();
diff --git a/fragment/fragment/api/current.txt b/fragment/fragment/api/current.txt
index 8256d08..0a8cb1f 100644
--- a/fragment/fragment/api/current.txt
+++ b/fragment/fragment/api/current.txt
@@ -39,13 +39,14 @@
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method public Object? getEnterTransition();
     method public Object? getExitTransition();
-    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
     method public final Object? getHost();
     method public final int getId();
     method public final android.view.LayoutInflater getLayoutInflater();
     method public androidx.lifecycle.Lifecycle getLifecycle();
     method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
     method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
     method public Object? getReenterTransition();
     method public final android.content.res.Resources getResources();
     method public final boolean getRetainInstance();
@@ -118,7 +119,7 @@
     method public final androidx.fragment.app.FragmentActivity requireActivity();
     method public final android.os.Bundle requireArguments();
     method public final android.content.Context requireContext();
-    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
     method public final Object requireHost();
     method public final androidx.fragment.app.Fragment requireParentFragment();
     method public final android.view.View requireView();
diff --git a/fragment/fragment/api/public_plus_experimental_1.2.0-alpha04.txt b/fragment/fragment/api/public_plus_experimental_1.2.0-alpha04.txt
index 8256d08..0a8cb1f 100644
--- a/fragment/fragment/api/public_plus_experimental_1.2.0-alpha04.txt
+++ b/fragment/fragment/api/public_plus_experimental_1.2.0-alpha04.txt
@@ -39,13 +39,14 @@
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method public Object? getEnterTransition();
     method public Object? getExitTransition();
-    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
     method public final Object? getHost();
     method public final int getId();
     method public final android.view.LayoutInflater getLayoutInflater();
     method public androidx.lifecycle.Lifecycle getLifecycle();
     method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
     method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
     method public Object? getReenterTransition();
     method public final android.content.res.Resources getResources();
     method public final boolean getRetainInstance();
@@ -118,7 +119,7 @@
     method public final androidx.fragment.app.FragmentActivity requireActivity();
     method public final android.os.Bundle requireArguments();
     method public final android.content.Context requireContext();
-    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
     method public final Object requireHost();
     method public final androidx.fragment.app.Fragment requireParentFragment();
     method public final android.view.View requireView();
diff --git a/fragment/fragment/api/public_plus_experimental_current.txt b/fragment/fragment/api/public_plus_experimental_current.txt
index 8256d08..0a8cb1f 100644
--- a/fragment/fragment/api/public_plus_experimental_current.txt
+++ b/fragment/fragment/api/public_plus_experimental_current.txt
@@ -39,13 +39,14 @@
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method public Object? getEnterTransition();
     method public Object? getExitTransition();
-    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
     method public final Object? getHost();
     method public final int getId();
     method public final android.view.LayoutInflater getLayoutInflater();
     method public androidx.lifecycle.Lifecycle getLifecycle();
     method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
     method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
     method public Object? getReenterTransition();
     method public final android.content.res.Resources getResources();
     method public final boolean getRetainInstance();
@@ -118,7 +119,7 @@
     method public final androidx.fragment.app.FragmentActivity requireActivity();
     method public final android.os.Bundle requireArguments();
     method public final android.content.Context requireContext();
-    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
     method public final Object requireHost();
     method public final androidx.fragment.app.Fragment requireParentFragment();
     method public final android.view.View requireView();
diff --git a/fragment/fragment/api/restricted_1.2.0-alpha04.txt b/fragment/fragment/api/restricted_1.2.0-alpha04.txt
index 6881779..40d046a 100644
--- a/fragment/fragment/api/restricted_1.2.0-alpha04.txt
+++ b/fragment/fragment/api/restricted_1.2.0-alpha04.txt
@@ -40,7 +40,7 @@
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method public Object? getEnterTransition();
     method public Object? getExitTransition();
-    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
     method public final Object? getHost();
     method public final int getId();
     method public final android.view.LayoutInflater getLayoutInflater();
@@ -48,6 +48,7 @@
     method public androidx.lifecycle.Lifecycle getLifecycle();
     method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
     method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
     method public Object? getReenterTransition();
     method public final android.content.res.Resources getResources();
     method public final boolean getRetainInstance();
@@ -122,7 +123,7 @@
     method public final androidx.fragment.app.FragmentActivity requireActivity();
     method public final android.os.Bundle requireArguments();
     method public final android.content.Context requireContext();
-    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
     method public final Object requireHost();
     method public final androidx.fragment.app.Fragment requireParentFragment();
     method public final android.view.View requireView();
diff --git a/fragment/fragment/api/restricted_current.txt b/fragment/fragment/api/restricted_current.txt
index 6881779..40d046a 100644
--- a/fragment/fragment/api/restricted_current.txt
+++ b/fragment/fragment/api/restricted_current.txt
@@ -40,7 +40,7 @@
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method public Object? getEnterTransition();
     method public Object? getExitTransition();
-    method public final androidx.fragment.app.FragmentManager? getFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager? getFragmentManager();
     method public final Object? getHost();
     method public final int getId();
     method public final android.view.LayoutInflater getLayoutInflater();
@@ -48,6 +48,7 @@
     method public androidx.lifecycle.Lifecycle getLifecycle();
     method @Deprecated public androidx.loader.app.LoaderManager getLoaderManager();
     method public final androidx.fragment.app.Fragment? getParentFragment();
+    method public final androidx.fragment.app.FragmentManager getParentFragmentManager();
     method public Object? getReenterTransition();
     method public final android.content.res.Resources getResources();
     method public final boolean getRetainInstance();
@@ -122,7 +123,7 @@
     method public final androidx.fragment.app.FragmentActivity requireActivity();
     method public final android.os.Bundle requireArguments();
     method public final android.content.Context requireContext();
-    method public final androidx.fragment.app.FragmentManager requireFragmentManager();
+    method @Deprecated public final androidx.fragment.app.FragmentManager requireFragmentManager();
     method public final Object requireHost();
     method public final androidx.fragment.app.Fragment requireParentFragment();
     method public final android.view.View requireView();
diff --git a/fragment/fragment/build.gradle b/fragment/fragment/build.gradle
index 1637434..9c7ee08 100644
--- a/fragment/fragment/build.gradle
+++ b/fragment/fragment/build.gradle
@@ -22,7 +22,7 @@
     api("androidx.collection:collection:1.1.0")
     api("androidx.viewpager:viewpager:1.0.0")
     api("androidx.loader:loader:1.0.0")
-    api(project(":activity:activity"))
+    api("androidx.activity:activity:1.1.0-alpha03")
     api(project(":lifecycle:lifecycle-livedata-core"))
     api(project(":lifecycle:lifecycle-viewmodel"))
     api(project(":lifecycle:lifecycle-viewmodel-savedstate"))
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt
index 01ffdb4..f866173 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentLifecycleTest.kt
@@ -1106,9 +1106,9 @@
     class RemoveHelloInOnResume : Fragment() {
         override fun onResume() {
             super.onResume()
-            val fragment = fragmentManager!!.findFragmentByTag("Hello")
+            val fragment = parentFragmentManager.findFragmentByTag("Hello")
             if (fragment != null) {
-                fragmentManager!!.beginTransaction().remove(fragment).commit()
+                parentFragmentManager.beginTransaction().remove(fragment).commit()
             }
         }
     }
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.kt
index 58d62ed..07412ec1 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentTest.kt
@@ -255,6 +255,7 @@
         assertThat(childFragment.requireParentFragment()).isSameInstanceAs(parentFragment)
     }
 
+    @Suppress("DEPRECATION") // needed for requireFragmentManager()
     @SmallTest
     @Test
     fun requireMethodsThrowsWhenNotAttached() {
@@ -315,6 +316,15 @@
                 .hasMessageThat()
                 .contains("Fragment $fragment not associated with a fragment manager.")
         }
+
+        try {
+            fragment.parentFragmentManager
+            fail()
+        } catch (expected: IllegalStateException) {
+            assertThat(expected)
+                .hasMessageThat()
+                .contains("Fragment $fragment not associated with a fragment manager.")
+        }
     }
 
     @SmallTest
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt
index 9ebae46..e83425b 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/PostponedTransitionTest.kt
@@ -1123,7 +1123,7 @@
         override fun onResume() {
             super.onResume()
             // This should throw because this happens during the execution
-            fragmentManager!!.beginTransaction()
+            parentFragmentManager.beginTransaction()
                 .add(R.id.fragmentContainer, PostponedFragment1())
                 .commitNow()
         }
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/ReentrantFragmentTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/ReentrantFragmentTest.kt
index d7ce579..2fd0970 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/ReentrantFragmentTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/ReentrantFragmentTest.kt
@@ -158,7 +158,7 @@
     }
 
     private fun executeTransaction() {
-        requireFragmentManager().beginTransaction()
+        parentFragmentManager.beginTransaction()
             .add(StrictFragment(), "should throw")
             .commitNow()
     }
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java b/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
index b103c68..2632b6e 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/DialogFragment.java
@@ -239,11 +239,11 @@
         }
         mViewDestroyed = true;
         if (mBackStackId >= 0) {
-            requireFragmentManager().popBackStack(mBackStackId,
+            getParentFragmentManager().popBackStack(mBackStackId,
                     FragmentManager.POP_BACK_STACK_INCLUSIVE);
             mBackStackId = -1;
         } else {
-            FragmentTransaction ft = requireFragmentManager().beginTransaction();
+            FragmentTransaction ft = getParentFragmentManager().beginTransaction();
             ft.remove(this);
             if (allowStateLoss) {
                 ft.commitAllowingStateLoss();
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
index a2329a7..af598a4 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -726,8 +726,9 @@
         // but there's a snag: people do set target fragments before fragments get added.
         // We'll have the FragmentManager check that for validity when we move
         // the fragments to a valid state.
-        final FragmentManager mine = getFragmentManager();
-        final FragmentManager theirs = fragment != null ? fragment.getFragmentManager() : null;
+        final FragmentManager mine = mFragmentManager;
+        final FragmentManager theirs = fragment != null ? fragment.mFragmentManager :
+                null;
         if (mine != null && theirs != null && mine != theirs) {
             throw new IllegalArgumentException("Fragment " + fragment
                     + " must share the same FragmentManager to be set as a target fragment");
@@ -910,9 +911,14 @@
      * <p>If this Fragment is a child of another Fragment, the FragmentManager
      * returned here will be the parent's {@link #getChildFragmentManager()}.
      *
-     * @see #requireFragmentManager()
+     * @see #getParentFragmentManager()
+     * @deprecated This has been removed in favor of <code>getParentFragmentManager()</code> which
+     * throws an {@link IllegalStateException} if the FragmentManager is null. Check if
+     * {@link #isAdded()} returns <code>false</code> to determine if the FragmentManager is
+     * <code>null</code>.
      */
     @Nullable
+    @Deprecated
     final public FragmentManager getFragmentManager() {
         return mFragmentManager;
     }
@@ -928,11 +934,10 @@
      * returned here will be the parent's {@link #getChildFragmentManager()}.
      *
      * @throws IllegalStateException if not associated with a transaction or host.
-     * @see #getFragmentManager()
      */
     @NonNull
-    public final FragmentManager requireFragmentManager() {
-        FragmentManager fragmentManager = getFragmentManager();
+    public final FragmentManager getParentFragmentManager() {
+        FragmentManager fragmentManager = mFragmentManager;
         if (fragmentManager == null) {
             throw new IllegalStateException(
                     "Fragment " + this + " not associated with a fragment manager.");
@@ -941,6 +946,28 @@
     }
 
     /**
+     * Return the FragmentManager for interacting with fragments associated
+     * with this fragment's activity.  Note that this will available slightly
+     * before {@link #getActivity()}, during the time from when the fragment is
+     * placed in a {@link FragmentTransaction} until it is committed and
+     * attached to its activity.
+     *
+     * <p>If this Fragment is a child of another Fragment, the FragmentManager
+     * returned here will be the parent's {@link #getChildFragmentManager()}.
+     *
+     * @throws IllegalStateException if not associated with a transaction or host.
+     * @see #getParentFragmentManager()
+     * @deprecated This has been renamed to <code>getParentFragmentManager()</code> to make it
+     * clear that you are accessing the FragmentManager that contains this Fragment and not the
+     * FragmentManager associated with child Fragments.
+     */
+    @NonNull
+    @Deprecated
+    public final FragmentManager requireFragmentManager() {
+        return getParentFragmentManager();
+    }
+
+    /**
      * Return a private FragmentManager for placing and managing Fragments
      * inside of this Fragment.
      */
@@ -1860,7 +1887,7 @@
 
     /**
      * Callback for when the primary navigation state of this Fragment has changed. This can be
-     * the result of the {@link #getFragmentManager() containing FragmentManager} having its
+     * the result of the {@link #getParentFragmentManager()}  containing FragmentManager} having its
      * primary navigation fragment changed via
      * {@link androidx.fragment.app.FragmentTransaction#setPrimaryNavigationFragment} or due to
      * the primary navigation fragment changing in a parent FragmentManager.
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java
index 0699cc2..ff382af 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLifecycleCallbacksDispatcher.java
@@ -91,7 +91,7 @@
             boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentPreAttached(f, context, true);
         }
@@ -106,7 +106,7 @@
             boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentAttached(f, context, true);
         }
@@ -121,7 +121,7 @@
             @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentPreCreated(f, savedInstanceState, true);
         }
@@ -137,7 +137,7 @@
             @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentCreated(f, savedInstanceState, true);
         }
@@ -153,7 +153,7 @@
             @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentActivityCreated(f, savedInstanceState, true);
         }
@@ -169,7 +169,7 @@
             @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentViewCreated(f, v, savedInstanceState, true);
         }
@@ -184,7 +184,7 @@
     void dispatchOnFragmentStarted(@NonNull Fragment f, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentStarted(f, true);
         }
@@ -198,7 +198,7 @@
     void dispatchOnFragmentResumed(@NonNull Fragment f, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentResumed(f, true);
         }
@@ -212,7 +212,7 @@
     void dispatchOnFragmentPaused(@NonNull Fragment f, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentPaused(f, true);
         }
@@ -226,7 +226,7 @@
     void dispatchOnFragmentStopped(@NonNull Fragment f, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentStopped(f, true);
         }
@@ -241,7 +241,7 @@
             boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentSaveInstanceState(f, outState, true);
         }
@@ -256,7 +256,7 @@
     void dispatchOnFragmentViewDestroyed(@NonNull Fragment f, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentViewDestroyed(f, true);
         }
@@ -270,7 +270,7 @@
     void dispatchOnFragmentDestroyed(@NonNull Fragment f, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentDestroyed(f, true);
         }
@@ -284,7 +284,7 @@
     void dispatchOnFragmentDetached(@NonNull Fragment f, boolean onlyRecursive) {
         Fragment parent = mFragmentManager.getParent();
         if (parent != null) {
-            FragmentManager parentManager = parent.requireFragmentManager();
+            FragmentManager parentManager = parent.getParentFragmentManager();
             parentManager.getLifecycleCallbacksDispatcher()
                     .dispatchOnFragmentDetached(f, true);
         }
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
index abe7fc4..afbedb2 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManager.java
@@ -2600,6 +2600,10 @@
     }
 
     private ViewGroup getFragmentContainer(Fragment f) {
+        // If the fragment has no containerId we should return null immediately.
+        if (f.mContainerId <= 0) {
+            return null;
+        }
         // This will be false if a child fragment is added to its parent's childFragmentManager
         // before a view is created for Parent. In all other cases (adding a fragment to an
         // FragmentActivity's fragmentManager, adding a child fragment to a parent that has a view),
@@ -3226,7 +3230,7 @@
     @SuppressWarnings("ReferenceEquality")
     void setPrimaryNavigationFragment(Fragment f) {
         if (f != null && (findActiveFragment(f.mWho) != f
-                || (f.mHost != null && f.getFragmentManager() != this))) {
+                || (f.mHost != null && f.mFragmentManager != this))) {
             throw new IllegalArgumentException("Fragment " + f
                     + " is not an active fragment of FragmentManager " + this);
         }
@@ -3267,7 +3271,7 @@
 
     void setMaxLifecycle(Fragment f, Lifecycle.State state) {
         if ((findActiveFragment(f.mWho) != f
-                || (f.mHost != null && f.getFragmentManager() != this))) {
+                || (f.mHost != null && f.mFragmentManager != this))) {
             throw new IllegalArgumentException("Fragment " + f
                     + " is not an active fragment of FragmentManager " + this);
         }
diff --git a/inspection/inspection/src/main/java/androidx/inspection/Inspector.java b/inspection/inspection/src/main/java/androidx/inspection/Inspector.java
index 2820959..471765a 100644
--- a/inspection/inspection/src/main/java/androidx/inspection/Inspector.java
+++ b/inspection/inspection/src/main/java/androidx/inspection/Inspector.java
@@ -24,10 +24,14 @@
  */
 public abstract class Inspector {
 
+    @NonNull
+    private Connection mConnection;
+
     /**
      * @param connection a connection object that allows to send events to studio
      */
     public Inspector(@NonNull Connection connection) {
+        mConnection = connection;
     }
 
     /**
@@ -49,6 +53,11 @@
      */
     public abstract void onReceiveCommand(@NonNull byte[] data, @NonNull CommandCallback callback);
 
+    @NonNull
+    protected final Connection getConnection() {
+        return mConnection;
+    }
+
     /**
      * Callback to reply on an command from the studio
      */
diff --git a/lifecycle/integration-tests/testapp/build.gradle b/lifecycle/integration-tests/testapp/build.gradle
index f621691..d89eb00 100644
--- a/lifecycle/integration-tests/testapp/build.gradle
+++ b/lifecycle/integration-tests/testapp/build.gradle
@@ -37,7 +37,7 @@
 }
 
 dependencies {
-    implementation(project(":fragment:fragment"))
+    implementation("androidx.fragment:fragment:1.1.0")
     implementation(project(":lifecycle:lifecycle-process"))
     annotationProcessor(project(":lifecycle:lifecycle-compiler"))
 
diff --git a/lifecycle/lifecycle-extensions/build.gradle b/lifecycle/lifecycle-extensions/build.gradle
index 6c31068..3b4bd34 100644
--- a/lifecycle/lifecycle-extensions/build.gradle
+++ b/lifecycle/lifecycle-extensions/build.gradle
@@ -28,8 +28,8 @@
 
 dependencies {
     api(project(":lifecycle:lifecycle-runtime"))
-    api("androidx.arch.core:core-common:2.1.0-rc01")
-    api("androidx.arch.core:core-runtime:2.1.0-rc01")
+    api("androidx.arch.core:core-common:2.1.0")
+    api("androidx.arch.core:core-runtime:2.1.0")
     api(project(":fragment:fragment"))
     api(project(":lifecycle:lifecycle-common"))
     api(project(":lifecycle:lifecycle-livedata"))
@@ -37,7 +37,7 @@
     api(project(":lifecycle:lifecycle-service"))
     api(project(":lifecycle:lifecycle-viewmodel"))
 
-    testImplementation("androidx.arch.core:core-testing:2.1.0-rc01")
+    testImplementation("androidx.arch.core:core-testing:2.1.0")
     testImplementation(JUNIT)
     testImplementation(MOCKITO_CORE)
 
diff --git a/lifecycle/lifecycle-livedata-core-ktx/build.gradle b/lifecycle/lifecycle-livedata-core-ktx/build.gradle
index 4c15329..d9366f6 100644
--- a/lifecycle/lifecycle-livedata-core-ktx/build.gradle
+++ b/lifecycle/lifecycle-livedata-core-ktx/build.gradle
@@ -37,7 +37,7 @@
     api(project(":lifecycle:lifecycle-livedata-core"))
     api(KOTLIN_STDLIB)
     testImplementation(project(":lifecycle:lifecycle-runtime"))
-    testImplementation("androidx.arch.core:core-testing:2.1.0-rc01")
+    testImplementation("androidx.arch.core:core-testing:2.1.0")
     testImplementation(JUNIT)
     testImplementation(TRUTH)
 }
diff --git a/lifecycle/lifecycle-livedata-core/build.gradle b/lifecycle/lifecycle-livedata-core/build.gradle
index c9dd807..8b6c173 100644
--- a/lifecycle/lifecycle-livedata-core/build.gradle
+++ b/lifecycle/lifecycle-livedata-core/build.gradle
@@ -33,12 +33,12 @@
 }
 
 dependencies {
-    implementation("androidx.arch.core:core-common:2.1.0-rc01")
-    implementation("androidx.arch.core:core-runtime:2.1.0-rc01")
+    implementation("androidx.arch.core:core-common:2.1.0")
+    implementation("androidx.arch.core:core-runtime:2.1.0")
     api(project(":lifecycle:lifecycle-common"))
 
     testImplementation(project(":lifecycle:lifecycle-runtime"))
-    testImplementation("androidx.arch.core:core-testing:2.1.0-rc01")
+    testImplementation("androidx.arch.core:core-testing:2.1.0")
     testImplementation(JUNIT)
     testImplementation(MOCKITO_CORE)
 }
diff --git a/lifecycle/lifecycle-livedata-ktx/build.gradle b/lifecycle/lifecycle-livedata-ktx/build.gradle
index 6294159..88acb8f 100644
--- a/lifecycle/lifecycle-livedata-ktx/build.gradle
+++ b/lifecycle/lifecycle-livedata-ktx/build.gradle
@@ -43,7 +43,7 @@
     api(KOTLIN_STDLIB)
     api(KOTLIN_COROUTINES_CORE)
     testImplementation(project(":lifecycle:lifecycle-runtime"))
-    testImplementation("androidx.arch.core:core-testing:2.1.0-rc01")
+    testImplementation("androidx.arch.core:core-testing:2.1.0")
     testImplementation(JUNIT)
     testImplementation(TRUTH)
     testImplementation(KOTLIN_COROUTINES_TEST)
diff --git a/lifecycle/lifecycle-livedata/build.gradle b/lifecycle/lifecycle-livedata/build.gradle
index 459085c..fdd20bf 100644
--- a/lifecycle/lifecycle-livedata/build.gradle
+++ b/lifecycle/lifecycle-livedata/build.gradle
@@ -26,12 +26,12 @@
 }
 
 dependencies {
-    implementation("androidx.arch.core:core-common:2.1.0-rc01")
-    api("androidx.arch.core:core-runtime:2.1.0-rc01")
+    implementation("androidx.arch.core:core-common:2.1.0")
+    api("androidx.arch.core:core-runtime:2.1.0")
     api(project(":lifecycle:lifecycle-livedata-core"))
 
     testImplementation(project(":lifecycle:lifecycle-runtime"))
-    testImplementation("androidx.arch.core:core-testing:2.1.0-rc01")
+    testImplementation("androidx.arch.core:core-testing:2.1.0")
     testImplementation(JUNIT)
     testImplementation(MOCKITO_CORE)
 }
diff --git a/lifecycle/lifecycle-process/src/main/java/androidx/lifecycle/ProcessLifecycleOwner.java b/lifecycle/lifecycle-process/src/main/java/androidx/lifecycle/ProcessLifecycleOwner.java
index d3789c6..9a1a494 100644
--- a/lifecycle/lifecycle-process/src/main/java/androidx/lifecycle/ProcessLifecycleOwner.java
+++ b/lifecycle/lifecycle-process/src/main/java/androidx/lifecycle/ProcessLifecycleOwner.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.app.Application;
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 
@@ -159,7 +160,21 @@
         app.registerActivityLifecycleCallbacks(new EmptyActivityLifecycleCallbacks() {
             @Override
             public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
-                ReportFragment.get(activity).setProcessListener(mInitializationListener);
+                // Only use ReportFragment pre API 29 - after that, we can use the
+                // onActivityPostStarted and onActivityPostResumed callbacks directly
+                if (Build.VERSION.SDK_INT < 29) {
+                    ReportFragment.get(activity).setProcessListener(mInitializationListener);
+                }
+            }
+
+            @Override
+            public void onActivityPostStarted(@NonNull Activity activity) {
+                activityStarted();
+            }
+
+            @Override
+            public void onActivityPostResumed(@NonNull Activity activity) {
+                activityResumed();
             }
 
             @Override
diff --git a/lifecycle/lifecycle-reactivestreams-ktx/build.gradle b/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
index e6bb236..0faaa78 100644
--- a/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
+++ b/lifecycle/lifecycle-reactivestreams-ktx/build.gradle
@@ -33,7 +33,7 @@
   testImplementation(JUNIT)
   testImplementation(RX_JAVA)
   testImplementation(TRUTH)
-  testImplementation("androidx.arch.core:core-testing:2.1.0-rc01")
+  testImplementation("androidx.arch.core:core-testing:2.1.0")
 }
 
 androidx {
diff --git a/lifecycle/lifecycle-reactivestreams/build.gradle b/lifecycle/lifecycle-reactivestreams/build.gradle
index cb9abe2..2dd9dd4 100644
--- a/lifecycle/lifecycle-reactivestreams/build.gradle
+++ b/lifecycle/lifecycle-reactivestreams/build.gradle
@@ -26,7 +26,7 @@
 }
 
 dependencies {
-    api("androidx.arch.core:core-common:2.1.0-rc01")
+    api("androidx.arch.core:core-common:2.1.0")
     api(project(":lifecycle:lifecycle-common"))
     api(project(":lifecycle:lifecycle-livedata"))
     api(project(":lifecycle:lifecycle-runtime"))
@@ -37,7 +37,7 @@
 
     testImplementation(JUNIT)
     testImplementation(RX_JAVA)
-    testImplementation("androidx.arch.core:core-testing:2.1.0-rc01")
+    testImplementation("androidx.arch.core:core-testing:2.1.0")
 }
 
 androidx {
diff --git a/lifecycle/lifecycle-runtime/build.gradle b/lifecycle/lifecycle-runtime/build.gradle
index 6eb77fe..bec2351 100644
--- a/lifecycle/lifecycle-runtime/build.gradle
+++ b/lifecycle/lifecycle-runtime/build.gradle
@@ -21,7 +21,7 @@
 
 dependencies {
     api(project(":lifecycle:lifecycle-common"))
-    api("androidx.arch.core:core-common:2.1.0-rc01")
+    api("androidx.arch.core:core-common:2.1.0")
     // necessary for IJ to resolve dependencies.
     api("androidx.annotation:annotation:1.1.0")
 
diff --git a/lifecycle/lifecycle-runtime/src/main/java/androidx/lifecycle/ReportFragment.java b/lifecycle/lifecycle-runtime/src/main/java/androidx/lifecycle/ReportFragment.java
index e2a80a2..96df169 100644
--- a/lifecycle/lifecycle-runtime/src/main/java/androidx/lifecycle/ReportFragment.java
+++ b/lifecycle/lifecycle-runtime/src/main/java/androidx/lifecycle/ReportFragment.java
@@ -17,9 +17,13 @@
 package androidx.lifecycle;
 
 import android.app.Activity;
+import android.app.Application;
 import android.app.Fragment;
+import android.os.Build;
 import android.os.Bundle;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
 
 /**
@@ -34,13 +38,96 @@
             + ".LifecycleDispatcher.report_fragment_tag";
 
     public static void injectIfNeededIn(Activity activity) {
-        // ProcessLifecycleOwner should always correctly work and some activities may not extend
-        // FragmentActivity from support lib, so we use framework fragments for activities
-        android.app.FragmentManager manager = activity.getFragmentManager();
-        if (manager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
-            manager.beginTransaction().add(new ReportFragment(), REPORT_FRAGMENT_TAG).commit();
-            // Hopefully, we are the first to make a transaction.
-            manager.executePendingTransactions();
+        if (Build.VERSION.SDK_INT >= 29) {
+            // On API 29+, we can register for the correct Lifecycle callbacks directly
+            activity.registerActivityLifecycleCallbacks(
+                    new Application.ActivityLifecycleCallbacks() {
+                        @Override
+                        public void onActivityCreated(@NonNull Activity activity,
+                                @Nullable Bundle bundle) {
+                        }
+
+                        @Override
+                        public void onActivityPostCreated(@NonNull Activity activity,
+                                @Nullable Bundle savedInstanceState) {
+                            dispatch(activity, Lifecycle.Event.ON_CREATE);
+                        }
+
+                        @Override
+                        public void onActivityStarted(@NonNull Activity activity) {
+                        }
+
+                        @Override
+                        public void onActivityPostStarted(@NonNull Activity activity) {
+                            dispatch(activity, Lifecycle.Event.ON_START);
+                        }
+
+                        @Override
+                        public void onActivityResumed(@NonNull Activity activity) {
+                        }
+
+                        @Override
+                        public void onActivityPostResumed(@NonNull Activity activity) {
+                            dispatch(activity, Lifecycle.Event.ON_RESUME);
+                        }
+
+                        @Override
+                        public void onActivityPrePaused(@NonNull Activity activity) {
+                            dispatch(activity, Lifecycle.Event.ON_PAUSE);
+                        }
+
+                        @Override
+                        public void onActivityPaused(@NonNull Activity activity) {
+                        }
+
+                        @Override
+                        public void onActivityPreStopped(@NonNull Activity activity) {
+                            dispatch(activity, Lifecycle.Event.ON_STOP);
+                        }
+
+                        @Override
+                        public void onActivityStopped(@NonNull Activity activity) {
+                        }
+
+                        @Override
+                        public void onActivitySaveInstanceState(@NonNull Activity activity,
+                                @NonNull Bundle bundle) {
+                        }
+
+                        @Override
+                        public void onActivityPreDestroyed(@NonNull Activity activity) {
+                            dispatch(activity, Lifecycle.Event.ON_DESTROY);
+                        }
+
+                        @Override
+                        public void onActivityDestroyed(@NonNull Activity activity) {
+                        }
+                    });
+        } else {
+            // ProcessLifecycleOwner should always correctly work and some activities may not
+            // extend FragmentActivity from support lib, so we use framework fragments for
+            // activities prior to API 29 so as to get the correct timing of Lifecycle events
+            android.app.FragmentManager manager = activity.getFragmentManager();
+            if (manager.findFragmentByTag(REPORT_FRAGMENT_TAG) == null) {
+                manager.beginTransaction().add(new ReportFragment(), REPORT_FRAGMENT_TAG).commit();
+                // Hopefully, we are the first to make a transaction.
+                manager.executePendingTransactions();
+            }
+        }
+    }
+
+    @SuppressWarnings("deprecation")
+    static void dispatch(@NonNull Activity activity, @NonNull Lifecycle.Event event) {
+        if (activity instanceof LifecycleRegistryOwner) {
+            ((LifecycleRegistryOwner) activity).getLifecycle().handleLifecycleEvent(event);
+            return;
+        }
+
+        if (activity instanceof LifecycleOwner) {
+            Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
+            if (lifecycle instanceof LifecycleRegistry) {
+                ((LifecycleRegistry) lifecycle).handleLifecycleEvent(event);
+            }
         }
     }
 
@@ -73,58 +160,43 @@
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         dispatchCreate(mProcessListener);
-        dispatch(Lifecycle.Event.ON_CREATE);
+        dispatch(getActivity(), Lifecycle.Event.ON_CREATE);
     }
 
     @Override
     public void onStart() {
         super.onStart();
         dispatchStart(mProcessListener);
-        dispatch(Lifecycle.Event.ON_START);
+        dispatch(getActivity(), Lifecycle.Event.ON_START);
     }
 
     @Override
     public void onResume() {
         super.onResume();
         dispatchResume(mProcessListener);
-        dispatch(Lifecycle.Event.ON_RESUME);
+        dispatch(getActivity(), Lifecycle.Event.ON_RESUME);
     }
 
     @Override
     public void onPause() {
         super.onPause();
-        dispatch(Lifecycle.Event.ON_PAUSE);
+        dispatch(getActivity(), Lifecycle.Event.ON_PAUSE);
     }
 
     @Override
     public void onStop() {
         super.onStop();
-        dispatch(Lifecycle.Event.ON_STOP);
+        dispatch(getActivity(), Lifecycle.Event.ON_STOP);
     }
 
     @Override
     public void onDestroy() {
         super.onDestroy();
-        dispatch(Lifecycle.Event.ON_DESTROY);
+        dispatch(getActivity(), Lifecycle.Event.ON_DESTROY);
         // just want to be sure that we won't leak reference to an activity
         mProcessListener = null;
     }
 
-    private void dispatch(Lifecycle.Event event) {
-        Activity activity = getActivity();
-        if (activity instanceof LifecycleRegistryOwner) {
-            ((LifecycleRegistryOwner) activity).getLifecycle().handleLifecycleEvent(event);
-            return;
-        }
-
-        if (activity instanceof LifecycleOwner) {
-            Lifecycle lifecycle = ((LifecycleOwner) activity).getLifecycle();
-            if (lifecycle instanceof LifecycleRegistry) {
-                ((LifecycleRegistry) lifecycle).handleLifecycleEvent(event);
-            }
-        }
-    }
-
     void setProcessListener(ActivityInitializationListener processListener) {
         mProcessListener = processListener;
     }
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/build.gradle b/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
index ad09591..4c6a90e 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
+++ b/lifecycle/lifecycle-viewmodel-savedstate/build.gradle
@@ -34,7 +34,7 @@
 
 dependencies {
     api("androidx.annotation:annotation:1.0.0")
-    api("androidx.savedstate:savedstate:1.0.0-rc01")
+    api("androidx.savedstate:savedstate:1.0.0")
     api(project(":lifecycle:lifecycle-livedata-core"))
     api(project(":lifecycle:lifecycle-viewmodel"))
 
diff --git a/navigation/navigation-fragment-ktx/build.gradle b/navigation/navigation-fragment-ktx/build.gradle
index 2119732..372e15f 100644
--- a/navigation/navigation-fragment-ktx/build.gradle
+++ b/navigation/navigation-fragment-ktx/build.gradle
@@ -41,7 +41,7 @@
     api(project(":fragment:fragment-ktx"))
     api(project(":lifecycle:lifecycle-viewmodel-ktx"))
     api(KOTLIN_STDLIB)
-    androidTestImplementation("androidx.fragment:fragment-testing:1.1.0-rc01")
+    androidTestImplementation(project(":fragment:fragment-testing"))
     androidTestImplementation(project(":navigation:navigation-testing"))
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
     androidTestImplementation(ANDROIDX_TEST_CORE)
diff --git a/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
index 87d4ff6..a7785cf 100644
--- a/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
+++ b/navigation/navigation-fragment/src/main/java/androidx/navigation/fragment/NavHostFragment.java
@@ -104,7 +104,7 @@
             if (findFragment instanceof NavHostFragment) {
                 return ((NavHostFragment) findFragment).getNavController();
             }
-            Fragment primaryNavFragment = findFragment.requireFragmentManager()
+            Fragment primaryNavFragment = findFragment.getParentFragmentManager()
                     .getPrimaryNavigationFragment();
             if (primaryNavFragment instanceof NavHostFragment) {
                 return ((NavHostFragment) primaryNavFragment).getNavController();
@@ -193,7 +193,7 @@
         // but it can stay here until we can add the necessary attr resources to
         // the fragment lib.
         if (mDefaultNavHost) {
-            requireFragmentManager().beginTransaction()
+            getParentFragmentManager().beginTransaction()
                     .setPrimaryNavigationFragment(this)
                     .commit();
         }
@@ -221,7 +221,7 @@
             navState = savedInstanceState.getBundle(KEY_NAV_CONTROLLER_STATE);
             if (savedInstanceState.getBoolean(KEY_DEFAULT_NAV_HOST, false)) {
                 mDefaultNavHost = true;
-                requireFragmentManager().beginTransaction()
+                getParentFragmentManager().beginTransaction()
                         .setPrimaryNavigationFragment(this)
                         .commit();
             }
diff --git a/navigation/navigation-runtime-ktx/build.gradle b/navigation/navigation-runtime-ktx/build.gradle
index e5535ec..645f029 100644
--- a/navigation/navigation-runtime-ktx/build.gradle
+++ b/navigation/navigation-runtime-ktx/build.gradle
@@ -38,7 +38,7 @@
     api(project(":navigation:navigation-runtime"))
     // Ensure that the -ktx dependency graph mirrors the Java dependency graph
     api(project(":navigation:navigation-common-ktx"))
-    api(project(":activity:activity-ktx")) {
+    api("androidx.activity:activity-ktx:1.1.0-alpha03") {
         because 'Mirror navigation-runtime dependency graph for -ktx artifacts'
     }
     api(project(":lifecycle:lifecycle-viewmodel-ktx")) {
diff --git a/navigation/navigation-runtime/build.gradle b/navigation/navigation-runtime/build.gradle
index 2624b7c..81c9ab9 100644
--- a/navigation/navigation-runtime/build.gradle
+++ b/navigation/navigation-runtime/build.gradle
@@ -28,9 +28,9 @@
 
 dependencies {
     api(project(":navigation:navigation-common"))
-    api(project(":activity:activity"))
+    api("androidx.activity:activity:1.1.0-alpha03")
     api(project(":lifecycle:lifecycle-viewmodel"))
-    api("androidx.savedstate:savedstate:1.0.0-rc01")
+    api("androidx.savedstate:savedstate:1.0.0")
     api(project(":lifecycle:lifecycle-viewmodel-savedstate"))
 
     androidTestImplementation(project(":navigation:navigation-testing"))
diff --git a/preference/preference/build.gradle b/preference/preference/build.gradle
index 8235c7a..ab567f6 100644
--- a/preference/preference/build.gradle
+++ b/preference/preference/build.gradle
@@ -28,11 +28,11 @@
 dependencies {
     // TODO: change to alpha02 after release
     implementation("androidx.annotation:annotation:1.1.0")
-    api("androidx.appcompat:appcompat:1.1.0-rc01")
+    api("androidx.appcompat:appcompat:1.1.0")
     // TODO: change to alpha05 after release
     api("androidx.core:core:1.1.0")
     implementation("androidx.collection:collection:1.0.0")
-    api("androidx.fragment:fragment:1.1.0-rc01")
+    api("androidx.fragment:fragment:1.1.0")
     api("androidx.recyclerview:recyclerview:1.0.0")
 
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
diff --git a/settings.gradle b/settings.gradle
index 0ee2987..9977c46 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -97,7 +97,8 @@
 includeProject(":collection:collection", "collection/collection")
 includeProject(":collection:collection-ktx", "collection/collection-ktx")
 includeProject(":concurrent:concurrent-futures", "concurrent/futures")
-includeProject(":contentpager", "content")
+includeProject(":contentaccess", "contentaccess")
+includeProject(":contentpager", "contentpager")
 includeProject(":coordinatorlayout", "coordinatorlayout")
 includeProject(":core:core", "core/core")
 includeProject(":core:core-ktx", "core/core-ktx")
diff --git a/testutils/testutils-runtime/build.gradle b/testutils/testutils-runtime/build.gradle
index 067b657..6ffcef1 100644
--- a/testutils/testutils-runtime/build.gradle
+++ b/testutils/testutils-runtime/build.gradle
@@ -23,7 +23,7 @@
 }
 
 dependencies {
-    api("androidx.fragment:fragment:1.1.0-rc01")
+    api("androidx.fragment:fragment:1.1.0")
 
     implementation(ANDROIDX_TEST_EXT_JUNIT)
     implementation(ANDROIDX_TEST_CORE)
diff --git a/textclassifier/build.gradle b/textclassifier/build.gradle
index 92508eb..b552056 100644
--- a/textclassifier/build.gradle
+++ b/textclassifier/build.gradle
@@ -9,10 +9,9 @@
 }
 
 dependencies {
-    api("androidx.appcompat:appcompat:1.1.0-rc01")
+    api("androidx.appcompat:appcompat:1.1.0")
     api("androidx.annotation:annotation:1.1.0")
     implementation("androidx.collection:collection:1.0.0")
-    // TODO: change to 1.1.0-alpha04 after release
     api("androidx.core:core:1.1.0")
 
     androidTestImplementation(ANDROIDX_TEST_EXT_JUNIT)
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/OnPositionedBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/OnPositionedBenchmark.kt
new file mode 100644
index 0000000..d98156d
--- /dev/null
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/OnPositionedBenchmark.kt
@@ -0,0 +1,91 @@
+/*
+ * 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.core
+
+import android.app.Activity
+import androidx.benchmark.junit4.BenchmarkRule
+import androidx.compose.Composable
+import androidx.compose.FrameManager
+import androidx.compose.State
+import androidx.compose.composer
+import androidx.compose.state
+import androidx.compose.unaryPlus
+import androidx.test.filters.LargeTest
+import androidx.test.rule.ActivityTestRule
+import androidx.ui.benchmark.toggleStateMeasureLayout
+import androidx.ui.layout.Center
+import androidx.ui.layout.Container
+import androidx.ui.test.ComposeTestCase
+import androidx.ui.test.ToggleableTestCase
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@LargeTest
+@RunWith(JUnit4::class)
+class OnPositionedBenchmark {
+
+    @get:Rule
+    val benchmarkRule = BenchmarkRule()
+
+    @get:Rule
+    val activityRule = ActivityTestRule(Activity::class.java)
+
+    private val activity: Activity get() = activityRule.activity
+
+    @Test
+    fun deepHierarchyOnPositioned_layout() {
+        benchmarkRule.toggleStateMeasureLayout(
+            activity,
+            DeepHierarchyOnPositionedTestCase(activity)
+        )
+    }
+}
+
+private class DeepHierarchyOnPositionedTestCase(
+    activity: Activity
+) : ComposeTestCase(activity), ToggleableTestCase {
+
+    private lateinit var state: State<Dp>
+
+    override fun setComposeContent(activity: Activity) = activity.setContent {
+        val size = +state { 200.dp }
+        this.state = size
+        Center {
+            Container(width = size.value, height = size.value) {
+                StaticChildren(100)
+            }
+        }
+    }!!
+
+    @Composable
+    private fun StaticChildren(count: Int) {
+        if (count > 0) {
+            Container(width = 100.dp, height = 100.dp) {
+                StaticChildren(count - 1)
+            }
+        } else {
+            OnPositioned { coordinates -> coordinates.position }
+        }
+    }
+
+    override fun toggleState() {
+        state.value = if (state.value == 200.dp) 150.dp else 200.dp
+        FrameManager.nextFrame()
+    }
+}
diff --git a/ui/integration-tests/test/src/main/java/androidx/ui/test/TextBenchmarkHelper.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/TextBenchmarkHelper.kt
index df4691b..e406626 100644
--- a/ui/integration-tests/test/src/main/java/androidx/ui/test/TextBenchmarkHelper.kt
+++ b/ui/integration-tests/test/src/main/java/androidx/ui/test/TextBenchmarkHelper.kt
@@ -20,7 +20,7 @@
 import androidx.ui.core.sp
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Shadow
+import androidx.ui.graphics.Shadow
 import androidx.ui.text.AnnotatedString
 import androidx.ui.text.LocaleList
 import androidx.ui.text.TextStyle
diff --git a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
index 65ac2d2..48fdd1d 100644
--- a/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
+++ b/ui/integration-tests/test/src/main/java/androidx/ui/test/cases/ScrollerTestCase.kt
@@ -34,8 +34,8 @@
 import androidx.ui.layout.CrossAxisAlignment
 import androidx.ui.foundation.ScrollerPosition
 import androidx.ui.foundation.VerticalScroller
-import androidx.ui.painting.Paint
-import androidx.ui.painting.PaintingStyle
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.PaintingStyle
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.test.ToggleableTestCase
 
diff --git a/ui/ui-android-text/api/0.1.0-dev01.txt b/ui/ui-android-text/api/0.1.0-dev01.txt
index 89e8968..4608a1f 100644
--- a/ui/ui-android-text/api/0.1.0-dev01.txt
+++ b/ui/ui-android-text/api/0.1.0-dev01.txt
@@ -1,6 +1,10 @@
 // Signature format: 3.0
 package androidx.text {
 
+  public final class LayoutIntrinsicsKt {
+    ctor public LayoutIntrinsicsKt();
+  }
+
   public final class TextLayoutKt {
     ctor public TextLayoutKt();
   }
diff --git a/ui/ui-android-text/api/current.txt b/ui/ui-android-text/api/current.txt
index 89e8968..4608a1f 100644
--- a/ui/ui-android-text/api/current.txt
+++ b/ui/ui-android-text/api/current.txt
@@ -1,6 +1,10 @@
 // Signature format: 3.0
 package androidx.text {
 
+  public final class LayoutIntrinsicsKt {
+    ctor public LayoutIntrinsicsKt();
+  }
+
   public final class TextLayoutKt {
     ctor public TextLayoutKt();
   }
diff --git a/ui/ui-android-text/api/public_plus_experimental_0.1.0-dev01.txt b/ui/ui-android-text/api/public_plus_experimental_0.1.0-dev01.txt
index 89e8968..4608a1f 100644
--- a/ui/ui-android-text/api/public_plus_experimental_0.1.0-dev01.txt
+++ b/ui/ui-android-text/api/public_plus_experimental_0.1.0-dev01.txt
@@ -1,6 +1,10 @@
 // Signature format: 3.0
 package androidx.text {
 
+  public final class LayoutIntrinsicsKt {
+    ctor public LayoutIntrinsicsKt();
+  }
+
   public final class TextLayoutKt {
     ctor public TextLayoutKt();
   }
diff --git a/ui/ui-android-text/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-android-text/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..89e8968
--- /dev/null
+++ b/ui/ui-android-text/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.text {
+
+  public final class TextLayoutKt {
+    ctor public TextLayoutKt();
+  }
+
+}
+
diff --git a/ui/ui-android-text/api/public_plus_experimental_current.txt b/ui/ui-android-text/api/public_plus_experimental_current.txt
index 89e8968..4608a1f 100644
--- a/ui/ui-android-text/api/public_plus_experimental_current.txt
+++ b/ui/ui-android-text/api/public_plus_experimental_current.txt
@@ -1,6 +1,10 @@
 // Signature format: 3.0
 package androidx.text {
 
+  public final class LayoutIntrinsicsKt {
+    ctor public LayoutIntrinsicsKt();
+  }
+
   public final class TextLayoutKt {
     ctor public TextLayoutKt();
   }
diff --git a/ui/ui-android-text/api/restricted_0.1.0-dev01.txt b/ui/ui-android-text/api/restricted_0.1.0-dev01.txt
index 7498841..93b4d36 100644
--- a/ui/ui-android-text/api/restricted_0.1.0-dev01.txt
+++ b/ui/ui-android-text/api/restricted_0.1.0-dev01.txt
@@ -52,6 +52,10 @@
   }
 
 
+  public final class LayoutIntrinsicsKt {
+    ctor public LayoutIntrinsicsKt();
+  }
+
 
 
 
diff --git a/ui/ui-android-text/api/restricted_current.txt b/ui/ui-android-text/api/restricted_current.txt
index 7498841..93b4d36 100644
--- a/ui/ui-android-text/api/restricted_current.txt
+++ b/ui/ui-android-text/api/restricted_current.txt
@@ -52,6 +52,10 @@
   }
 
 
+  public final class LayoutIntrinsicsKt {
+    ctor public LayoutIntrinsicsKt();
+  }
+
 
 
 
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 5522e78..48f35dd 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
@@ -20,6 +20,8 @@
 import android.text.Layout
 import android.text.TextPaint
 import androidx.annotation.RestrictTo
+import java.text.BreakIterator
+import java.util.PriorityQueue
 
 /**
  * Computes and caches the text layout intrinsic values such as min/max width.
@@ -36,7 +38,7 @@
      * Compute Android platform BoringLayout metrics. A null value means the provided CharSequence
      * cannot be laid out using a BoringLayout.
      */
-    internal val boringMetrics: BoringLayout.Metrics? by lazy {
+    val boringMetrics: BoringLayout.Metrics? by lazy {
         val frameworkTextDir = getTextDirectionHeuristic(textDirectionHeuristic)
         BoringLayoutCompat.isBoring(charSequence, textPaint, frameworkTextDir)
     }
@@ -61,4 +63,48 @@
         boringMetrics?.width?.toFloat()
             ?: Layout.getDesiredWidth(charSequence, 0, charSequence.length, textPaint)
     }
-}
\ No newline at end of file
+}
+
+/**
+ * Returns the word with the longest length. To calculate it in a performant way, it applies a heuristics where
+ *  - it first finds a set of words with the longest length
+ *  - finds the word with maximum width in that set
+ *
+ *  @hide
+ */
+fun minIntrinsicWidth(text: CharSequence, paint: TextPaint): Float {
+    val iterator = BreakIterator.getLineInstance(paint.textLocale)
+    iterator.text = CharSequenceCharacterIterator(text, 0, text.length)
+
+    // 10 is just a random number that limits the size of the candidate list
+    val heapSize = 10
+    // min heap that will hold [heapSize] many words with max length
+    val longestWordCandidates = PriorityQueue<Pair<Int, Int>>(
+        heapSize,
+        Comparator<Pair<Int, Int>> { left, right ->
+            (left.second - left.first) - (right.second - right.first)
+        }
+    )
+
+    var start = 0
+    var end = iterator.next()
+    while (end != BreakIterator.DONE) {
+        if (longestWordCandidates.size < heapSize) {
+            longestWordCandidates.add(Pair(start, end))
+        } else {
+            longestWordCandidates.peek()?.let { minPair ->
+                if ((minPair.second - minPair.first) < (end - start)) {
+                    longestWordCandidates.poll()
+                    longestWordCandidates.add(Pair(start, end))
+                }
+            }
+        }
+
+        start = end
+        end = iterator.next()
+    }
+
+    return longestWordCandidates.map { pair ->
+        Layout.getDesiredWidth(text, pair.first, pair.second, paint)
+    }.max() ?: 0f
+}
diff --git a/ui/ui-android-text/src/main/java/androidx/text/TextLayout.kt b/ui/ui-android-text/src/main/java/androidx/text/TextLayout.kt
index be629f2..472ef00 100644
--- a/ui/ui-android-text/src/main/java/androidx/text/TextLayout.kt
+++ b/ui/ui-android-text/src/main/java/androidx/text/TextLayout.kt
@@ -53,8 +53,6 @@
 import androidx.text.LayoutCompat.TextDirection
 import androidx.text.LayoutCompat.TextLayoutAlignment
 import androidx.text.style.BaselineShiftSpan
-import java.text.BreakIterator
-import java.util.PriorityQueue
 import kotlin.math.ceil
 
 /**
@@ -113,6 +111,9 @@
     val maxIntrinsicWidth: Float
         get() = layoutIntrinsics.maxIntrinsicWidth
 
+    val minIntrinsicWidth: Float
+        get() = layoutIntrinsics.minIntrinsicWidth
+
     val didExceedMaxLines: Boolean
 
     /**
@@ -239,50 +240,6 @@
     }
 }
 
-/**
- * Returns the word with the longest length. To calculate it in a performant way, it applies a heuristics where
- *  - it first finds a set of words with the longest length
- *  - finds the word with maximum width in that set
- *
- *  @hide
- */
-fun minIntrinsicWidth(text: CharSequence, paint: TextPaint): Float {
-    val iterator = BreakIterator.getLineInstance(paint.textLocale)
-    iterator.text = CharSequenceCharacterIterator(text, 0, text.length)
-
-    // 10 is just a random number that limits the size of the candidate list
-    val heapSize = 10
-    // min heap that will hold [heapSize] many words with max length
-    val longestWordCandidates = PriorityQueue<Pair<Int, Int>>(
-        heapSize,
-        Comparator<Pair<Int, Int>> { left, right ->
-            (left.second - left.first) - (right.second - right.first)
-        }
-    )
-
-    var start = 0
-    var end = iterator.next()
-    while (end != BreakIterator.DONE) {
-        if (longestWordCandidates.size < heapSize) {
-            longestWordCandidates.add(Pair(start, end))
-        } else {
-            longestWordCandidates.peek()?.let { minPair ->
-                if ((minPair.second - minPair.first) < (end - start)) {
-                    longestWordCandidates.poll()
-                    longestWordCandidates.add(Pair(start, end))
-                }
-            }
-        }
-
-        start = end
-        end = iterator.next()
-    }
-
-    return longestWordCandidates.map { pair ->
-        Layout.getDesiredWidth(text, pair.first, pair.second, paint)
-    }.max() ?: 0f
-}
-
 @RequiresApi(api = 18)
 internal fun getTextDirectionHeuristic(@TextDirection textDirectionHeuristic: Int):
         TextDirectionHeuristic {
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt
index ee0d6ba..b4dfff8 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt
@@ -39,7 +39,7 @@
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
 import androidx.ui.layout.Padding
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.ui.text.TextStyle
 
 class AnimatableSeekBar : Activity() {
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt
index 4e9e4cd..e3f5539 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt
@@ -43,8 +43,8 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Column
 import androidx.ui.layout.Padding
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
 import androidx.ui.text.TextStyle
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt
index 887043da..08f055d 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt
@@ -30,7 +30,7 @@
 import androidx.ui.core.toRect
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.Recompose
 import androidx.compose.composer
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt
index a3e6399..432cca9 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.gesture.PressGestureDetector
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.composer
 import androidx.compose.state
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt
index ddee034..e29d21d 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt
@@ -32,7 +32,7 @@
 import androidx.ui.layout.Container
 import androidx.ui.layout.MainAxisAlignment
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.ui.text.TextStyle
 import androidx.compose.Composable
 import androidx.compose.composer
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
index 44630fb..8b668d8 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
@@ -43,8 +43,8 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Column
 import androidx.ui.layout.Padding
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
 import androidx.ui.text.TextStyle
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt
index 8255346..c7b3eb5 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt
@@ -30,7 +30,7 @@
 import androidx.ui.core.gesture.PressGestureDetector
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.composer
 import androidx.compose.memo
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt
index b904831..873687d 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt
@@ -45,7 +45,7 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Column
 import androidx.ui.layout.Padding
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.ui.text.TextStyle
 import kotlin.math.sign
 
diff --git a/ui/ui-core/api/0.1.0-dev01.txt b/ui/ui-core/api/0.1.0-dev01.txt
index 1df842d..a363165 100644
--- a/ui/ui-core/api/0.1.0-dev01.txt
+++ b/ui/ui-core/api/0.1.0-dev01.txt
@@ -275,6 +275,9 @@
     method public static inline operator androidx.ui.core.Dp times(float, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(double, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(int, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Size times(int, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(float, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(double, androidx.ui.core.Size size);
     method public static androidx.ui.core.Bounds toBounds(androidx.ui.core.Size);
     method public static inline androidx.ui.core.Size toSize(androidx.ui.core.Bounds);
   }
@@ -374,6 +377,7 @@
     method public int getValue();
     method public operator androidx.ui.core.IntPx minus(androidx.ui.core.IntPx other);
     method public operator androidx.ui.core.IntPx plus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.IntPx rem(int other);
     method public operator androidx.ui.core.IntPx times(float other);
     method public operator androidx.ui.core.IntPx times(double other);
     method public operator androidx.ui.core.IntPx times(int other);
@@ -421,6 +425,7 @@
     method public static operator androidx.ui.core.IntPx times(float, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(double, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(int, androidx.ui.core.IntPx other);
+    method public static inline operator androidx.ui.core.IntPxSize times(int, androidx.ui.core.IntPxSize size);
     method public static inline androidx.ui.core.Px toPx(androidx.ui.core.IntPx);
     method public static inline androidx.ui.core.PxPosition toPxPosition(androidx.ui.core.IntPxPosition);
     method public static inline androidx.ui.core.PxSize toPxSize(androidx.ui.core.IntPxSize);
@@ -443,8 +448,10 @@
     method public androidx.ui.core.IntPx component1();
     method public androidx.ui.core.IntPx component2();
     method public androidx.ui.core.IntPxSize copy(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public inline operator androidx.ui.core.IntPxSize div(int other);
     method public androidx.ui.core.IntPx getHeight();
     method public androidx.ui.core.IntPx getWidth();
+    method public inline operator androidx.ui.core.IntPxSize times(int other);
   }
 
   public interface IntrinsicMeasurable {
@@ -464,10 +471,17 @@
     method public androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.PxPosition global);
     method public androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.PxPosition local);
     method public androidx.ui.core.PxPosition localToRoot(androidx.ui.core.PxPosition local);
+    property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract androidx.ui.core.PxPosition position;
     property public abstract androidx.ui.core.PxSize size;
   }
 
+  public final class LayoutCoordinatesKt {
+    ctor public LayoutCoordinatesKt();
+    method public static inline androidx.ui.core.PxPosition getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.ui.core.PxPosition getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+  }
+
   public enum LayoutDirection {
     enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
     enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
@@ -666,6 +680,9 @@
     method public static inline operator androidx.ui.core.Px times(float, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(double, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(int, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.PxSize times(int, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(float, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(double, androidx.ui.core.PxSize size);
     method public static androidx.ui.core.PxBounds toBounds(androidx.ui.core.PxSize);
     method public static inline androidx.ui.engine.geometry.Offset toOffset(androidx.ui.core.PxPosition);
     method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxBounds);
@@ -698,8 +715,14 @@
     method public androidx.ui.core.Px component1();
     method public androidx.ui.core.Px component2();
     method public androidx.ui.core.PxSize copy(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public inline operator androidx.ui.core.PxSize div(int other);
+    method public inline operator androidx.ui.core.PxSize div(float other);
+    method public inline operator androidx.ui.core.PxSize div(double other);
     method public androidx.ui.core.Px getHeight();
     method public androidx.ui.core.Px getWidth();
+    method public inline operator androidx.ui.core.PxSize times(int other);
+    method public inline operator androidx.ui.core.PxSize times(float other);
+    method public inline operator androidx.ui.core.PxSize times(double other);
     field public static final androidx.ui.core.PxSize.Companion! Companion;
   }
 
@@ -738,8 +761,14 @@
     method public androidx.ui.core.Dp component1();
     method public androidx.ui.core.Dp component2();
     method public androidx.ui.core.Size copy(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public inline operator androidx.ui.core.Size div(int other);
+    method public inline operator androidx.ui.core.Size div(float other);
+    method public inline operator androidx.ui.core.Size div(double other);
     method public androidx.ui.core.Dp getHeight();
     method public androidx.ui.core.Dp getWidth();
+    method public inline operator androidx.ui.core.Size times(int other);
+    method public inline operator androidx.ui.core.Size times(float other);
+    method public inline operator androidx.ui.core.Size times(double other);
   }
 
   public final class Sp {
@@ -880,10 +909,10 @@
   }
 
   public static final class Outline.Generic extends androidx.ui.engine.geometry.Outline {
-    ctor public Outline.Generic(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path component1();
-    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path getPath();
+    ctor public Outline.Generic(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path component1();
+    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path getPath();
   }
 
   public static final class Outline.Rectangle extends androidx.ui.engine.geometry.Outline {
@@ -902,8 +931,8 @@
 
   public final class OutlineKt {
     ctor public OutlineKt();
-    method public static void addOutline(androidx.ui.painting.Path, androidx.ui.engine.geometry.Outline outline);
-    method public static void drawOutline(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.painting.Paint paint);
+    method public static void addOutline(androidx.ui.graphics.Path, androidx.ui.engine.geometry.Outline outline);
+    method public static void drawOutline(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.graphics.Paint paint);
   }
 
   public final class RRect {
@@ -1124,22 +1153,117 @@
 
 package androidx.ui.graphics {
 
+  public final class AndroidCanvasKt {
+    ctor public AndroidCanvasKt();
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.Image image);
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
+    method public static androidx.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+  }
+
+  public final class AndroidImageKt {
+    ctor public AndroidImageKt();
+    method public static androidx.ui.graphics.Image Image(int width, int height, androidx.ui.graphics.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Image imageFromResource(android.content.res.Resources res, int resId);
+  }
+
+  public enum BlendMode {
+    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
+    enum_constant public static final androidx.ui.graphics.BlendMode clear;
+    enum_constant public static final androidx.ui.graphics.BlendMode color;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorBurn;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorDodge;
+    enum_constant public static final androidx.ui.graphics.BlendMode darken;
+    enum_constant public static final androidx.ui.graphics.BlendMode difference;
+    enum_constant public static final androidx.ui.graphics.BlendMode dst;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode exclusion;
+    enum_constant public static final androidx.ui.graphics.BlendMode hardLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode hue;
+    enum_constant public static final androidx.ui.graphics.BlendMode lighten;
+    enum_constant public static final androidx.ui.graphics.BlendMode luminosity;
+    enum_constant public static final androidx.ui.graphics.BlendMode modulate;
+    enum_constant public static final androidx.ui.graphics.BlendMode multiply;
+    enum_constant public static final androidx.ui.graphics.BlendMode overlay;
+    enum_constant public static final androidx.ui.graphics.BlendMode plus;
+    enum_constant public static final androidx.ui.graphics.BlendMode saturation;
+    enum_constant public static final androidx.ui.graphics.BlendMode screen;
+    enum_constant public static final androidx.ui.graphics.BlendMode softLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode src;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode xor;
+  }
+
+  public enum BlurStyle {
+    enum_constant public static final androidx.ui.graphics.BlurStyle inner;
+    enum_constant public static final androidx.ui.graphics.BlurStyle normal;
+    enum_constant public static final androidx.ui.graphics.BlurStyle outer;
+    enum_constant public static final androidx.ui.graphics.BlurStyle solid;
+  }
+
   public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
+    method public void applyTo(androidx.ui.graphics.Paint p);
   }
 
   public final class BrushKt {
     ctor public BrushKt();
-    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush getEmptyBrush();
-    method public static androidx.ui.graphics.Brush obtainBrush(Object? brush);
+    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public interface Canvas {
+    method public void clipPath(androidx.ui.graphics.Path path);
+    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = ClipOp.intersect);
+    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
+    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawDoubleRoundRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
+    method public void drawPicture(androidx.ui.graphics.Picture picture);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.graphics.Paint paint);
+    method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
+    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
+    method public android.graphics.Canvas getNativeCanvas();
+    method public void restore();
+    method public void rotate(float degrees);
+    method public default void rotateRad(float radians);
+    method public void save();
+    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void scale(float sx, float sy = sx);
+    method public void skew(float sx, float sy);
+    method public default void skewRad(float sxRad, float syRad);
+    method public void translate(float dx, float dy);
+    property public abstract android.graphics.Canvas nativeCanvas;
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum ClipOp {
+    enum_constant public static final androidx.ui.graphics.ClipOp difference;
+    enum_constant public static final androidx.ui.graphics.ClipOp intersect;
   }
 
   public final class Color {
@@ -1186,6 +1310,15 @@
     property public final androidx.ui.graphics.Color Yellow;
   }
 
+  public final class ColorFilter {
+    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.BlendMode component2();
+    method public androidx.ui.graphics.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+  }
+
   public final class ColorKt {
     ctor public ColorKt();
     method public static androidx.ui.graphics.Color Color(float red, float green, float blue, float alpha = 1f, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
@@ -1197,20 +1330,271 @@
     method @ColorInt public static int toArgb(androidx.ui.graphics.Color);
   }
 
-  public final class LinearGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode);
+  public enum FilterQuality {
+    enum_constant public static final androidx.ui.graphics.FilterQuality high;
+    enum_constant public static final androidx.ui.graphics.FilterQuality low;
+    enum_constant public static final androidx.ui.graphics.FilterQuality medium;
+    enum_constant public static final androidx.ui.graphics.FilterQuality none;
   }
 
-  public final class RadialGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
+  public interface Image {
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public androidx.ui.graphics.ImageConfig getConfig();
+    method public boolean getHasAlpha();
+    method public int getHeight();
+    method public android.graphics.Bitmap getNativeImage();
+    method public int getWidth();
+    method public void prepareToDraw();
+    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public abstract androidx.ui.graphics.ImageConfig config;
+    property public abstract boolean hasAlpha;
+    property public abstract int height;
+    property public abstract android.graphics.Bitmap nativeImage;
+    property public abstract int width;
+  }
+
+  public enum ImageByteFormat {
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
+  }
+
+  public enum ImageConfig {
+    enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
+    enum_constant public static final androidx.ui.graphics.ImageConfig F16;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Gpu;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Rgb565;
+  }
+
+  public final class ImageKt {
+    ctor public ImageKt();
+  }
+
+  public enum ImageRepeat {
+    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
+  }
+
+  public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class MaskFilter {
+    ctor public MaskFilter(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public androidx.ui.graphics.BlurStyle component1();
+    method public float component2();
+    method public androidx.ui.graphics.MaskFilter copy(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public float getSigma();
+    method public androidx.ui.graphics.BlurStyle getStyle();
+    field public static final androidx.ui.graphics.MaskFilter.Companion! Companion;
+    field public static final int TYPE_BLUR = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+  }
+
+  public static final class MaskFilter.Companion {
+  }
+
+  public final class Paint {
+    ctor public Paint();
+    method public android.graphics.Paint asFrameworkPaint();
+    method public float getAlpha();
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.graphics.ColorFilter? getColorFilter();
+    method public androidx.ui.graphics.FilterQuality getFilterQuality();
+    method public androidx.ui.graphics.MaskFilter getMaskFilter();
+    method public androidx.ui.graphics.Shader? getShader();
+    method public androidx.ui.graphics.StrokeCap getStrokeCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeJoin();
+    method public float getStrokeMiterLimit();
+    method public float getStrokeWidth();
+    method public androidx.ui.graphics.PaintingStyle getStyle();
+    method public boolean isAntiAlias();
+    method public void setAlpha(float value);
+    method public void setAntiAlias(boolean value);
+    method public void setBlendMode(androidx.ui.graphics.BlendMode value);
+    method public void setColor(androidx.ui.graphics.Color color);
+    method public void setColorFilter(androidx.ui.graphics.ColorFilter? value);
+    method public void setFilterQuality(androidx.ui.graphics.FilterQuality value);
+    method public void setMaskFilter(androidx.ui.graphics.MaskFilter value);
+    method public void setShader(androidx.ui.graphics.Shader? value);
+    method public void setStrokeCap(androidx.ui.graphics.StrokeCap value);
+    method public void setStrokeJoin(androidx.ui.graphics.StrokeJoin value);
+    method public void setStrokeMiterLimit(float value);
+    method public void setStrokeWidth(float value);
+    method public void setStyle(androidx.ui.graphics.PaintingStyle value);
+    property public final float alpha;
+    property public final androidx.ui.graphics.BlendMode blendMode;
+    property public final androidx.ui.graphics.Color color;
+    property public final androidx.ui.graphics.ColorFilter? colorFilter;
+    property public final androidx.ui.graphics.FilterQuality filterQuality;
+    property public final boolean isAntiAlias;
+    property public final androidx.ui.graphics.MaskFilter maskFilter;
+    property public final androidx.ui.graphics.Shader? shader;
+    property public final androidx.ui.graphics.StrokeCap strokeCap;
+    property public final androidx.ui.graphics.StrokeJoin strokeJoin;
+    property public final float strokeMiterLimit;
+    property public final float strokeWidth;
+    property public final androidx.ui.graphics.PaintingStyle style;
+  }
+
+  public enum PaintingStyle {
+    enum_constant public static final androidx.ui.graphics.PaintingStyle fill;
+    enum_constant public static final androidx.ui.graphics.PaintingStyle stroke;
+  }
+
+  public final class Path {
+    ctor public Path(android.graphics.Path internalPath);
+    ctor public Path();
+    method public void _addRect(float left, float top, float right, float bottom);
+    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.ui.engine.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
+    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
+    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void addRect(androidx.ui.engine.geometry.Rect rect);
+    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void close();
+    method public void conicTo(float x1, float y1, float x2, float y2, float w);
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void extendWithPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
+    method public androidx.ui.engine.geometry.Rect getBounds();
+    method public androidx.ui.graphics.PathFillType getFillType();
+    method public boolean isConvex();
+    method public boolean isEmpty();
+    method public void lineTo(float dx, float dy);
+    method public void moveTo(float dx, float dy);
+    method public boolean op(androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2, androidx.ui.graphics.PathOperation operation);
+    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
+    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void relativeLineTo(float dx, float dy);
+    method public void relativeMoveTo(float dx, float dy);
+    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void reset();
+    method public void setFillType(androidx.ui.graphics.PathFillType value);
+    method public void shift(androidx.ui.engine.geometry.Offset offset);
+    method public android.graphics.Path toFrameworkPath();
+    method public androidx.ui.graphics.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
+    property public final boolean isConvex;
+    property public final boolean isEmpty;
+    field public static final androidx.ui.graphics.Path.Companion! Companion;
+  }
+
+  public static final class Path.Companion {
+    method public androidx.ui.graphics.Path combine(androidx.ui.graphics.PathOperation operation, androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2);
+  }
+
+  public enum PathFillType {
+    enum_constant public static final androidx.ui.graphics.PathFillType evenOdd;
+    enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
+  }
+
+  public enum PathOperation {
+    enum_constant public static final androidx.ui.graphics.PathOperation difference;
+    enum_constant public static final androidx.ui.graphics.PathOperation intersect;
+    enum_constant public static final androidx.ui.graphics.PathOperation reverseDifference;
+    enum_constant public static final androidx.ui.graphics.PathOperation union;
+    enum_constant public static final androidx.ui.graphics.PathOperation xor;
+  }
+
+  public final class Picture {
+    ctor public Picture(android.graphics.Picture frameworkPicture);
+    method public androidx.ui.engine.geometry.Rect cullRect();
+    method public void dispose();
+    method public android.graphics.Picture getFrameworkPicture();
+  }
+
+  public final class PictureRecorder {
+    ctor public PictureRecorder();
+    method public androidx.ui.graphics.Picture endRecording();
+    method public boolean isRecording();
+    property public final boolean isRecording;
+  }
+
+  public enum PointMode {
+    enum_constant public static final androidx.ui.graphics.PointMode lines;
+    enum_constant public static final androidx.ui.graphics.PointMode points;
+    enum_constant public static final androidx.ui.graphics.PointMode polygon;
+  }
+
+  public final class RadialGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class Shader {
+    ctor public Shader(android.graphics.Shader nativeShader);
+    method public android.graphics.Shader getNativeShader();
+  }
+
+  public class ShaderBrush implements androidx.ui.graphics.Brush {
+    ctor public ShaderBrush(androidx.ui.graphics.Shader shader);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public final androidx.ui.graphics.Shader getShader();
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static androidx.ui.graphics.Shader ImageShader(androidx.ui.graphics.Image image, androidx.ui.graphics.TileMode tileModeX = TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public final class Shadow {
+    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    ctor public Shadow();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Offset component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.graphics.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    method public androidx.ui.core.Px getBlurRadius();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.engine.geometry.Offset getOffset();
+  }
+
+  public final class ShadowKt {
+    ctor public ShadowKt();
+    method public static androidx.ui.graphics.Shadow lerp(androidx.ui.graphics.Shadow a, androidx.ui.graphics.Shadow b, float t);
   }
 
   public final class SolidColor implements androidx.ui.graphics.Brush {
     ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.SolidColor copy(androidx.ui.graphics.Color value);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public androidx.ui.graphics.Color getValue();
+  }
+
+  public enum StrokeCap {
+    enum_constant public static final androidx.ui.graphics.StrokeCap butt;
+    enum_constant public static final androidx.ui.graphics.StrokeCap round;
+    enum_constant public static final androidx.ui.graphics.StrokeCap square;
+  }
+
+  public enum StrokeJoin {
+    enum_constant public static final androidx.ui.graphics.StrokeJoin bevel;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin miter;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin round;
+  }
+
+  public enum TileMode {
+    method public final android.graphics.Shader.TileMode getNativeTileMode();
+    enum_constant public static final androidx.ui.graphics.TileMode Clamp;
+    enum_constant public static final androidx.ui.graphics.TileMode Mirror;
+    enum_constant public static final androidx.ui.graphics.TileMode Repeated;
+  }
+
+  public final class TileModeKt {
+    ctor public TileModeKt();
+    method public static android.graphics.Shader.TileMode NativeClampTileMode();
+    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
+    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
   }
 
 }
@@ -1468,7 +1852,7 @@
     method public void clear();
     method public androidx.ui.graphics.vector.PathParser parsePathString(String pathData);
     method public androidx.ui.graphics.vector.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = androidx.ui.painting.Path());
+    method public androidx.ui.graphics.Path toPath(androidx.ui.graphics.Path target = androidx.ui.graphics.Path());
   }
 
   public final class PathParserKt {
@@ -1477,363 +1861,6 @@
 
 }
 
-package androidx.ui.painting {
-
-  public final class AndroidCanvasKt {
-    ctor public AndroidCanvasKt();
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.Image image);
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
-    method public static androidx.ui.painting.Canvas Canvas(android.graphics.Canvas c);
-  }
-
-  public final class AndroidImageKt {
-    ctor public AndroidImageKt();
-    method public static androidx.ui.painting.Image Image(int width, int height, androidx.ui.painting.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method public static androidx.ui.painting.Image imageFromResource(android.content.res.Resources res, int resId);
-  }
-
-  public enum BlendMode {
-    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
-    enum_constant public static final androidx.ui.painting.BlendMode clear;
-    enum_constant public static final androidx.ui.painting.BlendMode color;
-    enum_constant public static final androidx.ui.painting.BlendMode colorBurn;
-    enum_constant public static final androidx.ui.painting.BlendMode colorDodge;
-    enum_constant public static final androidx.ui.painting.BlendMode darken;
-    enum_constant public static final androidx.ui.painting.BlendMode difference;
-    enum_constant public static final androidx.ui.painting.BlendMode dst;
-    enum_constant public static final androidx.ui.painting.BlendMode dstATop;
-    enum_constant public static final androidx.ui.painting.BlendMode dstIn;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOut;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOver;
-    enum_constant public static final androidx.ui.painting.BlendMode exclusion;
-    enum_constant public static final androidx.ui.painting.BlendMode hardLight;
-    enum_constant public static final androidx.ui.painting.BlendMode hue;
-    enum_constant public static final androidx.ui.painting.BlendMode lighten;
-    enum_constant public static final androidx.ui.painting.BlendMode luminosity;
-    enum_constant public static final androidx.ui.painting.BlendMode modulate;
-    enum_constant public static final androidx.ui.painting.BlendMode multiply;
-    enum_constant public static final androidx.ui.painting.BlendMode overlay;
-    enum_constant public static final androidx.ui.painting.BlendMode plus;
-    enum_constant public static final androidx.ui.painting.BlendMode saturation;
-    enum_constant public static final androidx.ui.painting.BlendMode screen;
-    enum_constant public static final androidx.ui.painting.BlendMode softLight;
-    enum_constant public static final androidx.ui.painting.BlendMode src;
-    enum_constant public static final androidx.ui.painting.BlendMode srcATop;
-    enum_constant public static final androidx.ui.painting.BlendMode srcIn;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOut;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOver;
-    enum_constant public static final androidx.ui.painting.BlendMode xor;
-  }
-
-  public enum BlurStyle {
-    enum_constant public static final androidx.ui.painting.BlurStyle inner;
-    enum_constant public static final androidx.ui.painting.BlurStyle normal;
-    enum_constant public static final androidx.ui.painting.BlurStyle outer;
-    enum_constant public static final androidx.ui.painting.BlurStyle solid;
-  }
-
-  public interface Canvas {
-    method public void clipPath(androidx.ui.painting.Path path);
-    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.ClipOp clipOp = ClipOp.intersect);
-    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
-    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.painting.Paint paint);
-    method public void drawDRRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.painting.Paint paint);
-    method public void drawImage(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.painting.Paint paint);
-    method public void drawImageRect(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.painting.Paint paint);
-    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.painting.Paint paint);
-    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawPath(androidx.ui.painting.Path path, androidx.ui.painting.Paint paint);
-    method public void drawPicture(androidx.ui.painting.Picture picture);
-    method public void drawPoints(androidx.ui.painting.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.painting.Paint paint);
-    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.painting.Paint paint);
-    method public void drawRawPoints(androidx.ui.painting.PointMode pointMode, float[] points, androidx.ui.painting.Paint paint);
-    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.painting.BlendMode blendMode, androidx.ui.painting.Paint paint);
-    method public android.graphics.Canvas getNativeCanvas();
-    method public void restore();
-    method public void rotate(float degrees);
-    method public default void rotateRad(float radians);
-    method public void save();
-    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint);
-    method public void scale(float sx, float sy = sx);
-    method public void skew(float sx, float sy);
-    method public default void skewRad(float sxRad, float syRad);
-    method public void translate(float dx, float dy);
-    property public abstract android.graphics.Canvas nativeCanvas;
-  }
-
-  public final class CanvasKt {
-    ctor public CanvasKt();
-    method public static inline void withSave(androidx.ui.painting.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-  }
-
-  public enum ClipOp {
-    enum_constant public static final androidx.ui.painting.ClipOp difference;
-    enum_constant public static final androidx.ui.painting.ClipOp intersect;
-  }
-
-  public final class ColorFilter {
-    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.painting.BlendMode component2();
-    method public androidx.ui.painting.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-  }
-
-  public enum FilterQuality {
-    enum_constant public static final androidx.ui.painting.FilterQuality high;
-    enum_constant public static final androidx.ui.painting.FilterQuality low;
-    enum_constant public static final androidx.ui.painting.FilterQuality medium;
-    enum_constant public static final androidx.ui.painting.FilterQuality none;
-  }
-
-  public interface Image {
-    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
-    method public androidx.ui.painting.ImageConfig getConfig();
-    method public boolean getHasAlpha();
-    method public int getHeight();
-    method public android.graphics.Bitmap getNativeImage();
-    method public int getWidth();
-    method public void prepareToDraw();
-    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
-    property public abstract androidx.ui.painting.ImageConfig config;
-    property public abstract boolean hasAlpha;
-    property public abstract int height;
-    property public abstract android.graphics.Bitmap nativeImage;
-    property public abstract int width;
-  }
-
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.painting.ImageByteFormat png;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawUnmodified;
-  }
-
-  public enum ImageConfig {
-    enum_constant public static final androidx.ui.painting.ImageConfig Alpha8;
-    enum_constant public static final androidx.ui.painting.ImageConfig Argb8888;
-    enum_constant public static final androidx.ui.painting.ImageConfig F16;
-    enum_constant public static final androidx.ui.painting.ImageConfig Gpu;
-    enum_constant public static final androidx.ui.painting.ImageConfig Rgb565;
-  }
-
-  public final class ImageKt {
-    ctor public ImageKt();
-  }
-
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.painting.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatY;
-  }
-
-  public final class MaskFilter {
-    ctor public MaskFilter(androidx.ui.painting.BlurStyle style, float sigma);
-    method public androidx.ui.painting.BlurStyle component1();
-    method public float component2();
-    method public androidx.ui.painting.MaskFilter copy(androidx.ui.painting.BlurStyle style, float sigma);
-    method public float getSigma();
-    method public androidx.ui.painting.BlurStyle getStyle();
-    field public static final androidx.ui.painting.MaskFilter.Companion! Companion;
-    field public static final int TYPE_BLUR = 1; // 0x1
-    field public static final int TYPE_NONE = 0; // 0x0
-  }
-
-  public static final class MaskFilter.Companion {
-  }
-
-  public final class Paint {
-    ctor public Paint();
-    method public android.graphics.Paint asFrameworkPaint();
-    method public float getAlpha();
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.painting.ColorFilter? getColorFilter();
-    method public androidx.ui.painting.FilterQuality getFilterQuality();
-    method public androidx.ui.painting.MaskFilter getMaskFilter();
-    method public androidx.ui.painting.Shader? getShader();
-    method public androidx.ui.painting.StrokeCap getStrokeCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeJoin();
-    method public float getStrokeMiterLimit();
-    method public float getStrokeWidth();
-    method public androidx.ui.painting.PaintingStyle getStyle();
-    method public boolean isAntiAlias();
-    method public void setAlpha(float value);
-    method public void setAntiAlias(boolean value);
-    method public void setBlendMode(androidx.ui.painting.BlendMode value);
-    method public void setColor(androidx.ui.graphics.Color color);
-    method public void setColorFilter(androidx.ui.painting.ColorFilter? value);
-    method public void setFilterQuality(androidx.ui.painting.FilterQuality value);
-    method public void setMaskFilter(androidx.ui.painting.MaskFilter value);
-    method public void setShader(androidx.ui.painting.Shader? value);
-    method public void setStrokeCap(androidx.ui.painting.StrokeCap value);
-    method public void setStrokeJoin(androidx.ui.painting.StrokeJoin value);
-    method public void setStrokeMiterLimit(float value);
-    method public void setStrokeWidth(float value);
-    method public void setStyle(androidx.ui.painting.PaintingStyle value);
-    property public final float alpha;
-    property public final androidx.ui.painting.BlendMode blendMode;
-    property public final androidx.ui.graphics.Color color;
-    property public final androidx.ui.painting.ColorFilter? colorFilter;
-    property public final androidx.ui.painting.FilterQuality filterQuality;
-    property public final boolean isAntiAlias;
-    property public final androidx.ui.painting.MaskFilter maskFilter;
-    property public final androidx.ui.painting.Shader? shader;
-    property public final androidx.ui.painting.StrokeCap strokeCap;
-    property public final androidx.ui.painting.StrokeJoin strokeJoin;
-    property public final float strokeMiterLimit;
-    property public final float strokeWidth;
-    property public final androidx.ui.painting.PaintingStyle style;
-  }
-
-  public enum PaintingStyle {
-    enum_constant public static final androidx.ui.painting.PaintingStyle fill;
-    enum_constant public static final androidx.ui.painting.PaintingStyle stroke;
-  }
-
-  public final class Path {
-    ctor public Path(android.graphics.Path internalPath);
-    ctor public Path();
-    method public void _addRect(float left, float top, float right, float bottom);
-    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.engine.geometry.Rect oval);
-    method public void addPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
-    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
-    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void addRect(androidx.ui.engine.geometry.Rect rect);
-    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
-    method public void close();
-    method public void conicTo(float x1, float y1, float x2, float y2, float w);
-    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
-    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void extendWithPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
-    method public androidx.ui.engine.geometry.Rect getBounds();
-    method public androidx.ui.painting.PathFillType getFillType();
-    method public boolean isConvex();
-    method public boolean isEmpty();
-    method public void lineTo(float dx, float dy);
-    method public void moveTo(float dx, float dy);
-    method public boolean op(androidx.ui.painting.Path path1, androidx.ui.painting.Path path2, androidx.ui.painting.PathOperation operation);
-    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
-    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void relativeLineTo(float dx, float dy);
-    method public void relativeMoveTo(float dx, float dy);
-    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void reset();
-    method public void setFillType(androidx.ui.painting.PathFillType value);
-    method public void shift(androidx.ui.engine.geometry.Offset offset);
-    method public android.graphics.Path toFrameworkPath();
-    method public androidx.ui.painting.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
-    property public final boolean isConvex;
-    property public final boolean isEmpty;
-    field public static final androidx.ui.painting.Path.Companion! Companion;
-  }
-
-  public static final class Path.Companion {
-    method public androidx.ui.painting.Path combine(androidx.ui.painting.PathOperation operation, androidx.ui.painting.Path path1, androidx.ui.painting.Path path2);
-  }
-
-  public enum PathFillType {
-    enum_constant public static final androidx.ui.painting.PathFillType evenOdd;
-    enum_constant public static final androidx.ui.painting.PathFillType nonZero;
-  }
-
-  public enum PathOperation {
-    enum_constant public static final androidx.ui.painting.PathOperation difference;
-    enum_constant public static final androidx.ui.painting.PathOperation intersect;
-    enum_constant public static final androidx.ui.painting.PathOperation reverseDifference;
-    enum_constant public static final androidx.ui.painting.PathOperation union;
-    enum_constant public static final androidx.ui.painting.PathOperation xor;
-  }
-
-  public final class Picture {
-    ctor public Picture(android.graphics.Picture frameworkPicture);
-    method public androidx.ui.engine.geometry.Rect cullRect();
-    method public void dispose();
-    method public android.graphics.Picture getFrameworkPicture();
-  }
-
-  public final class PictureRecorder {
-    ctor public PictureRecorder();
-    method public androidx.ui.painting.Picture endRecording();
-    method public boolean isRecording();
-    property public final boolean isRecording;
-  }
-
-  public enum PointMode {
-    enum_constant public static final androidx.ui.painting.PointMode lines;
-    enum_constant public static final androidx.ui.painting.PointMode points;
-    enum_constant public static final androidx.ui.painting.PointMode polygon;
-  }
-
-  public final class Shader {
-    ctor public Shader(android.graphics.Shader nativeShader);
-    method public android.graphics.Shader getNativeShader();
-  }
-
-  public final class ShaderKt {
-    ctor public ShaderKt();
-    method public static androidx.ui.painting.Shader ImageShader(androidx.ui.painting.Image image, androidx.ui.painting.TileMode tileModeX = TileMode.Clamp, androidx.ui.painting.TileMode tileModeY = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-  }
-
-  public final class Shadow {
-    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    ctor public Shadow();
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.engine.geometry.Offset component2();
-    method public androidx.ui.core.Px component3();
-    method public androidx.ui.painting.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    method public androidx.ui.core.Px getBlurRadius();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.engine.geometry.Offset getOffset();
-  }
-
-  public final class ShadowKt {
-    ctor public ShadowKt();
-    method public static androidx.ui.painting.Shadow lerp(androidx.ui.painting.Shadow a, androidx.ui.painting.Shadow b, float t);
-  }
-
-  public enum StrokeCap {
-    enum_constant public static final androidx.ui.painting.StrokeCap butt;
-    enum_constant public static final androidx.ui.painting.StrokeCap round;
-    enum_constant public static final androidx.ui.painting.StrokeCap square;
-  }
-
-  public enum StrokeJoin {
-    enum_constant public static final androidx.ui.painting.StrokeJoin bevel;
-    enum_constant public static final androidx.ui.painting.StrokeJoin miter;
-    enum_constant public static final androidx.ui.painting.StrokeJoin round;
-  }
-
-  public enum TileMode {
-    method public final android.graphics.Shader.TileMode getNativeTileMode();
-    enum_constant public static final androidx.ui.painting.TileMode Clamp;
-    enum_constant public static final androidx.ui.painting.TileMode Mirror;
-    enum_constant public static final androidx.ui.painting.TileMode Repeated;
-  }
-
-  public final class TileModeKt {
-    ctor public TileModeKt();
-    method public static android.graphics.Shader.TileMode NativeClampTileMode();
-    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
-    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
-  }
-
-}
-
 package androidx.ui.semantics {
 
   public final class AccessibilityAction<T extends kotlin.Function<? extends kotlin.Unit>> {
diff --git a/ui/ui-core/api/api_lint.ignore b/ui/ui-core/api/api_lint.ignore
index 7caeeee..84d59da 100644
--- a/ui/ui-core/api/api_lint.ignore
+++ b/ui/ui-core/api/api_lint.ignore
@@ -47,8 +47,6 @@
     Acronyms should not be capitalized in method names: was `fromLTRB`, should this be `fromLtrb`?
 AcronymName: androidx.ui.engine.geometry.Rect.Companion#fromLTWH(float, float, float, float):
     Acronyms should not be capitalized in method names: was `fromLTWH`, should this be `fromLtwh`?
-AcronymName: androidx.ui.painting.Canvas#drawDRRect(androidx.ui.engine.geometry.RRect, androidx.ui.engine.geometry.RRect, androidx.ui.painting.Paint):
-    Acronyms should not be capitalized in method names: was `drawDRRect`, should this be `drawDrRect`?
 
 
 AutoBoxing: androidx.ui.vectormath64.Matrix4#scale(Object, Float, Float) parameter #1:
@@ -61,14 +59,6 @@
 
 DocumentExceptions: androidx.ui.graphics.ColorKt#Color(float, float, float, float, androidx.ui.graphics.colorspace.ColorSpace):
     Method ColorKt.Color appears to be throwing java.lang.IllegalArgumentException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
-DocumentExceptions: androidx.ui.painting.Path#arcToPoint(androidx.ui.engine.geometry.Offset, androidx.ui.engine.geometry.Radius, float, boolean, boolean):
-    Method Path.arcToPoint appears to be throwing java.lang.UnsupportedOperationException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
-DocumentExceptions: androidx.ui.painting.Path#conicTo(float, float, float, float, float):
-    Method Path.conicTo appears to be throwing java.lang.UnsupportedOperationException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
-DocumentExceptions: androidx.ui.painting.Path#relativeConicTo(float, float, float, float, float):
-    Method Path.relativeConicTo appears to be throwing java.lang.UnsupportedOperationException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
-DocumentExceptions: androidx.ui.painting.Path.Companion#combine(androidx.ui.painting.PathOperation, androidx.ui.painting.Path, androidx.ui.painting.Path):
-    Method Companion.combine appears to be throwing java.lang.IllegalArgumentException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
 DocumentExceptions: androidx.ui.vectormath64.Matrix2#get(androidx.ui.vectormath64.MatrixColumn):
     Method Matrix2.get appears to be throwing java.lang.IllegalArgumentException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
 DocumentExceptions: androidx.ui.vectormath64.Matrix2#get(int):
@@ -111,7 +101,7 @@
     Note that adding the `operator` keyword would allow calling this method using operator syntax
 KotlinOperator: androidx.ui.engine.geometry.Size#contains(androidx.ui.engine.geometry.Offset):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.ui.painting.Path#contains(androidx.ui.engine.geometry.Offset):
+KotlinOperator: androidx.ui.graphics.Path#contains(androidx.ui.engine.geometry.Offset):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
 KotlinOperator: androidx.ui.text.TextRange#contains(androidx.ui.text.TextRange):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
@@ -183,14 +173,14 @@
     Missing nullability on field `Companion` in class `class androidx.ui.engine.geometry.Size`
 MissingNullability: androidx.ui.graphics.Color#Companion:
     Missing nullability on field `Companion` in class `class androidx.ui.graphics.Color`
+MissingNullability: androidx.ui.graphics.MaskFilter#Companion:
+    Missing nullability on field `Companion` in class `class androidx.ui.graphics.MaskFilter`
+MissingNullability: androidx.ui.graphics.Path#Companion:
+    Missing nullability on field `Companion` in class `class androidx.ui.graphics.Path`
 MissingNullability: androidx.ui.graphics.colorspace.ColorSpaces#INSTANCE:
     Missing nullability on field `INSTANCE` in class `class androidx.ui.graphics.colorspace.ColorSpaces`
 MissingNullability: androidx.ui.graphics.colorspace.Illuminant#INSTANCE:
     Missing nullability on field `INSTANCE` in class `class androidx.ui.graphics.colorspace.Illuminant`
-MissingNullability: androidx.ui.painting.MaskFilter#Companion:
-    Missing nullability on field `Companion` in class `class androidx.ui.painting.MaskFilter`
-MissingNullability: androidx.ui.painting.Path#Companion:
-    Missing nullability on field `Companion` in class `class androidx.ui.painting.Path`
 MissingNullability: androidx.ui.util.Float16#Companion:
     Missing nullability on field `Companion` in class `class androidx.ui.util.Float16`
 MissingNullability: androidx.ui.vectormath64.Matrix2#Companion:
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index 1df842d..a363165 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -275,6 +275,9 @@
     method public static inline operator androidx.ui.core.Dp times(float, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(double, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(int, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Size times(int, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(float, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(double, androidx.ui.core.Size size);
     method public static androidx.ui.core.Bounds toBounds(androidx.ui.core.Size);
     method public static inline androidx.ui.core.Size toSize(androidx.ui.core.Bounds);
   }
@@ -374,6 +377,7 @@
     method public int getValue();
     method public operator androidx.ui.core.IntPx minus(androidx.ui.core.IntPx other);
     method public operator androidx.ui.core.IntPx plus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.IntPx rem(int other);
     method public operator androidx.ui.core.IntPx times(float other);
     method public operator androidx.ui.core.IntPx times(double other);
     method public operator androidx.ui.core.IntPx times(int other);
@@ -421,6 +425,7 @@
     method public static operator androidx.ui.core.IntPx times(float, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(double, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(int, androidx.ui.core.IntPx other);
+    method public static inline operator androidx.ui.core.IntPxSize times(int, androidx.ui.core.IntPxSize size);
     method public static inline androidx.ui.core.Px toPx(androidx.ui.core.IntPx);
     method public static inline androidx.ui.core.PxPosition toPxPosition(androidx.ui.core.IntPxPosition);
     method public static inline androidx.ui.core.PxSize toPxSize(androidx.ui.core.IntPxSize);
@@ -443,8 +448,10 @@
     method public androidx.ui.core.IntPx component1();
     method public androidx.ui.core.IntPx component2();
     method public androidx.ui.core.IntPxSize copy(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public inline operator androidx.ui.core.IntPxSize div(int other);
     method public androidx.ui.core.IntPx getHeight();
     method public androidx.ui.core.IntPx getWidth();
+    method public inline operator androidx.ui.core.IntPxSize times(int other);
   }
 
   public interface IntrinsicMeasurable {
@@ -464,10 +471,17 @@
     method public androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.PxPosition global);
     method public androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.PxPosition local);
     method public androidx.ui.core.PxPosition localToRoot(androidx.ui.core.PxPosition local);
+    property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract androidx.ui.core.PxPosition position;
     property public abstract androidx.ui.core.PxSize size;
   }
 
+  public final class LayoutCoordinatesKt {
+    ctor public LayoutCoordinatesKt();
+    method public static inline androidx.ui.core.PxPosition getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.ui.core.PxPosition getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+  }
+
   public enum LayoutDirection {
     enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
     enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
@@ -666,6 +680,9 @@
     method public static inline operator androidx.ui.core.Px times(float, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(double, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(int, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.PxSize times(int, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(float, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(double, androidx.ui.core.PxSize size);
     method public static androidx.ui.core.PxBounds toBounds(androidx.ui.core.PxSize);
     method public static inline androidx.ui.engine.geometry.Offset toOffset(androidx.ui.core.PxPosition);
     method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxBounds);
@@ -698,8 +715,14 @@
     method public androidx.ui.core.Px component1();
     method public androidx.ui.core.Px component2();
     method public androidx.ui.core.PxSize copy(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public inline operator androidx.ui.core.PxSize div(int other);
+    method public inline operator androidx.ui.core.PxSize div(float other);
+    method public inline operator androidx.ui.core.PxSize div(double other);
     method public androidx.ui.core.Px getHeight();
     method public androidx.ui.core.Px getWidth();
+    method public inline operator androidx.ui.core.PxSize times(int other);
+    method public inline operator androidx.ui.core.PxSize times(float other);
+    method public inline operator androidx.ui.core.PxSize times(double other);
     field public static final androidx.ui.core.PxSize.Companion! Companion;
   }
 
@@ -738,8 +761,14 @@
     method public androidx.ui.core.Dp component1();
     method public androidx.ui.core.Dp component2();
     method public androidx.ui.core.Size copy(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public inline operator androidx.ui.core.Size div(int other);
+    method public inline operator androidx.ui.core.Size div(float other);
+    method public inline operator androidx.ui.core.Size div(double other);
     method public androidx.ui.core.Dp getHeight();
     method public androidx.ui.core.Dp getWidth();
+    method public inline operator androidx.ui.core.Size times(int other);
+    method public inline operator androidx.ui.core.Size times(float other);
+    method public inline operator androidx.ui.core.Size times(double other);
   }
 
   public final class Sp {
@@ -880,10 +909,10 @@
   }
 
   public static final class Outline.Generic extends androidx.ui.engine.geometry.Outline {
-    ctor public Outline.Generic(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path component1();
-    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path getPath();
+    ctor public Outline.Generic(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path component1();
+    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path getPath();
   }
 
   public static final class Outline.Rectangle extends androidx.ui.engine.geometry.Outline {
@@ -902,8 +931,8 @@
 
   public final class OutlineKt {
     ctor public OutlineKt();
-    method public static void addOutline(androidx.ui.painting.Path, androidx.ui.engine.geometry.Outline outline);
-    method public static void drawOutline(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.painting.Paint paint);
+    method public static void addOutline(androidx.ui.graphics.Path, androidx.ui.engine.geometry.Outline outline);
+    method public static void drawOutline(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.graphics.Paint paint);
   }
 
   public final class RRect {
@@ -1124,22 +1153,117 @@
 
 package androidx.ui.graphics {
 
+  public final class AndroidCanvasKt {
+    ctor public AndroidCanvasKt();
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.Image image);
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
+    method public static androidx.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+  }
+
+  public final class AndroidImageKt {
+    ctor public AndroidImageKt();
+    method public static androidx.ui.graphics.Image Image(int width, int height, androidx.ui.graphics.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Image imageFromResource(android.content.res.Resources res, int resId);
+  }
+
+  public enum BlendMode {
+    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
+    enum_constant public static final androidx.ui.graphics.BlendMode clear;
+    enum_constant public static final androidx.ui.graphics.BlendMode color;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorBurn;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorDodge;
+    enum_constant public static final androidx.ui.graphics.BlendMode darken;
+    enum_constant public static final androidx.ui.graphics.BlendMode difference;
+    enum_constant public static final androidx.ui.graphics.BlendMode dst;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode exclusion;
+    enum_constant public static final androidx.ui.graphics.BlendMode hardLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode hue;
+    enum_constant public static final androidx.ui.graphics.BlendMode lighten;
+    enum_constant public static final androidx.ui.graphics.BlendMode luminosity;
+    enum_constant public static final androidx.ui.graphics.BlendMode modulate;
+    enum_constant public static final androidx.ui.graphics.BlendMode multiply;
+    enum_constant public static final androidx.ui.graphics.BlendMode overlay;
+    enum_constant public static final androidx.ui.graphics.BlendMode plus;
+    enum_constant public static final androidx.ui.graphics.BlendMode saturation;
+    enum_constant public static final androidx.ui.graphics.BlendMode screen;
+    enum_constant public static final androidx.ui.graphics.BlendMode softLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode src;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode xor;
+  }
+
+  public enum BlurStyle {
+    enum_constant public static final androidx.ui.graphics.BlurStyle inner;
+    enum_constant public static final androidx.ui.graphics.BlurStyle normal;
+    enum_constant public static final androidx.ui.graphics.BlurStyle outer;
+    enum_constant public static final androidx.ui.graphics.BlurStyle solid;
+  }
+
   public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
+    method public void applyTo(androidx.ui.graphics.Paint p);
   }
 
   public final class BrushKt {
     ctor public BrushKt();
-    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush getEmptyBrush();
-    method public static androidx.ui.graphics.Brush obtainBrush(Object? brush);
+    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public interface Canvas {
+    method public void clipPath(androidx.ui.graphics.Path path);
+    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = ClipOp.intersect);
+    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
+    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawDoubleRoundRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
+    method public void drawPicture(androidx.ui.graphics.Picture picture);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.graphics.Paint paint);
+    method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
+    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
+    method public android.graphics.Canvas getNativeCanvas();
+    method public void restore();
+    method public void rotate(float degrees);
+    method public default void rotateRad(float radians);
+    method public void save();
+    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void scale(float sx, float sy = sx);
+    method public void skew(float sx, float sy);
+    method public default void skewRad(float sxRad, float syRad);
+    method public void translate(float dx, float dy);
+    property public abstract android.graphics.Canvas nativeCanvas;
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum ClipOp {
+    enum_constant public static final androidx.ui.graphics.ClipOp difference;
+    enum_constant public static final androidx.ui.graphics.ClipOp intersect;
   }
 
   public final class Color {
@@ -1186,6 +1310,15 @@
     property public final androidx.ui.graphics.Color Yellow;
   }
 
+  public final class ColorFilter {
+    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.BlendMode component2();
+    method public androidx.ui.graphics.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+  }
+
   public final class ColorKt {
     ctor public ColorKt();
     method public static androidx.ui.graphics.Color Color(float red, float green, float blue, float alpha = 1f, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
@@ -1197,20 +1330,271 @@
     method @ColorInt public static int toArgb(androidx.ui.graphics.Color);
   }
 
-  public final class LinearGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode);
+  public enum FilterQuality {
+    enum_constant public static final androidx.ui.graphics.FilterQuality high;
+    enum_constant public static final androidx.ui.graphics.FilterQuality low;
+    enum_constant public static final androidx.ui.graphics.FilterQuality medium;
+    enum_constant public static final androidx.ui.graphics.FilterQuality none;
   }
 
-  public final class RadialGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
+  public interface Image {
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public androidx.ui.graphics.ImageConfig getConfig();
+    method public boolean getHasAlpha();
+    method public int getHeight();
+    method public android.graphics.Bitmap getNativeImage();
+    method public int getWidth();
+    method public void prepareToDraw();
+    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public abstract androidx.ui.graphics.ImageConfig config;
+    property public abstract boolean hasAlpha;
+    property public abstract int height;
+    property public abstract android.graphics.Bitmap nativeImage;
+    property public abstract int width;
+  }
+
+  public enum ImageByteFormat {
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
+  }
+
+  public enum ImageConfig {
+    enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
+    enum_constant public static final androidx.ui.graphics.ImageConfig F16;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Gpu;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Rgb565;
+  }
+
+  public final class ImageKt {
+    ctor public ImageKt();
+  }
+
+  public enum ImageRepeat {
+    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
+  }
+
+  public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class MaskFilter {
+    ctor public MaskFilter(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public androidx.ui.graphics.BlurStyle component1();
+    method public float component2();
+    method public androidx.ui.graphics.MaskFilter copy(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public float getSigma();
+    method public androidx.ui.graphics.BlurStyle getStyle();
+    field public static final androidx.ui.graphics.MaskFilter.Companion! Companion;
+    field public static final int TYPE_BLUR = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+  }
+
+  public static final class MaskFilter.Companion {
+  }
+
+  public final class Paint {
+    ctor public Paint();
+    method public android.graphics.Paint asFrameworkPaint();
+    method public float getAlpha();
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.graphics.ColorFilter? getColorFilter();
+    method public androidx.ui.graphics.FilterQuality getFilterQuality();
+    method public androidx.ui.graphics.MaskFilter getMaskFilter();
+    method public androidx.ui.graphics.Shader? getShader();
+    method public androidx.ui.graphics.StrokeCap getStrokeCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeJoin();
+    method public float getStrokeMiterLimit();
+    method public float getStrokeWidth();
+    method public androidx.ui.graphics.PaintingStyle getStyle();
+    method public boolean isAntiAlias();
+    method public void setAlpha(float value);
+    method public void setAntiAlias(boolean value);
+    method public void setBlendMode(androidx.ui.graphics.BlendMode value);
+    method public void setColor(androidx.ui.graphics.Color color);
+    method public void setColorFilter(androidx.ui.graphics.ColorFilter? value);
+    method public void setFilterQuality(androidx.ui.graphics.FilterQuality value);
+    method public void setMaskFilter(androidx.ui.graphics.MaskFilter value);
+    method public void setShader(androidx.ui.graphics.Shader? value);
+    method public void setStrokeCap(androidx.ui.graphics.StrokeCap value);
+    method public void setStrokeJoin(androidx.ui.graphics.StrokeJoin value);
+    method public void setStrokeMiterLimit(float value);
+    method public void setStrokeWidth(float value);
+    method public void setStyle(androidx.ui.graphics.PaintingStyle value);
+    property public final float alpha;
+    property public final androidx.ui.graphics.BlendMode blendMode;
+    property public final androidx.ui.graphics.Color color;
+    property public final androidx.ui.graphics.ColorFilter? colorFilter;
+    property public final androidx.ui.graphics.FilterQuality filterQuality;
+    property public final boolean isAntiAlias;
+    property public final androidx.ui.graphics.MaskFilter maskFilter;
+    property public final androidx.ui.graphics.Shader? shader;
+    property public final androidx.ui.graphics.StrokeCap strokeCap;
+    property public final androidx.ui.graphics.StrokeJoin strokeJoin;
+    property public final float strokeMiterLimit;
+    property public final float strokeWidth;
+    property public final androidx.ui.graphics.PaintingStyle style;
+  }
+
+  public enum PaintingStyle {
+    enum_constant public static final androidx.ui.graphics.PaintingStyle fill;
+    enum_constant public static final androidx.ui.graphics.PaintingStyle stroke;
+  }
+
+  public final class Path {
+    ctor public Path(android.graphics.Path internalPath);
+    ctor public Path();
+    method public void _addRect(float left, float top, float right, float bottom);
+    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.ui.engine.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
+    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
+    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void addRect(androidx.ui.engine.geometry.Rect rect);
+    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void close();
+    method public void conicTo(float x1, float y1, float x2, float y2, float w);
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void extendWithPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
+    method public androidx.ui.engine.geometry.Rect getBounds();
+    method public androidx.ui.graphics.PathFillType getFillType();
+    method public boolean isConvex();
+    method public boolean isEmpty();
+    method public void lineTo(float dx, float dy);
+    method public void moveTo(float dx, float dy);
+    method public boolean op(androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2, androidx.ui.graphics.PathOperation operation);
+    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
+    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void relativeLineTo(float dx, float dy);
+    method public void relativeMoveTo(float dx, float dy);
+    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void reset();
+    method public void setFillType(androidx.ui.graphics.PathFillType value);
+    method public void shift(androidx.ui.engine.geometry.Offset offset);
+    method public android.graphics.Path toFrameworkPath();
+    method public androidx.ui.graphics.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
+    property public final boolean isConvex;
+    property public final boolean isEmpty;
+    field public static final androidx.ui.graphics.Path.Companion! Companion;
+  }
+
+  public static final class Path.Companion {
+    method public androidx.ui.graphics.Path combine(androidx.ui.graphics.PathOperation operation, androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2);
+  }
+
+  public enum PathFillType {
+    enum_constant public static final androidx.ui.graphics.PathFillType evenOdd;
+    enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
+  }
+
+  public enum PathOperation {
+    enum_constant public static final androidx.ui.graphics.PathOperation difference;
+    enum_constant public static final androidx.ui.graphics.PathOperation intersect;
+    enum_constant public static final androidx.ui.graphics.PathOperation reverseDifference;
+    enum_constant public static final androidx.ui.graphics.PathOperation union;
+    enum_constant public static final androidx.ui.graphics.PathOperation xor;
+  }
+
+  public final class Picture {
+    ctor public Picture(android.graphics.Picture frameworkPicture);
+    method public androidx.ui.engine.geometry.Rect cullRect();
+    method public void dispose();
+    method public android.graphics.Picture getFrameworkPicture();
+  }
+
+  public final class PictureRecorder {
+    ctor public PictureRecorder();
+    method public androidx.ui.graphics.Picture endRecording();
+    method public boolean isRecording();
+    property public final boolean isRecording;
+  }
+
+  public enum PointMode {
+    enum_constant public static final androidx.ui.graphics.PointMode lines;
+    enum_constant public static final androidx.ui.graphics.PointMode points;
+    enum_constant public static final androidx.ui.graphics.PointMode polygon;
+  }
+
+  public final class RadialGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class Shader {
+    ctor public Shader(android.graphics.Shader nativeShader);
+    method public android.graphics.Shader getNativeShader();
+  }
+
+  public class ShaderBrush implements androidx.ui.graphics.Brush {
+    ctor public ShaderBrush(androidx.ui.graphics.Shader shader);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public final androidx.ui.graphics.Shader getShader();
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static androidx.ui.graphics.Shader ImageShader(androidx.ui.graphics.Image image, androidx.ui.graphics.TileMode tileModeX = TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public final class Shadow {
+    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    ctor public Shadow();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Offset component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.graphics.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    method public androidx.ui.core.Px getBlurRadius();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.engine.geometry.Offset getOffset();
+  }
+
+  public final class ShadowKt {
+    ctor public ShadowKt();
+    method public static androidx.ui.graphics.Shadow lerp(androidx.ui.graphics.Shadow a, androidx.ui.graphics.Shadow b, float t);
   }
 
   public final class SolidColor implements androidx.ui.graphics.Brush {
     ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.SolidColor copy(androidx.ui.graphics.Color value);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public androidx.ui.graphics.Color getValue();
+  }
+
+  public enum StrokeCap {
+    enum_constant public static final androidx.ui.graphics.StrokeCap butt;
+    enum_constant public static final androidx.ui.graphics.StrokeCap round;
+    enum_constant public static final androidx.ui.graphics.StrokeCap square;
+  }
+
+  public enum StrokeJoin {
+    enum_constant public static final androidx.ui.graphics.StrokeJoin bevel;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin miter;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin round;
+  }
+
+  public enum TileMode {
+    method public final android.graphics.Shader.TileMode getNativeTileMode();
+    enum_constant public static final androidx.ui.graphics.TileMode Clamp;
+    enum_constant public static final androidx.ui.graphics.TileMode Mirror;
+    enum_constant public static final androidx.ui.graphics.TileMode Repeated;
+  }
+
+  public final class TileModeKt {
+    ctor public TileModeKt();
+    method public static android.graphics.Shader.TileMode NativeClampTileMode();
+    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
+    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
   }
 
 }
@@ -1468,7 +1852,7 @@
     method public void clear();
     method public androidx.ui.graphics.vector.PathParser parsePathString(String pathData);
     method public androidx.ui.graphics.vector.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = androidx.ui.painting.Path());
+    method public androidx.ui.graphics.Path toPath(androidx.ui.graphics.Path target = androidx.ui.graphics.Path());
   }
 
   public final class PathParserKt {
@@ -1477,363 +1861,6 @@
 
 }
 
-package androidx.ui.painting {
-
-  public final class AndroidCanvasKt {
-    ctor public AndroidCanvasKt();
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.Image image);
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
-    method public static androidx.ui.painting.Canvas Canvas(android.graphics.Canvas c);
-  }
-
-  public final class AndroidImageKt {
-    ctor public AndroidImageKt();
-    method public static androidx.ui.painting.Image Image(int width, int height, androidx.ui.painting.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method public static androidx.ui.painting.Image imageFromResource(android.content.res.Resources res, int resId);
-  }
-
-  public enum BlendMode {
-    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
-    enum_constant public static final androidx.ui.painting.BlendMode clear;
-    enum_constant public static final androidx.ui.painting.BlendMode color;
-    enum_constant public static final androidx.ui.painting.BlendMode colorBurn;
-    enum_constant public static final androidx.ui.painting.BlendMode colorDodge;
-    enum_constant public static final androidx.ui.painting.BlendMode darken;
-    enum_constant public static final androidx.ui.painting.BlendMode difference;
-    enum_constant public static final androidx.ui.painting.BlendMode dst;
-    enum_constant public static final androidx.ui.painting.BlendMode dstATop;
-    enum_constant public static final androidx.ui.painting.BlendMode dstIn;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOut;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOver;
-    enum_constant public static final androidx.ui.painting.BlendMode exclusion;
-    enum_constant public static final androidx.ui.painting.BlendMode hardLight;
-    enum_constant public static final androidx.ui.painting.BlendMode hue;
-    enum_constant public static final androidx.ui.painting.BlendMode lighten;
-    enum_constant public static final androidx.ui.painting.BlendMode luminosity;
-    enum_constant public static final androidx.ui.painting.BlendMode modulate;
-    enum_constant public static final androidx.ui.painting.BlendMode multiply;
-    enum_constant public static final androidx.ui.painting.BlendMode overlay;
-    enum_constant public static final androidx.ui.painting.BlendMode plus;
-    enum_constant public static final androidx.ui.painting.BlendMode saturation;
-    enum_constant public static final androidx.ui.painting.BlendMode screen;
-    enum_constant public static final androidx.ui.painting.BlendMode softLight;
-    enum_constant public static final androidx.ui.painting.BlendMode src;
-    enum_constant public static final androidx.ui.painting.BlendMode srcATop;
-    enum_constant public static final androidx.ui.painting.BlendMode srcIn;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOut;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOver;
-    enum_constant public static final androidx.ui.painting.BlendMode xor;
-  }
-
-  public enum BlurStyle {
-    enum_constant public static final androidx.ui.painting.BlurStyle inner;
-    enum_constant public static final androidx.ui.painting.BlurStyle normal;
-    enum_constant public static final androidx.ui.painting.BlurStyle outer;
-    enum_constant public static final androidx.ui.painting.BlurStyle solid;
-  }
-
-  public interface Canvas {
-    method public void clipPath(androidx.ui.painting.Path path);
-    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.ClipOp clipOp = ClipOp.intersect);
-    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
-    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.painting.Paint paint);
-    method public void drawDRRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.painting.Paint paint);
-    method public void drawImage(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.painting.Paint paint);
-    method public void drawImageRect(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.painting.Paint paint);
-    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.painting.Paint paint);
-    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawPath(androidx.ui.painting.Path path, androidx.ui.painting.Paint paint);
-    method public void drawPicture(androidx.ui.painting.Picture picture);
-    method public void drawPoints(androidx.ui.painting.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.painting.Paint paint);
-    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.painting.Paint paint);
-    method public void drawRawPoints(androidx.ui.painting.PointMode pointMode, float[] points, androidx.ui.painting.Paint paint);
-    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.painting.BlendMode blendMode, androidx.ui.painting.Paint paint);
-    method public android.graphics.Canvas getNativeCanvas();
-    method public void restore();
-    method public void rotate(float degrees);
-    method public default void rotateRad(float radians);
-    method public void save();
-    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint);
-    method public void scale(float sx, float sy = sx);
-    method public void skew(float sx, float sy);
-    method public default void skewRad(float sxRad, float syRad);
-    method public void translate(float dx, float dy);
-    property public abstract android.graphics.Canvas nativeCanvas;
-  }
-
-  public final class CanvasKt {
-    ctor public CanvasKt();
-    method public static inline void withSave(androidx.ui.painting.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-  }
-
-  public enum ClipOp {
-    enum_constant public static final androidx.ui.painting.ClipOp difference;
-    enum_constant public static final androidx.ui.painting.ClipOp intersect;
-  }
-
-  public final class ColorFilter {
-    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.painting.BlendMode component2();
-    method public androidx.ui.painting.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-  }
-
-  public enum FilterQuality {
-    enum_constant public static final androidx.ui.painting.FilterQuality high;
-    enum_constant public static final androidx.ui.painting.FilterQuality low;
-    enum_constant public static final androidx.ui.painting.FilterQuality medium;
-    enum_constant public static final androidx.ui.painting.FilterQuality none;
-  }
-
-  public interface Image {
-    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
-    method public androidx.ui.painting.ImageConfig getConfig();
-    method public boolean getHasAlpha();
-    method public int getHeight();
-    method public android.graphics.Bitmap getNativeImage();
-    method public int getWidth();
-    method public void prepareToDraw();
-    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
-    property public abstract androidx.ui.painting.ImageConfig config;
-    property public abstract boolean hasAlpha;
-    property public abstract int height;
-    property public abstract android.graphics.Bitmap nativeImage;
-    property public abstract int width;
-  }
-
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.painting.ImageByteFormat png;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawUnmodified;
-  }
-
-  public enum ImageConfig {
-    enum_constant public static final androidx.ui.painting.ImageConfig Alpha8;
-    enum_constant public static final androidx.ui.painting.ImageConfig Argb8888;
-    enum_constant public static final androidx.ui.painting.ImageConfig F16;
-    enum_constant public static final androidx.ui.painting.ImageConfig Gpu;
-    enum_constant public static final androidx.ui.painting.ImageConfig Rgb565;
-  }
-
-  public final class ImageKt {
-    ctor public ImageKt();
-  }
-
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.painting.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatY;
-  }
-
-  public final class MaskFilter {
-    ctor public MaskFilter(androidx.ui.painting.BlurStyle style, float sigma);
-    method public androidx.ui.painting.BlurStyle component1();
-    method public float component2();
-    method public androidx.ui.painting.MaskFilter copy(androidx.ui.painting.BlurStyle style, float sigma);
-    method public float getSigma();
-    method public androidx.ui.painting.BlurStyle getStyle();
-    field public static final androidx.ui.painting.MaskFilter.Companion! Companion;
-    field public static final int TYPE_BLUR = 1; // 0x1
-    field public static final int TYPE_NONE = 0; // 0x0
-  }
-
-  public static final class MaskFilter.Companion {
-  }
-
-  public final class Paint {
-    ctor public Paint();
-    method public android.graphics.Paint asFrameworkPaint();
-    method public float getAlpha();
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.painting.ColorFilter? getColorFilter();
-    method public androidx.ui.painting.FilterQuality getFilterQuality();
-    method public androidx.ui.painting.MaskFilter getMaskFilter();
-    method public androidx.ui.painting.Shader? getShader();
-    method public androidx.ui.painting.StrokeCap getStrokeCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeJoin();
-    method public float getStrokeMiterLimit();
-    method public float getStrokeWidth();
-    method public androidx.ui.painting.PaintingStyle getStyle();
-    method public boolean isAntiAlias();
-    method public void setAlpha(float value);
-    method public void setAntiAlias(boolean value);
-    method public void setBlendMode(androidx.ui.painting.BlendMode value);
-    method public void setColor(androidx.ui.graphics.Color color);
-    method public void setColorFilter(androidx.ui.painting.ColorFilter? value);
-    method public void setFilterQuality(androidx.ui.painting.FilterQuality value);
-    method public void setMaskFilter(androidx.ui.painting.MaskFilter value);
-    method public void setShader(androidx.ui.painting.Shader? value);
-    method public void setStrokeCap(androidx.ui.painting.StrokeCap value);
-    method public void setStrokeJoin(androidx.ui.painting.StrokeJoin value);
-    method public void setStrokeMiterLimit(float value);
-    method public void setStrokeWidth(float value);
-    method public void setStyle(androidx.ui.painting.PaintingStyle value);
-    property public final float alpha;
-    property public final androidx.ui.painting.BlendMode blendMode;
-    property public final androidx.ui.graphics.Color color;
-    property public final androidx.ui.painting.ColorFilter? colorFilter;
-    property public final androidx.ui.painting.FilterQuality filterQuality;
-    property public final boolean isAntiAlias;
-    property public final androidx.ui.painting.MaskFilter maskFilter;
-    property public final androidx.ui.painting.Shader? shader;
-    property public final androidx.ui.painting.StrokeCap strokeCap;
-    property public final androidx.ui.painting.StrokeJoin strokeJoin;
-    property public final float strokeMiterLimit;
-    property public final float strokeWidth;
-    property public final androidx.ui.painting.PaintingStyle style;
-  }
-
-  public enum PaintingStyle {
-    enum_constant public static final androidx.ui.painting.PaintingStyle fill;
-    enum_constant public static final androidx.ui.painting.PaintingStyle stroke;
-  }
-
-  public final class Path {
-    ctor public Path(android.graphics.Path internalPath);
-    ctor public Path();
-    method public void _addRect(float left, float top, float right, float bottom);
-    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.engine.geometry.Rect oval);
-    method public void addPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
-    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
-    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void addRect(androidx.ui.engine.geometry.Rect rect);
-    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
-    method public void close();
-    method public void conicTo(float x1, float y1, float x2, float y2, float w);
-    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
-    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void extendWithPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
-    method public androidx.ui.engine.geometry.Rect getBounds();
-    method public androidx.ui.painting.PathFillType getFillType();
-    method public boolean isConvex();
-    method public boolean isEmpty();
-    method public void lineTo(float dx, float dy);
-    method public void moveTo(float dx, float dy);
-    method public boolean op(androidx.ui.painting.Path path1, androidx.ui.painting.Path path2, androidx.ui.painting.PathOperation operation);
-    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
-    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void relativeLineTo(float dx, float dy);
-    method public void relativeMoveTo(float dx, float dy);
-    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void reset();
-    method public void setFillType(androidx.ui.painting.PathFillType value);
-    method public void shift(androidx.ui.engine.geometry.Offset offset);
-    method public android.graphics.Path toFrameworkPath();
-    method public androidx.ui.painting.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
-    property public final boolean isConvex;
-    property public final boolean isEmpty;
-    field public static final androidx.ui.painting.Path.Companion! Companion;
-  }
-
-  public static final class Path.Companion {
-    method public androidx.ui.painting.Path combine(androidx.ui.painting.PathOperation operation, androidx.ui.painting.Path path1, androidx.ui.painting.Path path2);
-  }
-
-  public enum PathFillType {
-    enum_constant public static final androidx.ui.painting.PathFillType evenOdd;
-    enum_constant public static final androidx.ui.painting.PathFillType nonZero;
-  }
-
-  public enum PathOperation {
-    enum_constant public static final androidx.ui.painting.PathOperation difference;
-    enum_constant public static final androidx.ui.painting.PathOperation intersect;
-    enum_constant public static final androidx.ui.painting.PathOperation reverseDifference;
-    enum_constant public static final androidx.ui.painting.PathOperation union;
-    enum_constant public static final androidx.ui.painting.PathOperation xor;
-  }
-
-  public final class Picture {
-    ctor public Picture(android.graphics.Picture frameworkPicture);
-    method public androidx.ui.engine.geometry.Rect cullRect();
-    method public void dispose();
-    method public android.graphics.Picture getFrameworkPicture();
-  }
-
-  public final class PictureRecorder {
-    ctor public PictureRecorder();
-    method public androidx.ui.painting.Picture endRecording();
-    method public boolean isRecording();
-    property public final boolean isRecording;
-  }
-
-  public enum PointMode {
-    enum_constant public static final androidx.ui.painting.PointMode lines;
-    enum_constant public static final androidx.ui.painting.PointMode points;
-    enum_constant public static final androidx.ui.painting.PointMode polygon;
-  }
-
-  public final class Shader {
-    ctor public Shader(android.graphics.Shader nativeShader);
-    method public android.graphics.Shader getNativeShader();
-  }
-
-  public final class ShaderKt {
-    ctor public ShaderKt();
-    method public static androidx.ui.painting.Shader ImageShader(androidx.ui.painting.Image image, androidx.ui.painting.TileMode tileModeX = TileMode.Clamp, androidx.ui.painting.TileMode tileModeY = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-  }
-
-  public final class Shadow {
-    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    ctor public Shadow();
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.engine.geometry.Offset component2();
-    method public androidx.ui.core.Px component3();
-    method public androidx.ui.painting.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    method public androidx.ui.core.Px getBlurRadius();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.engine.geometry.Offset getOffset();
-  }
-
-  public final class ShadowKt {
-    ctor public ShadowKt();
-    method public static androidx.ui.painting.Shadow lerp(androidx.ui.painting.Shadow a, androidx.ui.painting.Shadow b, float t);
-  }
-
-  public enum StrokeCap {
-    enum_constant public static final androidx.ui.painting.StrokeCap butt;
-    enum_constant public static final androidx.ui.painting.StrokeCap round;
-    enum_constant public static final androidx.ui.painting.StrokeCap square;
-  }
-
-  public enum StrokeJoin {
-    enum_constant public static final androidx.ui.painting.StrokeJoin bevel;
-    enum_constant public static final androidx.ui.painting.StrokeJoin miter;
-    enum_constant public static final androidx.ui.painting.StrokeJoin round;
-  }
-
-  public enum TileMode {
-    method public final android.graphics.Shader.TileMode getNativeTileMode();
-    enum_constant public static final androidx.ui.painting.TileMode Clamp;
-    enum_constant public static final androidx.ui.painting.TileMode Mirror;
-    enum_constant public static final androidx.ui.painting.TileMode Repeated;
-  }
-
-  public final class TileModeKt {
-    ctor public TileModeKt();
-    method public static android.graphics.Shader.TileMode NativeClampTileMode();
-    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
-    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
-  }
-
-}
-
 package androidx.ui.semantics {
 
   public final class AccessibilityAction<T extends kotlin.Function<? extends kotlin.Unit>> {
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev01.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev01.txt
index 1df842d..a363165 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev01.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev01.txt
@@ -275,6 +275,9 @@
     method public static inline operator androidx.ui.core.Dp times(float, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(double, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(int, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Size times(int, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(float, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(double, androidx.ui.core.Size size);
     method public static androidx.ui.core.Bounds toBounds(androidx.ui.core.Size);
     method public static inline androidx.ui.core.Size toSize(androidx.ui.core.Bounds);
   }
@@ -374,6 +377,7 @@
     method public int getValue();
     method public operator androidx.ui.core.IntPx minus(androidx.ui.core.IntPx other);
     method public operator androidx.ui.core.IntPx plus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.IntPx rem(int other);
     method public operator androidx.ui.core.IntPx times(float other);
     method public operator androidx.ui.core.IntPx times(double other);
     method public operator androidx.ui.core.IntPx times(int other);
@@ -421,6 +425,7 @@
     method public static operator androidx.ui.core.IntPx times(float, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(double, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(int, androidx.ui.core.IntPx other);
+    method public static inline operator androidx.ui.core.IntPxSize times(int, androidx.ui.core.IntPxSize size);
     method public static inline androidx.ui.core.Px toPx(androidx.ui.core.IntPx);
     method public static inline androidx.ui.core.PxPosition toPxPosition(androidx.ui.core.IntPxPosition);
     method public static inline androidx.ui.core.PxSize toPxSize(androidx.ui.core.IntPxSize);
@@ -443,8 +448,10 @@
     method public androidx.ui.core.IntPx component1();
     method public androidx.ui.core.IntPx component2();
     method public androidx.ui.core.IntPxSize copy(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public inline operator androidx.ui.core.IntPxSize div(int other);
     method public androidx.ui.core.IntPx getHeight();
     method public androidx.ui.core.IntPx getWidth();
+    method public inline operator androidx.ui.core.IntPxSize times(int other);
   }
 
   public interface IntrinsicMeasurable {
@@ -464,10 +471,17 @@
     method public androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.PxPosition global);
     method public androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.PxPosition local);
     method public androidx.ui.core.PxPosition localToRoot(androidx.ui.core.PxPosition local);
+    property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract androidx.ui.core.PxPosition position;
     property public abstract androidx.ui.core.PxSize size;
   }
 
+  public final class LayoutCoordinatesKt {
+    ctor public LayoutCoordinatesKt();
+    method public static inline androidx.ui.core.PxPosition getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.ui.core.PxPosition getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+  }
+
   public enum LayoutDirection {
     enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
     enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
@@ -666,6 +680,9 @@
     method public static inline operator androidx.ui.core.Px times(float, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(double, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(int, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.PxSize times(int, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(float, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(double, androidx.ui.core.PxSize size);
     method public static androidx.ui.core.PxBounds toBounds(androidx.ui.core.PxSize);
     method public static inline androidx.ui.engine.geometry.Offset toOffset(androidx.ui.core.PxPosition);
     method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxBounds);
@@ -698,8 +715,14 @@
     method public androidx.ui.core.Px component1();
     method public androidx.ui.core.Px component2();
     method public androidx.ui.core.PxSize copy(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public inline operator androidx.ui.core.PxSize div(int other);
+    method public inline operator androidx.ui.core.PxSize div(float other);
+    method public inline operator androidx.ui.core.PxSize div(double other);
     method public androidx.ui.core.Px getHeight();
     method public androidx.ui.core.Px getWidth();
+    method public inline operator androidx.ui.core.PxSize times(int other);
+    method public inline operator androidx.ui.core.PxSize times(float other);
+    method public inline operator androidx.ui.core.PxSize times(double other);
     field public static final androidx.ui.core.PxSize.Companion! Companion;
   }
 
@@ -738,8 +761,14 @@
     method public androidx.ui.core.Dp component1();
     method public androidx.ui.core.Dp component2();
     method public androidx.ui.core.Size copy(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public inline operator androidx.ui.core.Size div(int other);
+    method public inline operator androidx.ui.core.Size div(float other);
+    method public inline operator androidx.ui.core.Size div(double other);
     method public androidx.ui.core.Dp getHeight();
     method public androidx.ui.core.Dp getWidth();
+    method public inline operator androidx.ui.core.Size times(int other);
+    method public inline operator androidx.ui.core.Size times(float other);
+    method public inline operator androidx.ui.core.Size times(double other);
   }
 
   public final class Sp {
@@ -880,10 +909,10 @@
   }
 
   public static final class Outline.Generic extends androidx.ui.engine.geometry.Outline {
-    ctor public Outline.Generic(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path component1();
-    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path getPath();
+    ctor public Outline.Generic(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path component1();
+    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path getPath();
   }
 
   public static final class Outline.Rectangle extends androidx.ui.engine.geometry.Outline {
@@ -902,8 +931,8 @@
 
   public final class OutlineKt {
     ctor public OutlineKt();
-    method public static void addOutline(androidx.ui.painting.Path, androidx.ui.engine.geometry.Outline outline);
-    method public static void drawOutline(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.painting.Paint paint);
+    method public static void addOutline(androidx.ui.graphics.Path, androidx.ui.engine.geometry.Outline outline);
+    method public static void drawOutline(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.graphics.Paint paint);
   }
 
   public final class RRect {
@@ -1124,22 +1153,117 @@
 
 package androidx.ui.graphics {
 
+  public final class AndroidCanvasKt {
+    ctor public AndroidCanvasKt();
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.Image image);
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
+    method public static androidx.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+  }
+
+  public final class AndroidImageKt {
+    ctor public AndroidImageKt();
+    method public static androidx.ui.graphics.Image Image(int width, int height, androidx.ui.graphics.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Image imageFromResource(android.content.res.Resources res, int resId);
+  }
+
+  public enum BlendMode {
+    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
+    enum_constant public static final androidx.ui.graphics.BlendMode clear;
+    enum_constant public static final androidx.ui.graphics.BlendMode color;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorBurn;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorDodge;
+    enum_constant public static final androidx.ui.graphics.BlendMode darken;
+    enum_constant public static final androidx.ui.graphics.BlendMode difference;
+    enum_constant public static final androidx.ui.graphics.BlendMode dst;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode exclusion;
+    enum_constant public static final androidx.ui.graphics.BlendMode hardLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode hue;
+    enum_constant public static final androidx.ui.graphics.BlendMode lighten;
+    enum_constant public static final androidx.ui.graphics.BlendMode luminosity;
+    enum_constant public static final androidx.ui.graphics.BlendMode modulate;
+    enum_constant public static final androidx.ui.graphics.BlendMode multiply;
+    enum_constant public static final androidx.ui.graphics.BlendMode overlay;
+    enum_constant public static final androidx.ui.graphics.BlendMode plus;
+    enum_constant public static final androidx.ui.graphics.BlendMode saturation;
+    enum_constant public static final androidx.ui.graphics.BlendMode screen;
+    enum_constant public static final androidx.ui.graphics.BlendMode softLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode src;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode xor;
+  }
+
+  public enum BlurStyle {
+    enum_constant public static final androidx.ui.graphics.BlurStyle inner;
+    enum_constant public static final androidx.ui.graphics.BlurStyle normal;
+    enum_constant public static final androidx.ui.graphics.BlurStyle outer;
+    enum_constant public static final androidx.ui.graphics.BlurStyle solid;
+  }
+
   public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
+    method public void applyTo(androidx.ui.graphics.Paint p);
   }
 
   public final class BrushKt {
     ctor public BrushKt();
-    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush getEmptyBrush();
-    method public static androidx.ui.graphics.Brush obtainBrush(Object? brush);
+    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public interface Canvas {
+    method public void clipPath(androidx.ui.graphics.Path path);
+    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = ClipOp.intersect);
+    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
+    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawDoubleRoundRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
+    method public void drawPicture(androidx.ui.graphics.Picture picture);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.graphics.Paint paint);
+    method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
+    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
+    method public android.graphics.Canvas getNativeCanvas();
+    method public void restore();
+    method public void rotate(float degrees);
+    method public default void rotateRad(float radians);
+    method public void save();
+    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void scale(float sx, float sy = sx);
+    method public void skew(float sx, float sy);
+    method public default void skewRad(float sxRad, float syRad);
+    method public void translate(float dx, float dy);
+    property public abstract android.graphics.Canvas nativeCanvas;
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum ClipOp {
+    enum_constant public static final androidx.ui.graphics.ClipOp difference;
+    enum_constant public static final androidx.ui.graphics.ClipOp intersect;
   }
 
   public final class Color {
@@ -1186,6 +1310,15 @@
     property public final androidx.ui.graphics.Color Yellow;
   }
 
+  public final class ColorFilter {
+    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.BlendMode component2();
+    method public androidx.ui.graphics.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+  }
+
   public final class ColorKt {
     ctor public ColorKt();
     method public static androidx.ui.graphics.Color Color(float red, float green, float blue, float alpha = 1f, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
@@ -1197,20 +1330,271 @@
     method @ColorInt public static int toArgb(androidx.ui.graphics.Color);
   }
 
-  public final class LinearGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode);
+  public enum FilterQuality {
+    enum_constant public static final androidx.ui.graphics.FilterQuality high;
+    enum_constant public static final androidx.ui.graphics.FilterQuality low;
+    enum_constant public static final androidx.ui.graphics.FilterQuality medium;
+    enum_constant public static final androidx.ui.graphics.FilterQuality none;
   }
 
-  public final class RadialGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
+  public interface Image {
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public androidx.ui.graphics.ImageConfig getConfig();
+    method public boolean getHasAlpha();
+    method public int getHeight();
+    method public android.graphics.Bitmap getNativeImage();
+    method public int getWidth();
+    method public void prepareToDraw();
+    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public abstract androidx.ui.graphics.ImageConfig config;
+    property public abstract boolean hasAlpha;
+    property public abstract int height;
+    property public abstract android.graphics.Bitmap nativeImage;
+    property public abstract int width;
+  }
+
+  public enum ImageByteFormat {
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
+  }
+
+  public enum ImageConfig {
+    enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
+    enum_constant public static final androidx.ui.graphics.ImageConfig F16;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Gpu;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Rgb565;
+  }
+
+  public final class ImageKt {
+    ctor public ImageKt();
+  }
+
+  public enum ImageRepeat {
+    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
+  }
+
+  public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class MaskFilter {
+    ctor public MaskFilter(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public androidx.ui.graphics.BlurStyle component1();
+    method public float component2();
+    method public androidx.ui.graphics.MaskFilter copy(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public float getSigma();
+    method public androidx.ui.graphics.BlurStyle getStyle();
+    field public static final androidx.ui.graphics.MaskFilter.Companion! Companion;
+    field public static final int TYPE_BLUR = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+  }
+
+  public static final class MaskFilter.Companion {
+  }
+
+  public final class Paint {
+    ctor public Paint();
+    method public android.graphics.Paint asFrameworkPaint();
+    method public float getAlpha();
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.graphics.ColorFilter? getColorFilter();
+    method public androidx.ui.graphics.FilterQuality getFilterQuality();
+    method public androidx.ui.graphics.MaskFilter getMaskFilter();
+    method public androidx.ui.graphics.Shader? getShader();
+    method public androidx.ui.graphics.StrokeCap getStrokeCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeJoin();
+    method public float getStrokeMiterLimit();
+    method public float getStrokeWidth();
+    method public androidx.ui.graphics.PaintingStyle getStyle();
+    method public boolean isAntiAlias();
+    method public void setAlpha(float value);
+    method public void setAntiAlias(boolean value);
+    method public void setBlendMode(androidx.ui.graphics.BlendMode value);
+    method public void setColor(androidx.ui.graphics.Color color);
+    method public void setColorFilter(androidx.ui.graphics.ColorFilter? value);
+    method public void setFilterQuality(androidx.ui.graphics.FilterQuality value);
+    method public void setMaskFilter(androidx.ui.graphics.MaskFilter value);
+    method public void setShader(androidx.ui.graphics.Shader? value);
+    method public void setStrokeCap(androidx.ui.graphics.StrokeCap value);
+    method public void setStrokeJoin(androidx.ui.graphics.StrokeJoin value);
+    method public void setStrokeMiterLimit(float value);
+    method public void setStrokeWidth(float value);
+    method public void setStyle(androidx.ui.graphics.PaintingStyle value);
+    property public final float alpha;
+    property public final androidx.ui.graphics.BlendMode blendMode;
+    property public final androidx.ui.graphics.Color color;
+    property public final androidx.ui.graphics.ColorFilter? colorFilter;
+    property public final androidx.ui.graphics.FilterQuality filterQuality;
+    property public final boolean isAntiAlias;
+    property public final androidx.ui.graphics.MaskFilter maskFilter;
+    property public final androidx.ui.graphics.Shader? shader;
+    property public final androidx.ui.graphics.StrokeCap strokeCap;
+    property public final androidx.ui.graphics.StrokeJoin strokeJoin;
+    property public final float strokeMiterLimit;
+    property public final float strokeWidth;
+    property public final androidx.ui.graphics.PaintingStyle style;
+  }
+
+  public enum PaintingStyle {
+    enum_constant public static final androidx.ui.graphics.PaintingStyle fill;
+    enum_constant public static final androidx.ui.graphics.PaintingStyle stroke;
+  }
+
+  public final class Path {
+    ctor public Path(android.graphics.Path internalPath);
+    ctor public Path();
+    method public void _addRect(float left, float top, float right, float bottom);
+    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.ui.engine.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
+    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
+    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void addRect(androidx.ui.engine.geometry.Rect rect);
+    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void close();
+    method public void conicTo(float x1, float y1, float x2, float y2, float w);
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void extendWithPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
+    method public androidx.ui.engine.geometry.Rect getBounds();
+    method public androidx.ui.graphics.PathFillType getFillType();
+    method public boolean isConvex();
+    method public boolean isEmpty();
+    method public void lineTo(float dx, float dy);
+    method public void moveTo(float dx, float dy);
+    method public boolean op(androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2, androidx.ui.graphics.PathOperation operation);
+    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
+    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void relativeLineTo(float dx, float dy);
+    method public void relativeMoveTo(float dx, float dy);
+    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void reset();
+    method public void setFillType(androidx.ui.graphics.PathFillType value);
+    method public void shift(androidx.ui.engine.geometry.Offset offset);
+    method public android.graphics.Path toFrameworkPath();
+    method public androidx.ui.graphics.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
+    property public final boolean isConvex;
+    property public final boolean isEmpty;
+    field public static final androidx.ui.graphics.Path.Companion! Companion;
+  }
+
+  public static final class Path.Companion {
+    method public androidx.ui.graphics.Path combine(androidx.ui.graphics.PathOperation operation, androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2);
+  }
+
+  public enum PathFillType {
+    enum_constant public static final androidx.ui.graphics.PathFillType evenOdd;
+    enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
+  }
+
+  public enum PathOperation {
+    enum_constant public static final androidx.ui.graphics.PathOperation difference;
+    enum_constant public static final androidx.ui.graphics.PathOperation intersect;
+    enum_constant public static final androidx.ui.graphics.PathOperation reverseDifference;
+    enum_constant public static final androidx.ui.graphics.PathOperation union;
+    enum_constant public static final androidx.ui.graphics.PathOperation xor;
+  }
+
+  public final class Picture {
+    ctor public Picture(android.graphics.Picture frameworkPicture);
+    method public androidx.ui.engine.geometry.Rect cullRect();
+    method public void dispose();
+    method public android.graphics.Picture getFrameworkPicture();
+  }
+
+  public final class PictureRecorder {
+    ctor public PictureRecorder();
+    method public androidx.ui.graphics.Picture endRecording();
+    method public boolean isRecording();
+    property public final boolean isRecording;
+  }
+
+  public enum PointMode {
+    enum_constant public static final androidx.ui.graphics.PointMode lines;
+    enum_constant public static final androidx.ui.graphics.PointMode points;
+    enum_constant public static final androidx.ui.graphics.PointMode polygon;
+  }
+
+  public final class RadialGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class Shader {
+    ctor public Shader(android.graphics.Shader nativeShader);
+    method public android.graphics.Shader getNativeShader();
+  }
+
+  public class ShaderBrush implements androidx.ui.graphics.Brush {
+    ctor public ShaderBrush(androidx.ui.graphics.Shader shader);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public final androidx.ui.graphics.Shader getShader();
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static androidx.ui.graphics.Shader ImageShader(androidx.ui.graphics.Image image, androidx.ui.graphics.TileMode tileModeX = TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public final class Shadow {
+    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    ctor public Shadow();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Offset component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.graphics.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    method public androidx.ui.core.Px getBlurRadius();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.engine.geometry.Offset getOffset();
+  }
+
+  public final class ShadowKt {
+    ctor public ShadowKt();
+    method public static androidx.ui.graphics.Shadow lerp(androidx.ui.graphics.Shadow a, androidx.ui.graphics.Shadow b, float t);
   }
 
   public final class SolidColor implements androidx.ui.graphics.Brush {
     ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.SolidColor copy(androidx.ui.graphics.Color value);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public androidx.ui.graphics.Color getValue();
+  }
+
+  public enum StrokeCap {
+    enum_constant public static final androidx.ui.graphics.StrokeCap butt;
+    enum_constant public static final androidx.ui.graphics.StrokeCap round;
+    enum_constant public static final androidx.ui.graphics.StrokeCap square;
+  }
+
+  public enum StrokeJoin {
+    enum_constant public static final androidx.ui.graphics.StrokeJoin bevel;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin miter;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin round;
+  }
+
+  public enum TileMode {
+    method public final android.graphics.Shader.TileMode getNativeTileMode();
+    enum_constant public static final androidx.ui.graphics.TileMode Clamp;
+    enum_constant public static final androidx.ui.graphics.TileMode Mirror;
+    enum_constant public static final androidx.ui.graphics.TileMode Repeated;
+  }
+
+  public final class TileModeKt {
+    ctor public TileModeKt();
+    method public static android.graphics.Shader.TileMode NativeClampTileMode();
+    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
+    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
   }
 
 }
@@ -1468,7 +1852,7 @@
     method public void clear();
     method public androidx.ui.graphics.vector.PathParser parsePathString(String pathData);
     method public androidx.ui.graphics.vector.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = androidx.ui.painting.Path());
+    method public androidx.ui.graphics.Path toPath(androidx.ui.graphics.Path target = androidx.ui.graphics.Path());
   }
 
   public final class PathParserKt {
@@ -1477,363 +1861,6 @@
 
 }
 
-package androidx.ui.painting {
-
-  public final class AndroidCanvasKt {
-    ctor public AndroidCanvasKt();
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.Image image);
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
-    method public static androidx.ui.painting.Canvas Canvas(android.graphics.Canvas c);
-  }
-
-  public final class AndroidImageKt {
-    ctor public AndroidImageKt();
-    method public static androidx.ui.painting.Image Image(int width, int height, androidx.ui.painting.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method public static androidx.ui.painting.Image imageFromResource(android.content.res.Resources res, int resId);
-  }
-
-  public enum BlendMode {
-    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
-    enum_constant public static final androidx.ui.painting.BlendMode clear;
-    enum_constant public static final androidx.ui.painting.BlendMode color;
-    enum_constant public static final androidx.ui.painting.BlendMode colorBurn;
-    enum_constant public static final androidx.ui.painting.BlendMode colorDodge;
-    enum_constant public static final androidx.ui.painting.BlendMode darken;
-    enum_constant public static final androidx.ui.painting.BlendMode difference;
-    enum_constant public static final androidx.ui.painting.BlendMode dst;
-    enum_constant public static final androidx.ui.painting.BlendMode dstATop;
-    enum_constant public static final androidx.ui.painting.BlendMode dstIn;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOut;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOver;
-    enum_constant public static final androidx.ui.painting.BlendMode exclusion;
-    enum_constant public static final androidx.ui.painting.BlendMode hardLight;
-    enum_constant public static final androidx.ui.painting.BlendMode hue;
-    enum_constant public static final androidx.ui.painting.BlendMode lighten;
-    enum_constant public static final androidx.ui.painting.BlendMode luminosity;
-    enum_constant public static final androidx.ui.painting.BlendMode modulate;
-    enum_constant public static final androidx.ui.painting.BlendMode multiply;
-    enum_constant public static final androidx.ui.painting.BlendMode overlay;
-    enum_constant public static final androidx.ui.painting.BlendMode plus;
-    enum_constant public static final androidx.ui.painting.BlendMode saturation;
-    enum_constant public static final androidx.ui.painting.BlendMode screen;
-    enum_constant public static final androidx.ui.painting.BlendMode softLight;
-    enum_constant public static final androidx.ui.painting.BlendMode src;
-    enum_constant public static final androidx.ui.painting.BlendMode srcATop;
-    enum_constant public static final androidx.ui.painting.BlendMode srcIn;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOut;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOver;
-    enum_constant public static final androidx.ui.painting.BlendMode xor;
-  }
-
-  public enum BlurStyle {
-    enum_constant public static final androidx.ui.painting.BlurStyle inner;
-    enum_constant public static final androidx.ui.painting.BlurStyle normal;
-    enum_constant public static final androidx.ui.painting.BlurStyle outer;
-    enum_constant public static final androidx.ui.painting.BlurStyle solid;
-  }
-
-  public interface Canvas {
-    method public void clipPath(androidx.ui.painting.Path path);
-    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.ClipOp clipOp = ClipOp.intersect);
-    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
-    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.painting.Paint paint);
-    method public void drawDRRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.painting.Paint paint);
-    method public void drawImage(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.painting.Paint paint);
-    method public void drawImageRect(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.painting.Paint paint);
-    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.painting.Paint paint);
-    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawPath(androidx.ui.painting.Path path, androidx.ui.painting.Paint paint);
-    method public void drawPicture(androidx.ui.painting.Picture picture);
-    method public void drawPoints(androidx.ui.painting.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.painting.Paint paint);
-    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.painting.Paint paint);
-    method public void drawRawPoints(androidx.ui.painting.PointMode pointMode, float[] points, androidx.ui.painting.Paint paint);
-    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.painting.BlendMode blendMode, androidx.ui.painting.Paint paint);
-    method public android.graphics.Canvas getNativeCanvas();
-    method public void restore();
-    method public void rotate(float degrees);
-    method public default void rotateRad(float radians);
-    method public void save();
-    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint);
-    method public void scale(float sx, float sy = sx);
-    method public void skew(float sx, float sy);
-    method public default void skewRad(float sxRad, float syRad);
-    method public void translate(float dx, float dy);
-    property public abstract android.graphics.Canvas nativeCanvas;
-  }
-
-  public final class CanvasKt {
-    ctor public CanvasKt();
-    method public static inline void withSave(androidx.ui.painting.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-  }
-
-  public enum ClipOp {
-    enum_constant public static final androidx.ui.painting.ClipOp difference;
-    enum_constant public static final androidx.ui.painting.ClipOp intersect;
-  }
-
-  public final class ColorFilter {
-    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.painting.BlendMode component2();
-    method public androidx.ui.painting.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-  }
-
-  public enum FilterQuality {
-    enum_constant public static final androidx.ui.painting.FilterQuality high;
-    enum_constant public static final androidx.ui.painting.FilterQuality low;
-    enum_constant public static final androidx.ui.painting.FilterQuality medium;
-    enum_constant public static final androidx.ui.painting.FilterQuality none;
-  }
-
-  public interface Image {
-    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
-    method public androidx.ui.painting.ImageConfig getConfig();
-    method public boolean getHasAlpha();
-    method public int getHeight();
-    method public android.graphics.Bitmap getNativeImage();
-    method public int getWidth();
-    method public void prepareToDraw();
-    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
-    property public abstract androidx.ui.painting.ImageConfig config;
-    property public abstract boolean hasAlpha;
-    property public abstract int height;
-    property public abstract android.graphics.Bitmap nativeImage;
-    property public abstract int width;
-  }
-
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.painting.ImageByteFormat png;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawUnmodified;
-  }
-
-  public enum ImageConfig {
-    enum_constant public static final androidx.ui.painting.ImageConfig Alpha8;
-    enum_constant public static final androidx.ui.painting.ImageConfig Argb8888;
-    enum_constant public static final androidx.ui.painting.ImageConfig F16;
-    enum_constant public static final androidx.ui.painting.ImageConfig Gpu;
-    enum_constant public static final androidx.ui.painting.ImageConfig Rgb565;
-  }
-
-  public final class ImageKt {
-    ctor public ImageKt();
-  }
-
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.painting.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatY;
-  }
-
-  public final class MaskFilter {
-    ctor public MaskFilter(androidx.ui.painting.BlurStyle style, float sigma);
-    method public androidx.ui.painting.BlurStyle component1();
-    method public float component2();
-    method public androidx.ui.painting.MaskFilter copy(androidx.ui.painting.BlurStyle style, float sigma);
-    method public float getSigma();
-    method public androidx.ui.painting.BlurStyle getStyle();
-    field public static final androidx.ui.painting.MaskFilter.Companion! Companion;
-    field public static final int TYPE_BLUR = 1; // 0x1
-    field public static final int TYPE_NONE = 0; // 0x0
-  }
-
-  public static final class MaskFilter.Companion {
-  }
-
-  public final class Paint {
-    ctor public Paint();
-    method public android.graphics.Paint asFrameworkPaint();
-    method public float getAlpha();
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.painting.ColorFilter? getColorFilter();
-    method public androidx.ui.painting.FilterQuality getFilterQuality();
-    method public androidx.ui.painting.MaskFilter getMaskFilter();
-    method public androidx.ui.painting.Shader? getShader();
-    method public androidx.ui.painting.StrokeCap getStrokeCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeJoin();
-    method public float getStrokeMiterLimit();
-    method public float getStrokeWidth();
-    method public androidx.ui.painting.PaintingStyle getStyle();
-    method public boolean isAntiAlias();
-    method public void setAlpha(float value);
-    method public void setAntiAlias(boolean value);
-    method public void setBlendMode(androidx.ui.painting.BlendMode value);
-    method public void setColor(androidx.ui.graphics.Color color);
-    method public void setColorFilter(androidx.ui.painting.ColorFilter? value);
-    method public void setFilterQuality(androidx.ui.painting.FilterQuality value);
-    method public void setMaskFilter(androidx.ui.painting.MaskFilter value);
-    method public void setShader(androidx.ui.painting.Shader? value);
-    method public void setStrokeCap(androidx.ui.painting.StrokeCap value);
-    method public void setStrokeJoin(androidx.ui.painting.StrokeJoin value);
-    method public void setStrokeMiterLimit(float value);
-    method public void setStrokeWidth(float value);
-    method public void setStyle(androidx.ui.painting.PaintingStyle value);
-    property public final float alpha;
-    property public final androidx.ui.painting.BlendMode blendMode;
-    property public final androidx.ui.graphics.Color color;
-    property public final androidx.ui.painting.ColorFilter? colorFilter;
-    property public final androidx.ui.painting.FilterQuality filterQuality;
-    property public final boolean isAntiAlias;
-    property public final androidx.ui.painting.MaskFilter maskFilter;
-    property public final androidx.ui.painting.Shader? shader;
-    property public final androidx.ui.painting.StrokeCap strokeCap;
-    property public final androidx.ui.painting.StrokeJoin strokeJoin;
-    property public final float strokeMiterLimit;
-    property public final float strokeWidth;
-    property public final androidx.ui.painting.PaintingStyle style;
-  }
-
-  public enum PaintingStyle {
-    enum_constant public static final androidx.ui.painting.PaintingStyle fill;
-    enum_constant public static final androidx.ui.painting.PaintingStyle stroke;
-  }
-
-  public final class Path {
-    ctor public Path(android.graphics.Path internalPath);
-    ctor public Path();
-    method public void _addRect(float left, float top, float right, float bottom);
-    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.engine.geometry.Rect oval);
-    method public void addPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
-    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
-    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void addRect(androidx.ui.engine.geometry.Rect rect);
-    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
-    method public void close();
-    method public void conicTo(float x1, float y1, float x2, float y2, float w);
-    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
-    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void extendWithPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
-    method public androidx.ui.engine.geometry.Rect getBounds();
-    method public androidx.ui.painting.PathFillType getFillType();
-    method public boolean isConvex();
-    method public boolean isEmpty();
-    method public void lineTo(float dx, float dy);
-    method public void moveTo(float dx, float dy);
-    method public boolean op(androidx.ui.painting.Path path1, androidx.ui.painting.Path path2, androidx.ui.painting.PathOperation operation);
-    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
-    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void relativeLineTo(float dx, float dy);
-    method public void relativeMoveTo(float dx, float dy);
-    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void reset();
-    method public void setFillType(androidx.ui.painting.PathFillType value);
-    method public void shift(androidx.ui.engine.geometry.Offset offset);
-    method public android.graphics.Path toFrameworkPath();
-    method public androidx.ui.painting.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
-    property public final boolean isConvex;
-    property public final boolean isEmpty;
-    field public static final androidx.ui.painting.Path.Companion! Companion;
-  }
-
-  public static final class Path.Companion {
-    method public androidx.ui.painting.Path combine(androidx.ui.painting.PathOperation operation, androidx.ui.painting.Path path1, androidx.ui.painting.Path path2);
-  }
-
-  public enum PathFillType {
-    enum_constant public static final androidx.ui.painting.PathFillType evenOdd;
-    enum_constant public static final androidx.ui.painting.PathFillType nonZero;
-  }
-
-  public enum PathOperation {
-    enum_constant public static final androidx.ui.painting.PathOperation difference;
-    enum_constant public static final androidx.ui.painting.PathOperation intersect;
-    enum_constant public static final androidx.ui.painting.PathOperation reverseDifference;
-    enum_constant public static final androidx.ui.painting.PathOperation union;
-    enum_constant public static final androidx.ui.painting.PathOperation xor;
-  }
-
-  public final class Picture {
-    ctor public Picture(android.graphics.Picture frameworkPicture);
-    method public androidx.ui.engine.geometry.Rect cullRect();
-    method public void dispose();
-    method public android.graphics.Picture getFrameworkPicture();
-  }
-
-  public final class PictureRecorder {
-    ctor public PictureRecorder();
-    method public androidx.ui.painting.Picture endRecording();
-    method public boolean isRecording();
-    property public final boolean isRecording;
-  }
-
-  public enum PointMode {
-    enum_constant public static final androidx.ui.painting.PointMode lines;
-    enum_constant public static final androidx.ui.painting.PointMode points;
-    enum_constant public static final androidx.ui.painting.PointMode polygon;
-  }
-
-  public final class Shader {
-    ctor public Shader(android.graphics.Shader nativeShader);
-    method public android.graphics.Shader getNativeShader();
-  }
-
-  public final class ShaderKt {
-    ctor public ShaderKt();
-    method public static androidx.ui.painting.Shader ImageShader(androidx.ui.painting.Image image, androidx.ui.painting.TileMode tileModeX = TileMode.Clamp, androidx.ui.painting.TileMode tileModeY = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-  }
-
-  public final class Shadow {
-    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    ctor public Shadow();
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.engine.geometry.Offset component2();
-    method public androidx.ui.core.Px component3();
-    method public androidx.ui.painting.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    method public androidx.ui.core.Px getBlurRadius();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.engine.geometry.Offset getOffset();
-  }
-
-  public final class ShadowKt {
-    ctor public ShadowKt();
-    method public static androidx.ui.painting.Shadow lerp(androidx.ui.painting.Shadow a, androidx.ui.painting.Shadow b, float t);
-  }
-
-  public enum StrokeCap {
-    enum_constant public static final androidx.ui.painting.StrokeCap butt;
-    enum_constant public static final androidx.ui.painting.StrokeCap round;
-    enum_constant public static final androidx.ui.painting.StrokeCap square;
-  }
-
-  public enum StrokeJoin {
-    enum_constant public static final androidx.ui.painting.StrokeJoin bevel;
-    enum_constant public static final androidx.ui.painting.StrokeJoin miter;
-    enum_constant public static final androidx.ui.painting.StrokeJoin round;
-  }
-
-  public enum TileMode {
-    method public final android.graphics.Shader.TileMode getNativeTileMode();
-    enum_constant public static final androidx.ui.painting.TileMode Clamp;
-    enum_constant public static final androidx.ui.painting.TileMode Mirror;
-    enum_constant public static final androidx.ui.painting.TileMode Repeated;
-  }
-
-  public final class TileModeKt {
-    ctor public TileModeKt();
-    method public static android.graphics.Shader.TileMode NativeClampTileMode();
-    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
-    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
-  }
-
-}
-
 package androidx.ui.semantics {
 
   public final class AccessibilityAction<T extends kotlin.Function<? extends kotlin.Unit>> {
diff --git a/ui/ui-core/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-core/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..c0314f3
--- /dev/null
+++ b/ui/ui-core/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,2548 @@
+// Signature format: 3.0
+package androidx.ui {
+
+  public final class MathHelpersKt {
+    ctor public MathHelpersKt();
+    method public static float lerp(float a, float b, float t);
+    method public static float lerp(int a, int b, float t);
+    method public static String toHexString(int);
+    method public static String toStringAsFixed(float, int digits);
+  }
+
+  public enum VertexMode {
+    method public final android.graphics.Canvas.VertexMode toFrameworkVertexMode();
+    enum_constant public static final androidx.ui.VertexMode triangleFan;
+    enum_constant public static final androidx.ui.VertexMode triangleStrip;
+    enum_constant public static final androidx.ui.VertexMode triangles;
+  }
+
+  public final class Vertices {
+    ctor public Vertices(androidx.ui.VertexMode vertexMode, java.util.List<androidx.ui.engine.geometry.Offset> positions, java.util.List<androidx.ui.engine.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+    method public int[] getColors();
+    method public short[] getIndices();
+    method public float[] getPositions();
+    method public float[] getTextureCoordinates();
+    method public androidx.ui.VertexMode getVertexMode();
+    property public final int[] colors;
+    property public final short[] indices;
+    property public final float[] positions;
+    property public final float[] textureCoordinates;
+  }
+
+}
+
+package androidx.ui.autofill {
+
+  public interface Autofill {
+    method public void cancelAutofillForNode(androidx.ui.autofill.AutofillNode autofillNode);
+    method public void requestAutofillForNode(androidx.ui.autofill.AutofillNode autofillNode);
+  }
+
+  public final class AutofillNode {
+    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, android.graphics.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public java.util.List<androidx.ui.autofill.AutofillType> component1();
+    method public android.graphics.Rect? component2();
+    method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? component3();
+    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, android.graphics.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public java.util.List<androidx.ui.autofill.AutofillType> getAutofillTypes();
+    method public android.graphics.Rect? getBoundingBox();
+    method public int getId();
+    method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
+    method public void setBoundingBox(android.graphics.Rect? p);
+    property public final int id;
+  }
+
+  public final class AutofillTree {
+    ctor public AutofillTree();
+    method public java.util.Map<java.lang.Integer,androidx.ui.autofill.AutofillNode> getChildren();
+    method public kotlin.Unit? performAutofill(int id, String value);
+    method public operator void plusAssign(androidx.ui.autofill.AutofillNode autofillNode);
+    property public final java.util.Map<java.lang.Integer,androidx.ui.autofill.AutofillNode> children;
+  }
+
+  public enum AutofillType {
+    enum_constant public static final androidx.ui.autofill.AutofillType EmailAddress;
+    enum_constant public static final androidx.ui.autofill.AutofillType Name;
+  }
+
+}
+
+package androidx.ui.core {
+
+  public abstract sealed class AlignmentLine {
+    method public final boolean getHorizontal();
+  }
+
+  public final class AlignmentLineKt {
+    ctor public AlignmentLineKt();
+    method public static androidx.ui.core.IntPx merge(androidx.ui.core.AlignmentLine, androidx.ui.core.IntPx position1, androidx.ui.core.IntPx position2);
+  }
+
+  public final class Bounds {
+    ctor public Bounds(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.core.Bounds copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+  }
+
+  public final class Constraints {
+    ctor public Constraints(androidx.ui.core.IntPx minWidth, androidx.ui.core.IntPx maxWidth, androidx.ui.core.IntPx minHeight, androidx.ui.core.IntPx maxHeight);
+    ctor public Constraints();
+    method public androidx.ui.core.IntPx component1();
+    method public androidx.ui.core.IntPx component2();
+    method public androidx.ui.core.IntPx component3();
+    method public androidx.ui.core.IntPx component4();
+    method public androidx.ui.core.Constraints copy(androidx.ui.core.IntPx minWidth, androidx.ui.core.IntPx maxWidth, androidx.ui.core.IntPx minHeight, androidx.ui.core.IntPx maxHeight);
+    method public androidx.ui.core.IntPx getMaxHeight();
+    method public androidx.ui.core.IntPx getMaxWidth();
+    method public androidx.ui.core.IntPx getMinHeight();
+    method public androidx.ui.core.IntPx getMinWidth();
+    field public static final androidx.ui.core.Constraints.Companion! Companion;
+  }
+
+  public static final class Constraints.Companion {
+    method public androidx.ui.core.Constraints tightConstraints(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints tightConstraintsForHeight(androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Constraints tightConstraintsForWidth(androidx.ui.core.IntPx width);
+  }
+
+  public final class ConstraintsKt {
+    ctor public ConstraintsKt();
+    method public static androidx.ui.core.IntPxSize constrain(androidx.ui.core.Constraints, androidx.ui.core.IntPxSize size);
+    method public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
+    method public static boolean getHasBoundedHeight(androidx.ui.core.Constraints);
+    method public static boolean getHasBoundedWidth(androidx.ui.core.Constraints);
+    method public static boolean getHasTightHeight(androidx.ui.core.Constraints);
+    method public static boolean getHasTightWidth(androidx.ui.core.Constraints);
+    method public static boolean isTight(androidx.ui.core.Constraints);
+    method public static boolean isZero(androidx.ui.core.Constraints);
+    method public static androidx.ui.core.Constraints looseMax(androidx.ui.core.Constraints);
+    method public static androidx.ui.core.Constraints looseMin(androidx.ui.core.Constraints);
+    method public static androidx.ui.core.Constraints offset(androidx.ui.core.Constraints, androidx.ui.core.IntPx horizontal = 0.ipx, androidx.ui.core.IntPx vertical = 0.ipx);
+    method public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.core.IntPxSize size);
+    method public static androidx.ui.core.Constraints tightMax(androidx.ui.core.Constraints);
+    method public static androidx.ui.core.Constraints tightMin(androidx.ui.core.Constraints);
+    method public static androidx.ui.core.Constraints withTight(androidx.ui.core.Constraints, androidx.ui.core.IntPx? width = null, androidx.ui.core.IntPx? height = null);
+  }
+
+  public final class ConsumedData {
+    ctor public ConsumedData(androidx.ui.core.PxPosition positionChange, boolean downChange);
+    ctor public ConsumedData();
+    method public androidx.ui.core.PxPosition component1();
+    method public boolean component2();
+    method public androidx.ui.core.ConsumedData copy(androidx.ui.core.PxPosition positionChange, boolean downChange);
+    method public boolean getDownChange();
+    method public androidx.ui.core.PxPosition getPositionChange();
+  }
+
+  public final class Density {
+    ctor public Density(float density, float fontScale);
+    method public float component1();
+    method public float component2();
+    method public androidx.ui.core.Density copy(float density, float fontScale);
+    method public float getDensity();
+    method public float getFontScale();
+  }
+
+  public final class DensityKt {
+    ctor public DensityKt();
+    method public static androidx.ui.core.Density Density(android.content.Context context);
+    method public static <R> R! withDensity(androidx.ui.core.Density density, kotlin.jvm.functions.Function1<? super androidx.ui.core.DensityReceiver,? extends R> block);
+  }
+
+  public interface DensityReceiver {
+    method public androidx.ui.core.Density getDensity();
+    method public default androidx.ui.core.Dp toDp(androidx.ui.core.Sp);
+    method public default androidx.ui.core.Dp toDp(androidx.ui.core.Px);
+    method public default androidx.ui.core.Dp toDp(androidx.ui.core.IntPx);
+    method public default androidx.ui.core.Dp toDp(float);
+    method public default androidx.ui.core.Dp toDp(int);
+    method public default androidx.ui.core.IntPx toIntPx(androidx.ui.core.Dp);
+    method public default androidx.ui.core.IntPx toIntPx(androidx.ui.core.Sp);
+    method public default androidx.ui.core.Px toPx(androidx.ui.core.Dp);
+    method public default androidx.ui.core.Px toPx(androidx.ui.core.Sp);
+    method public default androidx.ui.core.PxSize toPx(androidx.ui.core.Size);
+    method public default androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.Bounds);
+    method public default androidx.ui.core.Sp toSp(androidx.ui.core.Dp);
+    method public default androidx.ui.core.Sp toSp(androidx.ui.core.Px);
+    method public default androidx.ui.core.Sp toSp(androidx.ui.core.IntPx);
+    method public default androidx.ui.core.Sp toSp(float);
+    method public default androidx.ui.core.Sp toSp(int);
+    property public abstract androidx.ui.core.Density density;
+  }
+
+  public final class DensityReceiverImpl implements androidx.ui.core.DensityReceiver {
+    ctor public DensityReceiverImpl(androidx.ui.core.Density density);
+    method public androidx.ui.core.Density getDensity();
+  }
+
+  public enum Direction {
+    enum_constant public static final androidx.ui.core.Direction DOWN;
+    enum_constant public static final androidx.ui.core.Direction LEFT;
+    enum_constant public static final androidx.ui.core.Direction RIGHT;
+    enum_constant public static final androidx.ui.core.Direction UP;
+  }
+
+  public final class Dp {
+    ctor public Dp(float value);
+    method public inline operator int compareTo(androidx.ui.core.Dp other);
+    method public float component1();
+    method public androidx.ui.core.Dp copy(float value);
+    method public inline operator androidx.ui.core.Dp div(float other);
+    method public inline operator androidx.ui.core.Dp div(int other);
+    method public inline operator float div(androidx.ui.core.Dp other);
+    method public inline operator float div-KkBJKWw(float other);
+    method public float getValue();
+    method public inline operator androidx.ui.core.Dp minus(androidx.ui.core.Dp other);
+    method public inline operator androidx.ui.core.Dp plus(androidx.ui.core.Dp other);
+    method public inline operator androidx.ui.core.Dp times(float other);
+    method public inline operator androidx.ui.core.Dp times(int other);
+    method public inline operator float times(androidx.ui.core.Dp other);
+    method public inline operator float times-KkBJKWw(float other);
+    method public inline operator androidx.ui.core.Dp unaryMinus();
+    field public static final androidx.ui.core.Dp.Companion! Companion;
+  }
+
+  public static final class Dp.Companion {
+    method public androidx.ui.core.Dp getHairline();
+    method public androidx.ui.core.Dp getInfinity();
+    property public final androidx.ui.core.Dp Hairline;
+    property public final androidx.ui.core.Dp Infinity;
+  }
+
+  public final inline class DpCubed {
+    ctor public DpCubed();
+    method public static inline operator int compareTo-zqpl1kg(float $this, float other);
+    method public static float constructor-impl(float value);
+    method public static inline operator androidx.ui.core.Dp div-KkBJKWw(float $this, float other);
+    method public static inline operator float div-impl(float $this, float other);
+    method public static inline operator float div-impl(float $this, androidx.ui.core.Dp other);
+    method public static inline operator float div-zqpl1kg(float $this, float other);
+    method public static boolean equals-impl(float p, Object? p1);
+    method public static boolean equals-impl0(float p1, float p2);
+    method public float getValue();
+    method public static int hashCode-impl(float p);
+    method public static inline operator float minus-zqpl1kg(float $this, float dimension);
+    method public static inline operator float plus-zqpl1kg(float $this, float dimension);
+    method public static inline operator float times-impl(float $this, float other);
+    method public static String toString-impl(float p);
+  }
+
+  public final inline class DpInverse {
+    ctor public DpInverse();
+    method public static inline operator int compareTo-ASDJgtI(float $this, float other);
+    method public static float constructor-impl(float value);
+    method public static inline operator float div-impl(float $this, float other);
+    method public static boolean equals-impl(float p, Object? p1);
+    method public static boolean equals-impl0(float p1, float p2);
+    method public float getValue();
+    method public static int hashCode-impl(float p);
+    method public static inline operator float minus-ASDJgtI(float $this, float dimension);
+    method public static inline operator float plus-ASDJgtI(float $this, float dimension);
+    method public static inline operator androidx.ui.core.Dp times-KkBJKWw(float $this, float other);
+    method public static inline operator float times-impl(float $this, float other);
+    method public static inline operator float times-impl(float $this, androidx.ui.core.Dp other);
+    method public static inline operator float times-zqpl1kg(float $this, float other);
+    method public static String toString-impl(float p);
+  }
+
+  public final class DpKt {
+    ctor public DpKt();
+    method public static androidx.ui.core.Position center(androidx.ui.core.Size);
+    method public static inline androidx.ui.core.Dp coerceAtLeast(androidx.ui.core.Dp, androidx.ui.core.Dp minimumValue);
+    method public static inline androidx.ui.core.Dp coerceAtMost(androidx.ui.core.Dp, androidx.ui.core.Dp maximumValue);
+    method public static inline androidx.ui.core.Dp coerceIn(androidx.ui.core.Dp, androidx.ui.core.Dp minimumValue, androidx.ui.core.Dp maximumValue);
+    method public static inline operator float div(float, androidx.ui.core.Dp other);
+    method public static inline operator float div(double, androidx.ui.core.Dp other);
+    method public static inline operator float div(int, androidx.ui.core.Dp other);
+    method public static androidx.ui.core.Dp getDistance(androidx.ui.core.Position);
+    method public static inline androidx.ui.core.Dp getDp(int);
+    method public static inline androidx.ui.core.Dp getDp(double);
+    method public static inline androidx.ui.core.Dp getDp(float);
+    method public static inline androidx.ui.core.Dp getHeight(androidx.ui.core.Bounds);
+    method public static inline androidx.ui.core.Dp getWidth(androidx.ui.core.Bounds);
+    method public static inline boolean isFinite(androidx.ui.core.Dp);
+    method public static androidx.ui.core.Dp lerp(androidx.ui.core.Dp a, androidx.ui.core.Dp b, float t);
+    method public static androidx.ui.core.Position lerp(androidx.ui.core.Position a, androidx.ui.core.Position b, float t);
+    method public static inline androidx.ui.core.Dp max(androidx.ui.core.Dp a, androidx.ui.core.Dp b);
+    method public static inline androidx.ui.core.Dp min(androidx.ui.core.Dp a, androidx.ui.core.Dp b);
+    method public static inline operator androidx.ui.core.Dp times(float, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Dp times(double, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Dp times(int, androidx.ui.core.Dp other);
+    method public static androidx.ui.core.Bounds toBounds(androidx.ui.core.Size);
+    method public static inline androidx.ui.core.Size toSize(androidx.ui.core.Bounds);
+  }
+
+  public final inline class DpSquared {
+    ctor public DpSquared();
+    method public static inline operator int compareTo-KkBJKWw(float $this, float other);
+    method public static float constructor-impl(float value);
+    method public static inline operator float div-KkBJKWw(float $this, float other);
+    method public static inline operator float div-impl(float $this, float other);
+    method public static inline operator androidx.ui.core.Dp div-impl(float $this, androidx.ui.core.Dp other);
+    method public static inline operator float div-zqpl1kg(float $this, float other);
+    method public static boolean equals-impl(float p, Object? p1);
+    method public static boolean equals-impl0(float p1, float p2);
+    method public float getValue();
+    method public static int hashCode-impl(float p);
+    method public static inline operator float minus-KkBJKWw(float $this, float other);
+    method public static inline operator float plus-KkBJKWw(float $this, float other);
+    method public static inline operator float times-impl(float $this, float other);
+    method public static inline operator float times-impl(float $this, androidx.ui.core.Dp other);
+    method public static String toString-impl(float p);
+  }
+
+  public interface DrawReceiver extends androidx.ui.core.DensityReceiver {
+    method public void drawChildren();
+  }
+
+  public final class Duration implements java.lang.Comparable<androidx.ui.core.Duration> {
+    ctor public Duration(long nanoseconds);
+    method public int compareTo(androidx.ui.core.Duration other);
+    method public long component1();
+    method public androidx.ui.core.Duration copy(long nanoseconds);
+    method public operator androidx.ui.core.Duration div(int quotient);
+    method public operator androidx.ui.core.Duration div(double quotient);
+    method public long getNanoseconds();
+    method public operator androidx.ui.core.Duration minus(androidx.ui.core.Duration other);
+    method public operator androidx.ui.core.Duration plus(androidx.ui.core.Duration other);
+    method public operator androidx.ui.core.Timestamp plus(androidx.ui.core.Timestamp timestamp);
+    method public operator androidx.ui.core.Duration times(int factor);
+    method public operator androidx.ui.core.Duration times(double factor);
+    field public static final androidx.ui.core.Duration.Companion! Companion;
+  }
+
+  public static final class Duration.Companion {
+    method public androidx.ui.core.Duration getZero();
+    property public final androidx.ui.core.Duration Zero;
+  }
+
+  public final class Durations {
+    ctor public Durations();
+    method public static androidx.ui.core.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
+    method public static androidx.ui.core.Duration getDays(long);
+    method public static androidx.ui.core.Duration getDays(int);
+    method public static androidx.ui.core.Duration getHours(long);
+    method public static androidx.ui.core.Duration getHours(int);
+    method public static androidx.ui.core.Duration getMicroseconds(long);
+    method public static androidx.ui.core.Duration getMicroseconds(int);
+    method public static androidx.ui.core.Duration getMilliseconds(long);
+    method public static androidx.ui.core.Duration getMilliseconds(int);
+    method public static androidx.ui.core.Duration getMinutes(long);
+    method public static androidx.ui.core.Duration getMinutes(int);
+    method public static androidx.ui.core.Duration getNanoseconds(long);
+    method public static androidx.ui.core.Duration getNanoseconds(int);
+    method public static androidx.ui.core.Duration getSeconds(long);
+    method public static androidx.ui.core.Duration getSeconds(int);
+    method public static long inDays(androidx.ui.core.Duration);
+    method public static long inHours(androidx.ui.core.Duration);
+    method public static long inMicroseconds(androidx.ui.core.Duration);
+    method public static long inMilliseconds(androidx.ui.core.Duration);
+    method public static long inMinutes(androidx.ui.core.Duration);
+    method public static long inSeconds(androidx.ui.core.Duration);
+    field public static final long HoursPerDay = 24L; // 0x18L
+    field public static final long MicrosecondsPerMillisecond = 1000L; // 0x3e8L
+    field public static final long MillisecondsPerSecond = 1000L; // 0x3e8L
+    field public static final long MinutesPerHour = 60L; // 0x3cL
+    field public static final long NanosecondsPerDay = 86400000000000L; // 0x4e94914f0000L
+    field public static final long NanosecondsPerHour = 3600000000000L; // 0x34630b8a000L
+    field public static final long NanosecondsPerMicrosecond = 1000L; // 0x3e8L
+    field public static final long NanosecondsPerMillisecond = 1000000L; // 0xf4240L
+    field public static final long NanosecondsPerMinute = 60000000000L; // 0xdf8475800L
+    field public static final long NanosecondsPerSecond = 1000000000L; // 0x3b9aca00L
+    field public static final long SecondsPerMinute = 60L; // 0x3cL
+  }
+
+  public final class HorizontalAlignmentLine extends androidx.ui.core.AlignmentLine {
+    ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super androidx.ui.core.IntPx,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> merger);
+  }
+
+  public final class IntPx {
+    ctor public IntPx(int value);
+    method public inline operator int compareTo(androidx.ui.core.IntPx other);
+    method public int component1();
+    method public androidx.ui.core.IntPx copy(int value);
+    method public operator androidx.ui.core.IntPx div(float other);
+    method public operator androidx.ui.core.IntPx div(double other);
+    method public operator androidx.ui.core.IntPx div(int other);
+    method public int getValue();
+    method public operator androidx.ui.core.IntPx minus(androidx.ui.core.IntPx other);
+    method public operator androidx.ui.core.IntPx plus(androidx.ui.core.IntPx other);
+    method public operator androidx.ui.core.IntPx times(float other);
+    method public operator androidx.ui.core.IntPx times(double other);
+    method public operator androidx.ui.core.IntPx times(int other);
+    method public operator androidx.ui.core.IntPx unaryMinus();
+    field public static final androidx.ui.core.IntPx.Companion! Companion;
+  }
+
+  public static final class IntPx.Companion {
+    method public androidx.ui.core.IntPx getInfinity();
+    method public androidx.ui.core.IntPx getZero();
+    property public final androidx.ui.core.IntPx Infinity;
+    property public final androidx.ui.core.IntPx Zero;
+  }
+
+  public final class IntPxBounds {
+    ctor public IntPxBounds(androidx.ui.core.IntPx left, androidx.ui.core.IntPx top, androidx.ui.core.IntPx right, androidx.ui.core.IntPx bottom);
+    method public androidx.ui.core.IntPx component1();
+    method public androidx.ui.core.IntPx component2();
+    method public androidx.ui.core.IntPx component3();
+    method public androidx.ui.core.IntPx component4();
+    method public androidx.ui.core.IntPxBounds copy(androidx.ui.core.IntPx left, androidx.ui.core.IntPx top, androidx.ui.core.IntPx right, androidx.ui.core.IntPx bottom);
+    method public androidx.ui.core.IntPx getBottom();
+    method public androidx.ui.core.IntPx getLeft();
+    method public androidx.ui.core.IntPx getRight();
+    method public androidx.ui.core.IntPx getTop();
+  }
+
+  public final class IntPxKt {
+    ctor public IntPxKt();
+    method public static inline androidx.ui.core.PxPosition PxPosition(androidx.ui.core.IntPx x, androidx.ui.core.IntPx y);
+    method public static inline androidx.ui.core.PxSize PxSize(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public static androidx.ui.core.IntPxPosition center(androidx.ui.core.IntPxSize);
+    method public static inline androidx.ui.core.IntPx coerceAtLeast(androidx.ui.core.IntPx, androidx.ui.core.IntPx minimumValue);
+    method public static inline androidx.ui.core.IntPx coerceAtMost(androidx.ui.core.IntPx, androidx.ui.core.IntPx maximumValue);
+    method public static inline androidx.ui.core.IntPx coerceIn(androidx.ui.core.IntPx, androidx.ui.core.IntPx minimumValue, androidx.ui.core.IntPx maximumValue);
+    method public static inline androidx.ui.core.IntPx getHeight(androidx.ui.core.IntPxBounds);
+    method public static inline androidx.ui.core.IntPx getIpx(int);
+    method public static inline androidx.ui.core.IntPx getWidth(androidx.ui.core.IntPxBounds);
+    method public static inline boolean isFinite(androidx.ui.core.IntPx);
+    method public static androidx.ui.core.IntPx lerp(androidx.ui.core.IntPx a, androidx.ui.core.IntPx b, float t);
+    method public static androidx.ui.core.IntPxPosition lerp(androidx.ui.core.IntPxPosition a, androidx.ui.core.IntPxPosition b, float t);
+    method public static inline androidx.ui.core.IntPx max(androidx.ui.core.IntPx a, androidx.ui.core.IntPx b);
+    method public static inline androidx.ui.core.IntPx min(androidx.ui.core.IntPx a, androidx.ui.core.IntPx b);
+    method public static inline androidx.ui.core.IntPx round(androidx.ui.core.Px);
+    method public static operator androidx.ui.core.IntPx times(float, androidx.ui.core.IntPx other);
+    method public static operator androidx.ui.core.IntPx times(double, androidx.ui.core.IntPx other);
+    method public static operator androidx.ui.core.IntPx times(int, androidx.ui.core.IntPx other);
+    method public static inline androidx.ui.core.Px toPx(androidx.ui.core.IntPx);
+    method public static inline androidx.ui.core.PxPosition toPxPosition(androidx.ui.core.IntPxPosition);
+    method public static inline androidx.ui.core.PxSize toPxSize(androidx.ui.core.IntPxSize);
+    method public static inline androidx.ui.core.IntPxSize toSize(androidx.ui.core.IntPxBounds);
+  }
+
+  public final class IntPxPosition {
+    ctor public IntPxPosition(androidx.ui.core.IntPx x, androidx.ui.core.IntPx y);
+    method public androidx.ui.core.IntPx component1();
+    method public androidx.ui.core.IntPx component2();
+    method public androidx.ui.core.IntPxPosition copy(androidx.ui.core.IntPx x, androidx.ui.core.IntPx y);
+    method public androidx.ui.core.IntPx getX();
+    method public androidx.ui.core.IntPx getY();
+    method public inline operator androidx.ui.core.IntPxPosition minus(androidx.ui.core.IntPxPosition other);
+    method public inline operator androidx.ui.core.IntPxPosition plus(androidx.ui.core.IntPxPosition other);
+  }
+
+  public final class IntPxSize {
+    ctor public IntPxSize(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx component1();
+    method public androidx.ui.core.IntPx component2();
+    method public androidx.ui.core.IntPxSize copy(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx getHeight();
+    method public androidx.ui.core.IntPx getWidth();
+  }
+
+  public interface IntrinsicMeasurable {
+    method public Object? getParentData();
+    method public androidx.ui.core.IntPx maxIntrinsicHeight(androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidth(androidx.ui.core.IntPx height);
+    method public androidx.ui.core.IntPx minIntrinsicHeight(androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidth(androidx.ui.core.IntPx height);
+    property public abstract Object? parentData;
+  }
+
+  public interface LayoutCoordinates {
+    method public androidx.ui.core.PxPosition childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.ui.core.PxPosition childLocal);
+    method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
+    method public androidx.ui.core.PxPosition getPosition();
+    method public androidx.ui.core.PxSize getSize();
+    method public androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.PxPosition global);
+    method public androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.PxPosition local);
+    method public androidx.ui.core.PxPosition localToRoot(androidx.ui.core.PxPosition local);
+    property public abstract androidx.ui.core.PxPosition position;
+    property public abstract androidx.ui.core.PxSize size;
+  }
+
+  public enum LayoutDirection {
+    enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
+    enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
+  }
+
+  public final class LayoutResult {
+    field public static final androidx.ui.core.LayoutResult.Companion! Companion;
+  }
+
+  public static final class LayoutResult.Companion {
+    method public androidx.ui.core.LayoutResult getInstance();
+    property public final androidx.ui.core.LayoutResult Instance;
+  }
+
+  public interface Measurable extends androidx.ui.core.IntrinsicMeasurable {
+    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints);
+  }
+
+  public interface MeasureBlockScope extends androidx.ui.core.DensityReceiver {
+    method public androidx.ui.core.LayoutResult layout(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height, kotlin.Pair<? extends androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx>![] alignmentLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.PositioningBlockScope,kotlin.Unit> positioningBlock);
+  }
+
+  public abstract class Placeable {
+    ctor public Placeable();
+    method public abstract operator androidx.ui.core.IntPx? get(androidx.ui.core.AlignmentLine line);
+    method public abstract androidx.ui.core.IntPx getHeight();
+    method public abstract androidx.ui.core.IntPx getWidth();
+    method protected abstract void place(androidx.ui.core.IntPx x, androidx.ui.core.IntPx y);
+    property public abstract androidx.ui.core.IntPx height;
+    property public abstract androidx.ui.core.IntPx width;
+  }
+
+  public enum PointerEventPass {
+    enum_constant public static final androidx.ui.core.PointerEventPass InitialDown;
+    enum_constant public static final androidx.ui.core.PointerEventPass PostDown;
+    enum_constant public static final androidx.ui.core.PointerEventPass PostUp;
+    enum_constant public static final androidx.ui.core.PointerEventPass PreDown;
+    enum_constant public static final androidx.ui.core.PointerEventPass PreUp;
+  }
+
+  public final class PointerInputChange {
+    ctor public PointerInputChange(int id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method public int component1();
+    method public androidx.ui.core.PointerInputData component2();
+    method public androidx.ui.core.PointerInputData component3();
+    method public androidx.ui.core.ConsumedData component4();
+    method public androidx.ui.core.PointerInputChange copy(int id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method public androidx.ui.core.ConsumedData getConsumed();
+    method public androidx.ui.core.PointerInputData getCurrent();
+    method public int getId();
+    method public androidx.ui.core.PointerInputData getPrevious();
+  }
+
+  public final class PointerInputData {
+    ctor public PointerInputData(androidx.ui.core.Timestamp? timestamp, androidx.ui.core.PxPosition? position, boolean down);
+    ctor public PointerInputData();
+    method public androidx.ui.core.Timestamp? component1();
+    method public androidx.ui.core.PxPosition? component2();
+    method public boolean component3();
+    method public androidx.ui.core.PointerInputData copy(androidx.ui.core.Timestamp? timestamp, androidx.ui.core.PxPosition? position, boolean down);
+    method public boolean getDown();
+    method public androidx.ui.core.PxPosition? getPosition();
+    method public androidx.ui.core.Timestamp? getTimestamp();
+  }
+
+  public final class PointerInputKt {
+    ctor public PointerInputKt();
+    method public static boolean anyPositionChangeConsumed(androidx.ui.core.PointerInputChange);
+    method public static boolean changedToDown(androidx.ui.core.PointerInputChange);
+    method public static boolean changedToDownIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static boolean changedToUp(androidx.ui.core.PointerInputChange);
+    method public static boolean changedToUpIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static androidx.ui.core.PointerInputChange consumeDownChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.ui.core.PointerInputChange consumePositionChange(androidx.ui.core.PointerInputChange, androidx.ui.core.Px consumedDx, androidx.ui.core.Px consumedDy);
+    method public static androidx.ui.core.PxPosition positionChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.ui.core.PxPosition positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static boolean positionChanged(androidx.ui.core.PointerInputChange);
+    method public static boolean positionChangedIgnoreConsumed(androidx.ui.core.PointerInputChange);
+  }
+
+  public final class Position {
+    ctor public Position(androidx.ui.core.Dp x, androidx.ui.core.Dp y);
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Position copy(androidx.ui.core.Dp x, androidx.ui.core.Dp y);
+    method public androidx.ui.core.Dp getX();
+    method public androidx.ui.core.Dp getY();
+    method public inline operator androidx.ui.core.Position minus(androidx.ui.core.Position other);
+    method public inline operator androidx.ui.core.Position plus(androidx.ui.core.Position other);
+  }
+
+  public final class PositioningBlockScope {
+    method public void place(androidx.ui.core.Placeable, androidx.ui.core.IntPx x, androidx.ui.core.IntPx y);
+    method public void place(androidx.ui.core.Placeable, androidx.ui.core.Px x, androidx.ui.core.Px y);
+    field public static final androidx.ui.core.PositioningBlockScope! INSTANCE;
+  }
+
+  public final class Px {
+    ctor public Px(float value);
+    method public inline operator int compareTo(androidx.ui.core.Px other);
+    method public float component1();
+    method public androidx.ui.core.Px copy(float value);
+    method public inline operator androidx.ui.core.Px div(float other);
+    method public inline operator androidx.ui.core.Px div(int other);
+    method public inline operator float div(androidx.ui.core.Px other);
+    method public inline operator float div-kVJEwbQ(float other);
+    method public float getValue();
+    method public inline operator androidx.ui.core.Px minus(androidx.ui.core.Px other);
+    method public inline operator androidx.ui.core.Px minus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.Px plus(androidx.ui.core.Px other);
+    method public inline operator androidx.ui.core.Px plus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.Px times(float other);
+    method public inline operator androidx.ui.core.Px times(int other);
+    method public inline operator float times(androidx.ui.core.Px other);
+    method public inline operator float times-kVJEwbQ(float other);
+    method public inline operator androidx.ui.core.Px unaryMinus();
+    field public static final androidx.ui.core.Px.Companion! Companion;
+  }
+
+  public static final class Px.Companion {
+    method public androidx.ui.core.Px getInfinity();
+    method public androidx.ui.core.Px getZero();
+    property public final androidx.ui.core.Px Infinity;
+    property public final androidx.ui.core.Px Zero;
+  }
+
+  public final class PxBounds {
+    ctor public PxBounds(androidx.ui.core.Px left, androidx.ui.core.Px top, androidx.ui.core.Px right, androidx.ui.core.Px bottom);
+    method public androidx.ui.core.Px component1();
+    method public androidx.ui.core.Px component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.core.Px component4();
+    method public androidx.ui.core.PxBounds copy(androidx.ui.core.Px left, androidx.ui.core.Px top, androidx.ui.core.Px right, androidx.ui.core.Px bottom);
+    method public androidx.ui.core.Px getBottom();
+    method public androidx.ui.core.Px getLeft();
+    method public androidx.ui.core.Px getRight();
+    method public androidx.ui.core.Px getTop();
+  }
+
+  public final inline class PxCubed {
+    ctor public PxCubed();
+    method public static inline operator int compareTo-syUR1PY(float $this, float other);
+    method public static float constructor-impl(float value);
+    method public static inline operator float div-impl(float $this, float other);
+    method public static inline operator float div-impl(float $this, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.Px div-kVJEwbQ(float $this, float other);
+    method public static inline operator float div-syUR1PY(float $this, float other);
+    method public static boolean equals-impl(float p, Object? p1);
+    method public static boolean equals-impl0(float p1, float p2);
+    method public float getValue();
+    method public static int hashCode-impl(float p);
+    method public static inline operator float minus-syUR1PY(float $this, float dimension);
+    method public static inline operator float plus-syUR1PY(float $this, float dimension);
+    method public static inline operator float times-impl(float $this, float other);
+    method public static String toString-impl(float p);
+  }
+
+  public final inline class PxInverse {
+    ctor public PxInverse();
+    method public static inline operator int compareTo-MXEAIGs(float $this, float other);
+    method public static float constructor-impl(float value);
+    method public static inline operator float div-impl(float $this, float other);
+    method public static boolean equals-impl(float p, Object? p1);
+    method public static boolean equals-impl0(float p1, float p2);
+    method public float getValue();
+    method public static int hashCode-impl(float p);
+    method public static inline operator float minus-MXEAIGs(float $this, float dimension);
+    method public static inline operator float plus-MXEAIGs(float $this, float dimension);
+    method public static inline operator float times-impl(float $this, float other);
+    method public static inline operator float times-impl(float $this, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.Px times-kVJEwbQ(float $this, float other);
+    method public static inline operator float times-syUR1PY(float $this, float other);
+    method public static String toString-impl(float p);
+  }
+
+  public final class PxKt {
+    ctor public PxKt();
+    method public static androidx.ui.core.PxPosition center(androidx.ui.core.PxSize);
+    method public static inline androidx.ui.core.Px coerceAtLeast(androidx.ui.core.Px, androidx.ui.core.Px minimumValue);
+    method public static inline androidx.ui.core.Px coerceAtMost(androidx.ui.core.Px, androidx.ui.core.Px maximumValue);
+    method public static inline androidx.ui.core.Px coerceIn(androidx.ui.core.Px, androidx.ui.core.Px minimumValue, androidx.ui.core.Px maximumValue);
+    method public static inline operator float div(float, androidx.ui.core.Px other);
+    method public static inline operator float div(double, androidx.ui.core.Px other);
+    method public static inline operator float div(int, androidx.ui.core.Px other);
+    method public static androidx.ui.core.Px getDistance(androidx.ui.core.PxPosition);
+    method public static inline androidx.ui.core.Px getHeight(androidx.ui.core.PxBounds);
+    method public static androidx.ui.core.Px! getMinDimension(androidx.ui.core.PxSize);
+    method public static inline androidx.ui.core.Px getPx(int);
+    method public static inline androidx.ui.core.Px getPx(double);
+    method public static inline androidx.ui.core.Px getPx(float);
+    method public static inline androidx.ui.core.Px getWidth(androidx.ui.core.PxBounds);
+    method public static androidx.ui.core.Px lerp(androidx.ui.core.Px a, androidx.ui.core.Px b, float t);
+    method public static androidx.ui.core.PxPosition lerp(androidx.ui.core.PxPosition a, androidx.ui.core.PxPosition b, float t);
+    method public static inline androidx.ui.core.Px max(androidx.ui.core.Px a, androidx.ui.core.Px b);
+    method public static inline androidx.ui.core.Px min(androidx.ui.core.Px a, androidx.ui.core.Px b);
+    method public static inline operator androidx.ui.core.Px times(float, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.Px times(double, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.Px times(int, androidx.ui.core.Px other);
+    method public static androidx.ui.core.PxBounds toBounds(androidx.ui.core.PxSize);
+    method public static inline androidx.ui.engine.geometry.Offset toOffset(androidx.ui.core.PxPosition);
+    method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxBounds);
+    method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxSize);
+    method public static androidx.ui.core.PxSize toSize(androidx.ui.core.PxBounds);
+  }
+
+  public final class PxPosition {
+    ctor public PxPosition(androidx.ui.core.Px x, androidx.ui.core.Px y);
+    method public androidx.ui.core.Px component1();
+    method public androidx.ui.core.Px component2();
+    method public androidx.ui.core.PxPosition copy(androidx.ui.core.Px x, androidx.ui.core.Px y);
+    method public androidx.ui.core.Px getX();
+    method public androidx.ui.core.Px getY();
+    method public inline operator androidx.ui.core.PxPosition minus(androidx.ui.core.PxPosition other);
+    method public inline operator androidx.ui.core.PxPosition minus(androidx.ui.core.IntPxPosition other);
+    method public inline operator androidx.ui.core.PxPosition plus(androidx.ui.core.PxPosition other);
+    method public inline operator androidx.ui.core.PxPosition plus(androidx.ui.core.IntPxPosition other);
+    method public inline operator androidx.ui.core.PxPosition unaryMinus();
+    field public static final androidx.ui.core.PxPosition.Companion! Companion;
+  }
+
+  public static final class PxPosition.Companion {
+    method public androidx.ui.core.PxPosition getOrigin();
+    property public final androidx.ui.core.PxPosition Origin;
+  }
+
+  public final class PxSize {
+    ctor public PxSize(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public androidx.ui.core.Px component1();
+    method public androidx.ui.core.Px component2();
+    method public androidx.ui.core.PxSize copy(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public androidx.ui.core.Px getHeight();
+    method public androidx.ui.core.Px getWidth();
+    field public static final androidx.ui.core.PxSize.Companion! Companion;
+  }
+
+  public static final class PxSize.Companion {
+    method public androidx.ui.core.PxSize getZero();
+    property public final androidx.ui.core.PxSize Zero;
+  }
+
+  public final inline class PxSquared {
+    ctor public PxSquared();
+    method public static inline operator int compareTo-kVJEwbQ(float $this, float other);
+    method public static float constructor-impl(float value);
+    method public static inline operator float div-impl(float $this, float other);
+    method public static inline operator androidx.ui.core.Px div-impl(float $this, androidx.ui.core.Px other);
+    method public static inline operator float div-kVJEwbQ(float $this, float other);
+    method public static inline operator float div-syUR1PY(float $this, float other);
+    method public static boolean equals-impl(float p, Object? p1);
+    method public static boolean equals-impl0(float p1, float p2);
+    method public float getValue();
+    method public static int hashCode-impl(float p);
+    method public static inline operator float minus-kVJEwbQ(float $this, float other);
+    method public static inline operator float plus-kVJEwbQ(float $this, float other);
+    method public static inline operator float times-impl(float $this, float other);
+    method public static inline operator float times-impl(float $this, androidx.ui.core.Px other);
+    method public static String toString-impl(float p);
+  }
+
+  public final class RectHelperKt {
+    ctor public RectHelperKt();
+    method public static android.graphics.Rect toFrameworkRect(androidx.ui.engine.geometry.Rect);
+    method public static android.graphics.RectF toFrameworkRectF(androidx.ui.engine.geometry.Rect);
+  }
+
+  public final class Size {
+    ctor public Size(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Size copy(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public androidx.ui.core.Dp getHeight();
+    method public androidx.ui.core.Dp getWidth();
+  }
+
+  public final class Sp {
+    ctor public Sp(float value);
+    method public inline operator int compareTo(androidx.ui.core.Sp other);
+    method public float component1();
+    method public androidx.ui.core.Sp copy(float value);
+    method public inline operator androidx.ui.core.Sp div(float other);
+    method public inline operator androidx.ui.core.Sp div(int other);
+    method public inline operator float div(androidx.ui.core.Sp other);
+    method public float getValue();
+    method public inline operator androidx.ui.core.Sp minus(androidx.ui.core.Sp other);
+    method public inline operator androidx.ui.core.Sp plus(androidx.ui.core.Sp other);
+    method public inline operator androidx.ui.core.Sp times(float other);
+    method public inline operator androidx.ui.core.Sp times(int other);
+    method public inline operator androidx.ui.core.Sp unaryMinus();
+    field public static final androidx.ui.core.Sp.Companion! Companion;
+  }
+
+  public static final class Sp.Companion {
+    method public androidx.ui.core.Sp getInfinity();
+    property public final androidx.ui.core.Sp Infinity;
+  }
+
+  public final class SpKt {
+    ctor public SpKt();
+    method public static inline androidx.ui.core.Sp coerceAtLeast(androidx.ui.core.Sp, androidx.ui.core.Sp minimumValue);
+    method public static inline androidx.ui.core.Sp coerceAtMost(androidx.ui.core.Sp, androidx.ui.core.Sp maximumValue);
+    method public static inline androidx.ui.core.Sp coerceIn(androidx.ui.core.Sp, androidx.ui.core.Sp minimumValue, androidx.ui.core.Sp maximumValue);
+    method public static inline androidx.ui.core.Sp getSp(int);
+    method public static inline androidx.ui.core.Sp getSp(double);
+    method public static inline androidx.ui.core.Sp getSp(float);
+    method public static androidx.ui.core.Sp lerp(androidx.ui.core.Sp a, androidx.ui.core.Sp b, float t);
+    method public static inline androidx.ui.core.Sp max(androidx.ui.core.Sp a, androidx.ui.core.Sp b);
+    method public static inline androidx.ui.core.Sp min(androidx.ui.core.Sp a, androidx.ui.core.Sp b);
+    method public static inline operator androidx.ui.core.Sp times(float, androidx.ui.core.Sp other);
+    method public static inline operator androidx.ui.core.Sp times(double, androidx.ui.core.Sp other);
+    method public static inline operator androidx.ui.core.Sp times(int, androidx.ui.core.Sp other);
+  }
+
+  public final class Timestamp implements java.lang.Comparable<androidx.ui.core.Timestamp> {
+    ctor public Timestamp(long nanoseconds);
+    method public int compareTo(androidx.ui.core.Timestamp other);
+    method public long component1();
+    method public androidx.ui.core.Timestamp copy(long nanoseconds);
+    method public long getNanoseconds();
+    method public operator androidx.ui.core.Timestamp minus(androidx.ui.core.Duration duration);
+    method public operator androidx.ui.core.Duration minus(androidx.ui.core.Timestamp other);
+    method public operator androidx.ui.core.Timestamp plus(androidx.ui.core.Duration duration);
+  }
+
+  public final class Timestamps {
+    ctor public Timestamps();
+    method public static androidx.ui.core.Timestamp millisecondsToTimestamp(long);
+    method public static androidx.ui.core.Timestamp nanosecondsToTimestamp(long);
+    method public static androidx.ui.core.Timestamp secondsToTimestamp(long);
+  }
+
+  public final class Velocity {
+    ctor public Velocity(androidx.ui.core.PxPosition pixelsPerSecond);
+    method public androidx.ui.core.PxPosition component1();
+    method public androidx.ui.core.Velocity copy(androidx.ui.core.PxPosition pixelsPerSecond);
+    method public androidx.ui.core.PxPosition getPixelsPerSecond();
+    method public operator androidx.ui.core.Velocity unaryMinus();
+    field public static final androidx.ui.core.Velocity.Companion! Companion;
+  }
+
+  public static final class Velocity.Companion {
+    method public androidx.ui.core.Velocity getZero();
+    property public final androidx.ui.core.Velocity Zero;
+  }
+
+  public final class VelocityKt {
+    ctor public VelocityKt();
+    method public static operator androidx.ui.core.Velocity minus(androidx.ui.core.Velocity, androidx.ui.core.Velocity other);
+    method public static operator androidx.ui.core.Velocity plus(androidx.ui.core.Velocity, androidx.ui.core.Velocity other);
+  }
+
+  public final class VerticalAlignmentLine extends androidx.ui.core.AlignmentLine {
+    ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super androidx.ui.core.IntPx,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> merger);
+  }
+
+}
+
+package androidx.ui.engine.geometry {
+
+  public final class Offset implements androidx.ui.engine.geometry.OffsetBase {
+    ctor public Offset(float dx, float dy);
+    method public infix androidx.ui.engine.geometry.Rect and(androidx.ui.engine.geometry.Size other);
+    method public float component1();
+    method public float component2();
+    method public androidx.ui.engine.geometry.Offset copy(float dx, float dy);
+    method public operator androidx.ui.engine.geometry.Offset div(float operand);
+    method public float getDirection();
+    method public float getDistance();
+    method public float getDistanceSquared();
+    method public float getDx();
+    method public float getDy();
+    method public operator androidx.ui.engine.geometry.Offset minus(androidx.ui.engine.geometry.Offset other);
+    method public operator androidx.ui.engine.geometry.Offset plus(androidx.ui.engine.geometry.Offset other);
+    method public operator androidx.ui.engine.geometry.Offset rem(float operand);
+    method public androidx.ui.engine.geometry.Offset scale(float scaleX, float scaleY);
+    method public operator androidx.ui.engine.geometry.Offset times(float operand);
+    method public androidx.ui.engine.geometry.Offset translate(float translateX, float translateY);
+    method public androidx.ui.engine.geometry.Offset truncDiv(float operand);
+    method public operator androidx.ui.engine.geometry.Offset unaryMinus();
+    field public static final androidx.ui.engine.geometry.Offset.Companion! Companion;
+  }
+
+  public static final class Offset.Companion {
+    method public androidx.ui.engine.geometry.Offset getInfinite();
+    method public androidx.ui.engine.geometry.Offset getZero();
+    method public boolean isValid(androidx.ui.engine.geometry.Offset offset);
+    method public androidx.ui.engine.geometry.Offset? lerp(androidx.ui.engine.geometry.Offset a, androidx.ui.engine.geometry.Offset b, float t);
+    property public final androidx.ui.engine.geometry.Offset infinite;
+    property public final androidx.ui.engine.geometry.Offset zero;
+  }
+
+  public interface OffsetBase {
+    method public float getDx();
+    method public float getDy();
+    method public default boolean isFinite();
+    method public default boolean isGreaterOrEqThan(androidx.ui.engine.geometry.OffsetBase other);
+    method public default boolean isGreaterThan(androidx.ui.engine.geometry.OffsetBase other);
+    method public default boolean isInfinite();
+    method public default boolean isLessOrEqThan(androidx.ui.engine.geometry.OffsetBase other);
+    method public default boolean isLessThan(androidx.ui.engine.geometry.OffsetBase other);
+    property public abstract float dx;
+    property public abstract float dy;
+  }
+
+  public final class OffsetKt {
+    ctor public OffsetKt();
+    method public static androidx.ui.core.PxPosition toPxPosition(androidx.ui.engine.geometry.Offset);
+  }
+
+  public abstract sealed class Outline {
+  }
+
+  public static final class Outline.Generic extends androidx.ui.engine.geometry.Outline {
+    ctor public Outline.Generic(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path component1();
+    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path getPath();
+  }
+
+  public static final class Outline.Rectangle extends androidx.ui.engine.geometry.Outline {
+    ctor public Outline.Rectangle(androidx.ui.engine.geometry.Rect rect);
+    method public androidx.ui.engine.geometry.Rect component1();
+    method public androidx.ui.engine.geometry.Outline.Rectangle copy(androidx.ui.engine.geometry.Rect rect);
+    method public androidx.ui.engine.geometry.Rect getRect();
+  }
+
+  public static final class Outline.Rounded extends androidx.ui.engine.geometry.Outline {
+    ctor public Outline.Rounded(androidx.ui.engine.geometry.RRect rrect);
+    method public androidx.ui.engine.geometry.RRect component1();
+    method public androidx.ui.engine.geometry.Outline.Rounded copy(androidx.ui.engine.geometry.RRect rrect);
+    method public androidx.ui.engine.geometry.RRect getRrect();
+  }
+
+  public final class OutlineKt {
+    ctor public OutlineKt();
+    method public static void addOutline(androidx.ui.graphics.Path, androidx.ui.engine.geometry.Outline outline);
+    method public static void drawOutline(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.graphics.Paint paint);
+  }
+
+  public final class RRect {
+    ctor public RRect(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method public float component1();
+    method public float component10();
+    method public float component11();
+    method public float component12();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method public float component5();
+    method public float component6();
+    method public float component7();
+    method public float component8();
+    method public float component9();
+    method public boolean contains(androidx.ui.engine.geometry.Offset point);
+    method public androidx.ui.engine.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method @Deprecated public androidx.ui.engine.geometry.RRect deflate(float delta);
+    method public float getBottom();
+    method public float getBottomLeftRadiusX();
+    method public float getBottomLeftRadiusY();
+    method public float getBottomRightRadiusX();
+    method public float getBottomRightRadiusY();
+    method public float getHeight();
+    method public float getLeft();
+    method public float getRight();
+    method public float getTop();
+    method public float getTopLeftRadiusX();
+    method public float getTopLeftRadiusY();
+    method public float getTopRightRadiusX();
+    method public float getTopRightRadiusY();
+    method public float getWidth();
+    method public static androidx.ui.engine.geometry.RRect getZero();
+    method @Deprecated public androidx.ui.engine.geometry.RRect inflate(float delta);
+    property public final float height;
+    property public final float width;
+    field public static final androidx.ui.engine.geometry.RRect.Companion! Companion;
+  }
+
+  public static final class RRect.Companion {
+    method public androidx.ui.engine.geometry.RRect getZero();
+    property public final androidx.ui.engine.geometry.RRect Zero;
+  }
+
+  public final class RRectKt {
+    ctor public RRectKt();
+    method public static androidx.ui.engine.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+    method public static androidx.ui.engine.geometry.RRect RRect(float left, float top, float right, float bottom, androidx.ui.engine.geometry.Radius radius);
+    method public static androidx.ui.engine.geometry.RRect RRect(androidx.ui.engine.geometry.Rect rect, float radiusX, float radiusY);
+    method public static androidx.ui.engine.geometry.RRect RRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.engine.geometry.Radius radius);
+    method public static androidx.ui.engine.geometry.RRect RRect(float left, float top, float right, float bottom, androidx.ui.engine.geometry.Radius topLeft = Radius.zero, androidx.ui.engine.geometry.Radius topRight = Radius.zero, androidx.ui.engine.geometry.Radius bottomRight = Radius.zero, androidx.ui.engine.geometry.Radius bottomLeft = Radius.zero);
+    method public static androidx.ui.engine.geometry.RRect RRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.engine.geometry.Radius topLeft = Radius.zero, androidx.ui.engine.geometry.Radius topRight = Radius.zero, androidx.ui.engine.geometry.Radius bottomRight = Radius.zero, androidx.ui.engine.geometry.Radius bottomLeft = Radius.zero);
+    method public static androidx.ui.engine.geometry.Radius bottomLeftRadius(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.Radius bottomRightRadius(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.Offset center(androidx.ui.engine.geometry.RRect);
+    method public static float getLongestSide(androidx.ui.engine.geometry.RRect);
+    method public static float getShortestSide(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.RRect grow(androidx.ui.engine.geometry.RRect, float delta);
+    method public static boolean isCircle(androidx.ui.engine.geometry.RRect);
+    method public static boolean isEllipse(androidx.ui.engine.geometry.RRect);
+    method public static boolean isEmpty(androidx.ui.engine.geometry.RRect);
+    method public static boolean isFinite(androidx.ui.engine.geometry.RRect);
+    method public static boolean isRect(androidx.ui.engine.geometry.RRect);
+    method public static boolean isStadium(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.RRect? lerp(androidx.ui.engine.geometry.RRect? a, androidx.ui.engine.geometry.RRect? b, float t);
+    method public static androidx.ui.engine.geometry.Rect middleRect(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.Rect outerRect(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.Rect safeInnerRect(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.RRect shift(androidx.ui.engine.geometry.RRect, androidx.ui.engine.geometry.Offset offset);
+    method public static androidx.ui.engine.geometry.RRect shrink(androidx.ui.engine.geometry.RRect, float delta);
+    method public static androidx.ui.engine.geometry.Rect tallMiddleRect(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.Radius topLeftRadius(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.Radius topRightRadius(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.Rect wideMiddleRect(androidx.ui.engine.geometry.RRect);
+    method public static androidx.ui.engine.geometry.RRect withRadius(androidx.ui.engine.geometry.RRect, androidx.ui.engine.geometry.Radius radius);
+  }
+
+  public final class Radius {
+    ctor public Radius(float x, float y);
+    method public float component1();
+    method public float component2();
+    method public androidx.ui.engine.geometry.Radius copy(float x, float y);
+    method public operator androidx.ui.engine.geometry.Radius div(float operand);
+    method public float getX();
+    method public float getY();
+    method public operator androidx.ui.engine.geometry.Radius minus(androidx.ui.engine.geometry.Radius other);
+    method public operator androidx.ui.engine.geometry.Radius plus(androidx.ui.engine.geometry.Radius other);
+    method public operator androidx.ui.engine.geometry.Radius rem(float operand);
+    method public operator androidx.ui.engine.geometry.Radius times(float operand);
+    method public androidx.ui.engine.geometry.Radius truncDiv(float operand);
+    method public operator androidx.ui.engine.geometry.Radius unaryMinus();
+    field public static final androidx.ui.engine.geometry.Radius.Companion! Companion;
+  }
+
+  public static final class Radius.Companion {
+    method public androidx.ui.engine.geometry.Radius circular(float radius);
+    method public androidx.ui.engine.geometry.Radius elliptical(float x, float y);
+    method public androidx.ui.engine.geometry.Radius getZero();
+    property public final androidx.ui.engine.geometry.Radius zero;
+  }
+
+  public final class RadiusKt {
+    ctor public RadiusKt();
+    method public static androidx.ui.engine.geometry.Radius lerp(androidx.ui.engine.geometry.Radius a, androidx.ui.engine.geometry.Radius b, float t);
+  }
+
+  public final class Rect {
+    ctor public Rect(float left, float top, float right, float bottom);
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public androidx.ui.engine.geometry.Rect copy(float left, float top, float right, float bottom);
+    method public androidx.ui.engine.geometry.Rect deflate(float delta);
+    method public androidx.ui.engine.geometry.Rect expandToInclude(androidx.ui.engine.geometry.Rect other);
+    method public float getBottom();
+    method public androidx.ui.engine.geometry.Offset getBottomCenter();
+    method public androidx.ui.engine.geometry.Offset getBottomLeft();
+    method public androidx.ui.engine.geometry.Offset getBottomRight();
+    method public androidx.ui.engine.geometry.Offset getCenter();
+    method public androidx.ui.engine.geometry.Offset getCenterLeft();
+    method public androidx.ui.engine.geometry.Offset getCenterRight();
+    method public float getHeight();
+    method public float getLeft();
+    method public float getLongestSide();
+    method public float getRight();
+    method public float getShortestSide();
+    method public androidx.ui.engine.geometry.Size getSize();
+    method public float getTop();
+    method public androidx.ui.engine.geometry.Offset getTopCenter();
+    method public androidx.ui.engine.geometry.Offset getTopLeft();
+    method public androidx.ui.engine.geometry.Offset getTopRight();
+    method public float getWidth();
+    method public androidx.ui.engine.geometry.Rect inflate(float delta);
+    method public androidx.ui.engine.geometry.Rect intersect(androidx.ui.engine.geometry.Rect other);
+    method public boolean isEmpty();
+    method public boolean isFinite();
+    method public boolean isInfinite();
+    method public androidx.ui.engine.geometry.Rect join(androidx.ui.engine.geometry.Rect other);
+    method public boolean overlaps(androidx.ui.engine.geometry.Rect other);
+    method public androidx.ui.engine.geometry.Rect shift(androidx.ui.engine.geometry.Offset offset);
+    method public androidx.ui.engine.geometry.Rect translate(float translateX, float translateY);
+    property public final float height;
+    property public final float width;
+    field public static final androidx.ui.engine.geometry.Rect.Companion! Companion;
+  }
+
+  public static final class Rect.Companion {
+    method public androidx.ui.engine.geometry.Rect fromCircle(androidx.ui.engine.geometry.Offset center, float radius);
+    method public androidx.ui.engine.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method public androidx.ui.engine.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method public androidx.ui.engine.geometry.Rect fromPoints(androidx.ui.engine.geometry.Offset a, androidx.ui.engine.geometry.Offset b);
+    method public androidx.ui.engine.geometry.Rect getLargest();
+    method public androidx.ui.engine.geometry.Rect getZero();
+    method public float get_giantScalar();
+    property public final float _giantScalar;
+    property public final androidx.ui.engine.geometry.Rect largest;
+    property public final androidx.ui.engine.geometry.Rect zero;
+  }
+
+  public final class RectKt {
+    ctor public RectKt();
+    method public static androidx.ui.engine.geometry.Rect lerp(androidx.ui.engine.geometry.Rect a, androidx.ui.engine.geometry.Rect b, float t);
+  }
+
+  public interface Shape {
+    method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
+  }
+
+  public class Size implements androidx.ui.engine.geometry.OffsetBase {
+    ctor public Size(float width, float height);
+    method public final androidx.ui.engine.geometry.Offset bottomCenter(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Offset bottomLeft(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Offset bottomRight(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Offset center(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Offset centerLeft(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Offset centerRight(androidx.ui.engine.geometry.Offset origin);
+    method public final boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public final operator androidx.ui.engine.geometry.Size div(float operand);
+    method public float getDx();
+    method public float getDy();
+    method public final androidx.ui.engine.geometry.Size getFlipped();
+    method public final float getHeight();
+    method public final float getLongestSide();
+    method public final float getShortestSide();
+    method public final float getWidth();
+    method public final boolean isEmpty();
+    method public final operator androidx.ui.engine.geometry.Size minus(androidx.ui.engine.geometry.Offset other);
+    method public final operator androidx.ui.engine.geometry.Offset minus(androidx.ui.engine.geometry.Size other);
+    method public final operator androidx.ui.engine.geometry.Size plus(androidx.ui.engine.geometry.Offset other);
+    method public final operator androidx.ui.engine.geometry.Size rem(float operand);
+    method public final operator androidx.ui.engine.geometry.Size times(float operand);
+    method public final androidx.ui.engine.geometry.Offset topCenter(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Offset topLeft(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Offset topRight(androidx.ui.engine.geometry.Offset origin);
+    method public final androidx.ui.engine.geometry.Size truncDiv(float operand);
+    property public float dx;
+    property public float dy;
+    field public static final androidx.ui.engine.geometry.Size.Companion! Companion;
+  }
+
+  public static final class Size.Companion {
+    method public androidx.ui.engine.geometry.Size copy(androidx.ui.engine.geometry.Size source);
+    method public androidx.ui.engine.geometry.Size fromHeight(float height);
+    method public androidx.ui.engine.geometry.Size fromRadius(float radius);
+    method public androidx.ui.engine.geometry.Size fromWidth(float width);
+    method public androidx.ui.engine.geometry.Size getInfinite();
+    method public androidx.ui.engine.geometry.Size getZero();
+    method public androidx.ui.engine.geometry.Size? lerp(androidx.ui.engine.geometry.Size a, androidx.ui.engine.geometry.Size b, float t);
+    method public androidx.ui.engine.geometry.Size square(float dimension);
+    property public final androidx.ui.engine.geometry.Size infinite;
+    property public final androidx.ui.engine.geometry.Size zero;
+  }
+
+}
+
+package androidx.ui.graphics {
+
+  public final class AndroidCanvasKt {
+    ctor public AndroidCanvasKt();
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.Image image);
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
+    method public static androidx.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+  }
+
+  public final class AndroidImageKt {
+    ctor public AndroidImageKt();
+    method public static androidx.ui.graphics.Image Image(int width, int height, androidx.ui.graphics.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Image imageFromResource(android.content.res.Resources res, int resId);
+  }
+
+  public enum BlendMode {
+    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
+    enum_constant public static final androidx.ui.graphics.BlendMode clear;
+    enum_constant public static final androidx.ui.graphics.BlendMode color;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorBurn;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorDodge;
+    enum_constant public static final androidx.ui.graphics.BlendMode darken;
+    enum_constant public static final androidx.ui.graphics.BlendMode difference;
+    enum_constant public static final androidx.ui.graphics.BlendMode dst;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode exclusion;
+    enum_constant public static final androidx.ui.graphics.BlendMode hardLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode hue;
+    enum_constant public static final androidx.ui.graphics.BlendMode lighten;
+    enum_constant public static final androidx.ui.graphics.BlendMode luminosity;
+    enum_constant public static final androidx.ui.graphics.BlendMode modulate;
+    enum_constant public static final androidx.ui.graphics.BlendMode multiply;
+    enum_constant public static final androidx.ui.graphics.BlendMode overlay;
+    enum_constant public static final androidx.ui.graphics.BlendMode plus;
+    enum_constant public static final androidx.ui.graphics.BlendMode saturation;
+    enum_constant public static final androidx.ui.graphics.BlendMode screen;
+    enum_constant public static final androidx.ui.graphics.BlendMode softLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode src;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode xor;
+  }
+
+  public enum BlurStyle {
+    enum_constant public static final androidx.ui.graphics.BlurStyle inner;
+    enum_constant public static final androidx.ui.graphics.BlurStyle normal;
+    enum_constant public static final androidx.ui.graphics.BlurStyle outer;
+    enum_constant public static final androidx.ui.graphics.BlurStyle solid;
+  }
+
+  public interface Brush {
+    method public void applyTo(androidx.ui.graphics.Paint p);
+  }
+
+  public final class BrushKt {
+    ctor public BrushKt();
+    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public interface Canvas {
+    method public void clipPath(androidx.ui.graphics.Path path);
+    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = ClipOp.intersect);
+    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
+    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawDoubleRoundRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
+    method public void drawPicture(androidx.ui.graphics.Picture picture);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.graphics.Paint paint);
+    method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
+    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
+    method public android.graphics.Canvas getNativeCanvas();
+    method public void restore();
+    method public void rotate(float degrees);
+    method public default void rotateRad(float radians);
+    method public void save();
+    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void scale(float sx, float sy = sx);
+    method public void skew(float sx, float sy);
+    method public default void skewRad(float sxRad, float syRad);
+    method public void translate(float dx, float dy);
+    property public abstract android.graphics.Canvas nativeCanvas;
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum ClipOp {
+    enum_constant public static final androidx.ui.graphics.ClipOp difference;
+    enum_constant public static final androidx.ui.graphics.ClipOp intersect;
+  }
+
+  public final class Color {
+    method public androidx.ui.graphics.Color convert(androidx.ui.graphics.colorspace.ColorSpace colorSpace);
+    method public androidx.ui.graphics.Color copy(float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
+    method public float getAlpha();
+    method public float getBlue();
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public float getGreen();
+    method public float getRed();
+    method public long getValue();
+    property public final float alpha;
+    property public final float blue;
+    property public final androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public final float green;
+    property public final float red;
+    field public static final androidx.ui.graphics.Color.Companion! Companion;
+  }
+
+  public static final class Color.Companion {
+    method public androidx.ui.graphics.Color getBlack();
+    method public androidx.ui.graphics.Color getBlue();
+    method public androidx.ui.graphics.Color getCyan();
+    method public androidx.ui.graphics.Color getDarkGray();
+    method public androidx.ui.graphics.Color getGray();
+    method public androidx.ui.graphics.Color getGreen();
+    method public androidx.ui.graphics.Color getLightGray();
+    method public androidx.ui.graphics.Color getMagenta();
+    method public androidx.ui.graphics.Color getRed();
+    method public androidx.ui.graphics.Color getTransparent();
+    method public androidx.ui.graphics.Color getWhite();
+    method public androidx.ui.graphics.Color getYellow();
+    property public final androidx.ui.graphics.Color Black;
+    property public final androidx.ui.graphics.Color Blue;
+    property public final androidx.ui.graphics.Color Cyan;
+    property public final androidx.ui.graphics.Color DarkGray;
+    property public final androidx.ui.graphics.Color Gray;
+    property public final androidx.ui.graphics.Color Green;
+    property public final androidx.ui.graphics.Color LightGray;
+    property public final androidx.ui.graphics.Color Magenta;
+    property public final androidx.ui.graphics.Color Red;
+    property public final androidx.ui.graphics.Color Transparent;
+    property public final androidx.ui.graphics.Color White;
+    property public final androidx.ui.graphics.Color Yellow;
+  }
+
+  public final class ColorFilter {
+    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.BlendMode component2();
+    method public androidx.ui.graphics.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+  }
+
+  public final class ColorKt {
+    ctor public ColorKt();
+    method public static androidx.ui.graphics.Color Color(float red, float green, float blue, float alpha = 1f, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Color Color(@ColorInt int color);
+    method public static androidx.ui.graphics.Color Color(long color);
+    method public static androidx.ui.graphics.Color Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
+    method public static androidx.ui.graphics.Color lerp(androidx.ui.graphics.Color a, androidx.ui.graphics.Color b, @FloatRange(from=0.0, to=1.0) float t);
+    method public static float luminance(androidx.ui.graphics.Color);
+    method @ColorInt public static int toArgb(androidx.ui.graphics.Color);
+  }
+
+  public enum FilterQuality {
+    enum_constant public static final androidx.ui.graphics.FilterQuality high;
+    enum_constant public static final androidx.ui.graphics.FilterQuality low;
+    enum_constant public static final androidx.ui.graphics.FilterQuality medium;
+    enum_constant public static final androidx.ui.graphics.FilterQuality none;
+  }
+
+  public interface Image {
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public androidx.ui.graphics.ImageConfig getConfig();
+    method public boolean getHasAlpha();
+    method public int getHeight();
+    method public android.graphics.Bitmap getNativeImage();
+    method public int getWidth();
+    method public void prepareToDraw();
+    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public abstract androidx.ui.graphics.ImageConfig config;
+    property public abstract boolean hasAlpha;
+    property public abstract int height;
+    property public abstract android.graphics.Bitmap nativeImage;
+    property public abstract int width;
+  }
+
+  public enum ImageByteFormat {
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
+  }
+
+  public enum ImageConfig {
+    enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
+    enum_constant public static final androidx.ui.graphics.ImageConfig F16;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Gpu;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Rgb565;
+  }
+
+  public final class ImageKt {
+    ctor public ImageKt();
+  }
+
+  public enum ImageRepeat {
+    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
+  }
+
+  public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class MaskFilter {
+    ctor public MaskFilter(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public androidx.ui.graphics.BlurStyle component1();
+    method public float component2();
+    method public androidx.ui.graphics.MaskFilter copy(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public float getSigma();
+    method public androidx.ui.graphics.BlurStyle getStyle();
+    field public static final androidx.ui.graphics.MaskFilter.Companion! Companion;
+    field public static final int TYPE_BLUR = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+  }
+
+  public static final class MaskFilter.Companion {
+  }
+
+  public final class Paint {
+    ctor public Paint();
+    method public android.graphics.Paint asFrameworkPaint();
+    method public float getAlpha();
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.graphics.ColorFilter? getColorFilter();
+    method public androidx.ui.graphics.FilterQuality getFilterQuality();
+    method public androidx.ui.graphics.MaskFilter getMaskFilter();
+    method public androidx.ui.graphics.Shader? getShader();
+    method public androidx.ui.graphics.StrokeCap getStrokeCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeJoin();
+    method public float getStrokeMiterLimit();
+    method public float getStrokeWidth();
+    method public androidx.ui.graphics.PaintingStyle getStyle();
+    method public boolean isAntiAlias();
+    method public void setAlpha(float value);
+    method public void setAntiAlias(boolean value);
+    method public void setBlendMode(androidx.ui.graphics.BlendMode value);
+    method public void setColor(androidx.ui.graphics.Color color);
+    method public void setColorFilter(androidx.ui.graphics.ColorFilter? value);
+    method public void setFilterQuality(androidx.ui.graphics.FilterQuality value);
+    method public void setMaskFilter(androidx.ui.graphics.MaskFilter value);
+    method public void setShader(androidx.ui.graphics.Shader? value);
+    method public void setStrokeCap(androidx.ui.graphics.StrokeCap value);
+    method public void setStrokeJoin(androidx.ui.graphics.StrokeJoin value);
+    method public void setStrokeMiterLimit(float value);
+    method public void setStrokeWidth(float value);
+    method public void setStyle(androidx.ui.graphics.PaintingStyle value);
+    property public final float alpha;
+    property public final androidx.ui.graphics.BlendMode blendMode;
+    property public final androidx.ui.graphics.Color color;
+    property public final androidx.ui.graphics.ColorFilter? colorFilter;
+    property public final androidx.ui.graphics.FilterQuality filterQuality;
+    property public final boolean isAntiAlias;
+    property public final androidx.ui.graphics.MaskFilter maskFilter;
+    property public final androidx.ui.graphics.Shader? shader;
+    property public final androidx.ui.graphics.StrokeCap strokeCap;
+    property public final androidx.ui.graphics.StrokeJoin strokeJoin;
+    property public final float strokeMiterLimit;
+    property public final float strokeWidth;
+    property public final androidx.ui.graphics.PaintingStyle style;
+  }
+
+  public enum PaintingStyle {
+    enum_constant public static final androidx.ui.graphics.PaintingStyle fill;
+    enum_constant public static final androidx.ui.graphics.PaintingStyle stroke;
+  }
+
+  public final class Path {
+    ctor public Path(android.graphics.Path internalPath);
+    ctor public Path();
+    method public void _addRect(float left, float top, float right, float bottom);
+    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.ui.engine.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
+    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
+    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void addRect(androidx.ui.engine.geometry.Rect rect);
+    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void close();
+    method public void conicTo(float x1, float y1, float x2, float y2, float w);
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void extendWithPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
+    method public androidx.ui.engine.geometry.Rect getBounds();
+    method public androidx.ui.graphics.PathFillType getFillType();
+    method public boolean isConvex();
+    method public boolean isEmpty();
+    method public void lineTo(float dx, float dy);
+    method public void moveTo(float dx, float dy);
+    method public boolean op(androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2, androidx.ui.graphics.PathOperation operation);
+    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
+    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void relativeLineTo(float dx, float dy);
+    method public void relativeMoveTo(float dx, float dy);
+    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void reset();
+    method public void setFillType(androidx.ui.graphics.PathFillType value);
+    method public void shift(androidx.ui.engine.geometry.Offset offset);
+    method public android.graphics.Path toFrameworkPath();
+    method public androidx.ui.graphics.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
+    property public final boolean isConvex;
+    property public final boolean isEmpty;
+    field public static final androidx.ui.graphics.Path.Companion! Companion;
+  }
+
+  public static final class Path.Companion {
+    method public androidx.ui.graphics.Path combine(androidx.ui.graphics.PathOperation operation, androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2);
+  }
+
+  public enum PathFillType {
+    enum_constant public static final androidx.ui.graphics.PathFillType evenOdd;
+    enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
+  }
+
+  public enum PathOperation {
+    enum_constant public static final androidx.ui.graphics.PathOperation difference;
+    enum_constant public static final androidx.ui.graphics.PathOperation intersect;
+    enum_constant public static final androidx.ui.graphics.PathOperation reverseDifference;
+    enum_constant public static final androidx.ui.graphics.PathOperation union;
+    enum_constant public static final androidx.ui.graphics.PathOperation xor;
+  }
+
+  public final class Picture {
+    ctor public Picture(android.graphics.Picture frameworkPicture);
+    method public androidx.ui.engine.geometry.Rect cullRect();
+    method public void dispose();
+    method public android.graphics.Picture getFrameworkPicture();
+  }
+
+  public final class PictureRecorder {
+    ctor public PictureRecorder();
+    method public androidx.ui.graphics.Picture endRecording();
+    method public boolean isRecording();
+    property public final boolean isRecording;
+  }
+
+  public enum PointMode {
+    enum_constant public static final androidx.ui.graphics.PointMode lines;
+    enum_constant public static final androidx.ui.graphics.PointMode points;
+    enum_constant public static final androidx.ui.graphics.PointMode polygon;
+  }
+
+  public final class RadialGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class Shader {
+    ctor public Shader(android.graphics.Shader nativeShader);
+    method public android.graphics.Shader getNativeShader();
+  }
+
+  public class ShaderBrush implements androidx.ui.graphics.Brush {
+    ctor public ShaderBrush(androidx.ui.graphics.Shader shader);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public final androidx.ui.graphics.Shader getShader();
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static androidx.ui.graphics.Shader ImageShader(androidx.ui.graphics.Image image, androidx.ui.graphics.TileMode tileModeX = TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public final class Shadow {
+    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    ctor public Shadow();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Offset component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.graphics.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    method public androidx.ui.core.Px getBlurRadius();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.engine.geometry.Offset getOffset();
+  }
+
+  public final class ShadowKt {
+    ctor public ShadowKt();
+    method public static androidx.ui.graphics.Shadow lerp(androidx.ui.graphics.Shadow a, androidx.ui.graphics.Shadow b, float t);
+  }
+
+  public final class SolidColor implements androidx.ui.graphics.Brush {
+    ctor public SolidColor(androidx.ui.graphics.Color value);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public androidx.ui.graphics.Color getValue();
+  }
+
+  public enum StrokeCap {
+    enum_constant public static final androidx.ui.graphics.StrokeCap butt;
+    enum_constant public static final androidx.ui.graphics.StrokeCap round;
+    enum_constant public static final androidx.ui.graphics.StrokeCap square;
+  }
+
+  public enum StrokeJoin {
+    enum_constant public static final androidx.ui.graphics.StrokeJoin bevel;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin miter;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin round;
+  }
+
+  public enum TileMode {
+    method public final android.graphics.Shader.TileMode getNativeTileMode();
+    enum_constant public static final androidx.ui.graphics.TileMode Clamp;
+    enum_constant public static final androidx.ui.graphics.TileMode Mirror;
+    enum_constant public static final androidx.ui.graphics.TileMode Repeated;
+  }
+
+  public final class TileModeKt {
+    ctor public TileModeKt();
+    method public static android.graphics.Shader.TileMode NativeClampTileMode();
+    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
+    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
+  }
+
+}
+
+package androidx.ui.graphics.colorspace {
+
+  public enum Adaptation {
+    enum_constant public static final androidx.ui.graphics.colorspace.Adaptation Bradford;
+    enum_constant public static final androidx.ui.graphics.colorspace.Adaptation Ciecat02;
+    enum_constant public static final androidx.ui.graphics.colorspace.Adaptation VonKries;
+  }
+
+  public enum ColorModel {
+    method public final int getComponentCount();
+    enum_constant public static final androidx.ui.graphics.colorspace.ColorModel Cmyk;
+    enum_constant public static final androidx.ui.graphics.colorspace.ColorModel Lab;
+    enum_constant public static final androidx.ui.graphics.colorspace.ColorModel Rgb;
+    enum_constant public static final androidx.ui.graphics.colorspace.ColorModel Xyz;
+  }
+
+  public abstract class ColorSpace {
+    ctor public ColorSpace(String name, androidx.ui.graphics.colorspace.ColorModel model);
+    method @Size(min=3) public final float[] fromXyz(float x, float y, float z);
+    method @Size(min=3) public abstract float[] fromXyz(@Size(min=3) float[] v);
+    method @IntRange(from=1, to=4) public final int getComponentCount();
+    method public abstract float getMaxValue(@IntRange(from=0, to=3) int component);
+    method public abstract float getMinValue(@IntRange(from=0, to=3) int component);
+    method public final androidx.ui.graphics.colorspace.ColorModel getModel();
+    method public final String getName();
+    method public boolean isSrgb();
+    method public abstract boolean isWideGamut();
+    method @Size(3) public final float[] toXyz(float r, float g, float b);
+    method @Size(min=3) public abstract float[] toXyz(@Size(min=3) float[] v);
+    property @IntRange(from=1, to=4) public final int componentCount;
+    property public boolean isSrgb;
+    property public abstract boolean isWideGamut;
+  }
+
+  public final class ColorSpaceKt {
+    ctor public ColorSpaceKt();
+    method public static androidx.ui.graphics.colorspace.ColorSpace adapt(androidx.ui.graphics.colorspace.ColorSpace, androidx.ui.graphics.colorspace.WhitePoint whitePoint, androidx.ui.graphics.colorspace.Adaptation adaptation = Adaptation.Bradford);
+    method public static androidx.ui.graphics.colorspace.ColorSpace adapt(androidx.ui.graphics.colorspace.ColorSpace, androidx.ui.graphics.colorspace.WhitePoint whitePoint);
+    method public static androidx.ui.graphics.colorspace.Connector connect(androidx.ui.graphics.colorspace.ColorSpace, androidx.ui.graphics.colorspace.ColorSpace destination = ColorSpaces.Srgb, androidx.ui.graphics.colorspace.RenderIntent intent = RenderIntent.Perceptual);
+  }
+
+  public final class ColorSpaces {
+    method public androidx.ui.graphics.colorspace.Rgb getAces();
+    method public androidx.ui.graphics.colorspace.Rgb getAcescg();
+    method public androidx.ui.graphics.colorspace.Rgb getAdobeRgb();
+    method public androidx.ui.graphics.colorspace.Rgb getBt2020();
+    method public androidx.ui.graphics.colorspace.Rgb getBt709();
+    method public androidx.ui.graphics.colorspace.ColorSpace getCieLab();
+    method public androidx.ui.graphics.colorspace.ColorSpace getCieXyz();
+    method public androidx.ui.graphics.colorspace.Rgb getDciP3();
+    method public androidx.ui.graphics.colorspace.Rgb getDisplayP3();
+    method public androidx.ui.graphics.colorspace.Rgb getExtendedSrgb();
+    method public androidx.ui.graphics.colorspace.Rgb getLinearExtendedSrgb();
+    method public androidx.ui.graphics.colorspace.Rgb getLinearSrgb();
+    method public androidx.ui.graphics.colorspace.Rgb getNtsc1953();
+    method public androidx.ui.graphics.colorspace.Rgb getProPhotoRgb();
+    method public androidx.ui.graphics.colorspace.Rgb getSmpteC();
+    method public androidx.ui.graphics.colorspace.Rgb getSrgb();
+    method public androidx.ui.graphics.colorspace.ColorSpace? match(@Size(9) float[] toXYZD50, androidx.ui.graphics.colorspace.TransferParameters function);
+    property public final androidx.ui.graphics.colorspace.Rgb Aces;
+    property public final androidx.ui.graphics.colorspace.Rgb Acescg;
+    property public final androidx.ui.graphics.colorspace.Rgb AdobeRgb;
+    property public final androidx.ui.graphics.colorspace.Rgb Bt2020;
+    property public final androidx.ui.graphics.colorspace.Rgb Bt709;
+    property public final androidx.ui.graphics.colorspace.ColorSpace CieLab;
+    property public final androidx.ui.graphics.colorspace.ColorSpace CieXyz;
+    property public final androidx.ui.graphics.colorspace.Rgb DciP3;
+    property public final androidx.ui.graphics.colorspace.Rgb DisplayP3;
+    property public final androidx.ui.graphics.colorspace.Rgb ExtendedSrgb;
+    property public final androidx.ui.graphics.colorspace.Rgb LinearExtendedSrgb;
+    property public final androidx.ui.graphics.colorspace.Rgb LinearSrgb;
+    property public final androidx.ui.graphics.colorspace.Rgb Ntsc1953;
+    property public final androidx.ui.graphics.colorspace.Rgb ProPhotoRgb;
+    property public final androidx.ui.graphics.colorspace.Rgb SmpteC;
+    property public final androidx.ui.graphics.colorspace.Rgb Srgb;
+    field public static final androidx.ui.graphics.colorspace.ColorSpaces! INSTANCE;
+  }
+
+  public class Connector {
+    method public final androidx.ui.graphics.colorspace.ColorSpace getDestination();
+    method public final androidx.ui.graphics.colorspace.RenderIntent getRenderIntent();
+    method public final androidx.ui.graphics.colorspace.ColorSpace getSource();
+    method @Size(3) public final float[] transform(float r, float g, float b);
+    method @Size(min=3) public float[] transform(@Size(min=3) float[] v);
+  }
+
+  public final class Illuminant {
+    method public androidx.ui.graphics.colorspace.WhitePoint getA();
+    method public androidx.ui.graphics.colorspace.WhitePoint getB();
+    method public androidx.ui.graphics.colorspace.WhitePoint getC();
+    method public androidx.ui.graphics.colorspace.WhitePoint getD50();
+    method public androidx.ui.graphics.colorspace.WhitePoint getD55();
+    method public androidx.ui.graphics.colorspace.WhitePoint getD60();
+    method public androidx.ui.graphics.colorspace.WhitePoint getD65();
+    method public androidx.ui.graphics.colorspace.WhitePoint getD75();
+    method public androidx.ui.graphics.colorspace.WhitePoint getE();
+    property public final androidx.ui.graphics.colorspace.WhitePoint A;
+    property public final androidx.ui.graphics.colorspace.WhitePoint B;
+    property public final androidx.ui.graphics.colorspace.WhitePoint C;
+    property public final androidx.ui.graphics.colorspace.WhitePoint D50;
+    property public final androidx.ui.graphics.colorspace.WhitePoint D55;
+    property public final androidx.ui.graphics.colorspace.WhitePoint D60;
+    property public final androidx.ui.graphics.colorspace.WhitePoint D65;
+    property public final androidx.ui.graphics.colorspace.WhitePoint D75;
+    property public final androidx.ui.graphics.colorspace.WhitePoint E;
+    field public static final androidx.ui.graphics.colorspace.Illuminant! INSTANCE;
+  }
+
+  public enum RenderIntent {
+    enum_constant public static final androidx.ui.graphics.colorspace.RenderIntent Absolute;
+    enum_constant public static final androidx.ui.graphics.colorspace.RenderIntent Perceptual;
+    enum_constant public static final androidx.ui.graphics.colorspace.RenderIntent Relative;
+    enum_constant public static final androidx.ui.graphics.colorspace.RenderIntent Saturation;
+  }
+
+  public final class Rgb extends androidx.ui.graphics.colorspace.ColorSpace {
+    ctor public Rgb(@Size(min=null) String name, @Size(null) float[] toXYZ, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf);
+    ctor public Rgb(@Size(min=null) String name, @Size(min=null, max=null) float[] primaries, androidx.ui.graphics.colorspace.WhitePoint whitePoint, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> oetf, kotlin.jvm.functions.Function1<? super java.lang.Double,java.lang.Double> eotf, float min, float max);
+    ctor public Rgb(@Size(min=null) String name, @Size(null) float[] toXYZ, androidx.ui.graphics.colorspace.TransferParameters function);
+    ctor public Rgb(@Size(min=null) String name, @Size(min=null, max=null) float[] primaries, androidx.ui.graphics.colorspace.WhitePoint whitePoint, androidx.ui.graphics.colorspace.TransferParameters function);
+    ctor public Rgb(@Size(min=null) String name, @Size(null) float[] toXYZ, double gamma);
+    ctor public Rgb(@Size(min=null) String name, @Size(min=null, max=null) float[] primaries, androidx.ui.graphics.colorspace.WhitePoint whitePoint, double gamma);
+    method @Size(3) public float[] fromLinear(float r, float g, float b);
+    method @Size(min=3) public float[] fromLinear(@Size(min=3) float[] v);
+    method @Size(min=3) public float[] fromXyz(@Size(min=3) float[] v);
+    method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getEotf();
+    method @Size(9) public float[] getInverseTransform();
+    method @Size(min=9) public float[] getInverseTransform(@Size(min=9) float[] inverseTransform);
+    method public float getMaxValue(int component);
+    method public float getMinValue(int component);
+    method public kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> getOetf();
+    method @Size(6) public float[] getPrimaries();
+    method @Size(min=6) public float[] getPrimaries(@Size(min=6) float[] primaries);
+    method public androidx.ui.graphics.colorspace.TransferParameters? getTransferParameters();
+    method @Size(9) public float[] getTransform();
+    method @Size(min=9) public float[] getTransform(@Size(min=9) float[] transform);
+    method public androidx.ui.graphics.colorspace.WhitePoint getWhitePoint();
+    method public boolean isWideGamut();
+    method @Size(3) public float[] toLinear(float r, float g, float b);
+    method @Size(min=3) public float[] toLinear(@Size(min=3) float[] v);
+    method @Size(min=3) public float[] toXyz(@Size(min=3) float[] v);
+    property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> eotf;
+    property public boolean isSrgb;
+    property public boolean isWideGamut;
+    property public final kotlin.jvm.functions.Function1<java.lang.Double,java.lang.Double> oetf;
+  }
+
+  public final class TransferParameters {
+    ctor public TransferParameters(double gamma, double a, double b, double c, double d, double e, double f);
+    method public double component1();
+    method public double component2();
+    method public double component3();
+    method public double component4();
+    method public double component5();
+    method public double component6();
+    method public double component7();
+    method public androidx.ui.graphics.colorspace.TransferParameters copy(double gamma, double a, double b, double c, double d, double e, double f);
+    method public double getA();
+    method public double getB();
+    method public double getC();
+    method public double getD();
+    method public double getE();
+    method public double getF();
+    method public double getGamma();
+  }
+
+  public final class WhitePoint {
+    ctor public WhitePoint(float x, float y);
+    ctor public WhitePoint(float x, float y, float z);
+    method public float component1();
+    method public float component2();
+    method public androidx.ui.graphics.colorspace.WhitePoint copy(float x, float y);
+    method public float getX();
+    method public float getY();
+  }
+
+}
+
+package androidx.ui.graphics.vector {
+
+  public final class PathBuilder {
+    ctor public PathBuilder();
+    method public androidx.ui.graphics.vector.PathBuilder arcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, float largeArcFlag, float sweepFlag, float x1, float y1);
+    method public androidx.ui.graphics.vector.PathBuilder arcToRelative(float a, float b, float theta, float largeArcFlag, float sweepFlag, float x1, float y1);
+    method public androidx.ui.graphics.vector.PathBuilder close();
+    method public androidx.ui.graphics.vector.PathBuilder curveTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public androidx.ui.graphics.vector.PathBuilder curveToRelative(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
+    method public androidx.ui.graphics.vector.PathNode![] getNodes();
+    method public androidx.ui.graphics.vector.PathBuilder horizontalLineTo(float x);
+    method public androidx.ui.graphics.vector.PathBuilder horizontalLineToRelative(float x);
+    method public androidx.ui.graphics.vector.PathBuilder lineTo(float x, float y);
+    method public androidx.ui.graphics.vector.PathBuilder lineToRelative(float x, float y);
+    method public androidx.ui.graphics.vector.PathBuilder moveTo(float x, float y);
+    method public androidx.ui.graphics.vector.PathBuilder moveToRelative(float x, float y);
+    method public androidx.ui.graphics.vector.PathBuilder quadTo(float x1, float y1, float x2, float y2);
+    method public androidx.ui.graphics.vector.PathBuilder quadToRelative(float x1, float y1, float x2, float y2);
+    method public androidx.ui.graphics.vector.PathBuilder reflectiveCurveTo(float x1, float y1, float x2, float y2);
+    method public androidx.ui.graphics.vector.PathBuilder reflectiveCurveToRelative(float x1, float y1, float x2, float y2);
+    method public androidx.ui.graphics.vector.PathBuilder reflectiveQuadTo(float x1, float y1);
+    method public androidx.ui.graphics.vector.PathBuilder reflectiveQuadToRelative(float x1, float y1);
+    method public androidx.ui.graphics.vector.PathBuilder verticalLineTo(float y);
+    method public androidx.ui.graphics.vector.PathBuilder verticalLineToRelative(float y);
+  }
+
+  public enum PathCommand {
+    method public final char toKey();
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand ArcTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand Close;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand CurveTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand HorizontalLineTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand LineTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand MoveTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand QuadTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand ReflectiveCurveTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand ReflectiveQuadTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeArcTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeClose;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeCurveTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeHorizontalTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeLineTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeMoveTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeQuadTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeReflectiveCurveTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeReflectiveQuadTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand RelativeVerticalTo;
+    enum_constant public static final androidx.ui.graphics.vector.PathCommand VerticalLineTo;
+  }
+
+  public final class PathCommandKt {
+    ctor public PathCommandKt();
+    method public static androidx.ui.graphics.vector.PathCommand toPathCommand(char);
+  }
+
+  public final class PathNode {
+    ctor public PathNode(androidx.ui.graphics.vector.PathCommand command, float[] args);
+    method public androidx.ui.graphics.vector.PathCommand component1();
+    method public float[] component2();
+    method public androidx.ui.graphics.vector.PathNode copy(androidx.ui.graphics.vector.PathCommand command, float[] args);
+    method public float[] getArgs();
+    method public androidx.ui.graphics.vector.PathCommand getCommand();
+  }
+
+  public final class PathNodeKt {
+    ctor public PathNodeKt();
+    method public static operator StringBuilder plus(StringBuilder, androidx.ui.graphics.vector.PathNode node);
+  }
+
+  public final class PathParser {
+    ctor public PathParser();
+    method public androidx.ui.graphics.vector.PathParser addPathNodes(androidx.ui.graphics.vector.PathNode![] nodes);
+    method public void clear();
+    method public androidx.ui.graphics.vector.PathParser parsePathString(String pathData);
+    method public androidx.ui.graphics.vector.PathNode![] toNodes();
+    method public androidx.ui.graphics.Path toPath(androidx.ui.graphics.Path target = androidx.ui.graphics.Path());
+  }
+
+  public final class PathParserKt {
+    ctor public PathParserKt();
+  }
+
+}
+
+package androidx.ui.semantics {
+
+  public final class AccessibilityAction<T extends kotlin.Function<? extends kotlin.Unit>> {
+    ctor public AccessibilityAction(String? label, T action);
+    method public String? component1();
+    method public T component2();
+    method public androidx.ui.semantics.AccessibilityAction<T> copy(String? label, T action);
+    method public T getAction();
+    method public String? getLabel();
+  }
+
+  public class SemanticsPropertyKey<T> implements kotlin.properties.ReadWriteProperty<androidx.ui.semantics.SemanticsPropertyReceiver,T> {
+    ctor public SemanticsPropertyKey(String name);
+    method public final String getName();
+    method public final T! getValue(androidx.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property);
+    method public T! merge(T? existingValue, T? newValue);
+    method public final void setValue(androidx.ui.semantics.SemanticsPropertyReceiver thisRef, kotlin.reflect.KProperty<?> property, T? value);
+  }
+
+  public interface SemanticsPropertyReceiver {
+    method public operator <T> void set(androidx.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+  }
+
+}
+
+package androidx.ui.temputils {
+
+  public final class CoroutineUtilsKt {
+    ctor public CoroutineUtilsKt();
+    method public static kotlinx.coroutines.Job delay(androidx.ui.core.Duration duration, kotlin.coroutines.CoroutineContext context, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+}
+
+package androidx.ui.testutils {
+
+  public final class PointerInputTestUtilKt {
+    ctor public PointerInputTestUtilKt();
+    method public static androidx.ui.core.PointerInputChange consume(androidx.ui.core.PointerInputChange, float dx = 0f, float dy = 0f, boolean downChange = false);
+    method public static androidx.ui.core.PointerInputChange down(int id = 0, androidx.ui.core.Timestamp timestamp = 0.millisecondsToTimestamp(), float x = 0f, float y = 0f);
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function2<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges);
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function2<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange... pointerInputChanges);
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function2<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, androidx.ui.core.PointerEventPass... pointerEventPasses);
+    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.ui.core.Duration duration, float dx = 0f, float dy = 0f);
+    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.ui.core.Timestamp timestamp, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.ui.core.Timestamp timestamp);
+  }
+
+}
+
+package androidx.ui.text {
+
+  public final class TextRange {
+    ctor public TextRange(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public boolean contains(androidx.ui.text.TextRange other);
+    method public boolean contains(int offset);
+    method public androidx.ui.text.TextRange copy(int start, int end);
+    method public boolean getCollapsed();
+    method public int getEnd();
+    method public int getLength();
+    method public int getMax();
+    method public int getMin();
+    method public int getStart();
+    method public boolean intersects(androidx.ui.text.TextRange other);
+    property public final boolean collapsed;
+    property public final int length;
+    property public final int max;
+    property public final int min;
+  }
+
+  public final class TextRangeKt {
+    ctor public TextRangeKt();
+    method public static String substring(CharSequence, androidx.ui.text.TextRange range);
+  }
+
+}
+
+package androidx.ui.text.style {
+
+  public enum TextDirection {
+    enum_constant public static final androidx.ui.text.style.TextDirection Ltr;
+    enum_constant public static final androidx.ui.text.style.TextDirection Rtl;
+  }
+
+}
+
+package androidx.ui.util {
+
+  public final class Float16 implements java.lang.Comparable<androidx.ui.util.Float16> {
+    ctor public Float16(short halfValue);
+    ctor public Float16(float value);
+    ctor public Float16(double value);
+    method public androidx.ui.util.Float16 absoluteValue();
+    method public androidx.ui.util.Float16 ceil();
+    method public operator int compareTo(androidx.ui.util.Float16 other);
+    method public androidx.ui.util.Float16 floor();
+    method public int getExponent();
+    method public short getHalfValue();
+    method public androidx.ui.util.Float16 getSign();
+    method public int getSignificand();
+    method public boolean isFinite();
+    method public boolean isInfinite();
+    method public boolean isNaN();
+    method public boolean isNormalized();
+    method public androidx.ui.util.Float16 round();
+    method public int toBits();
+    method public byte toByte();
+    method public double toDouble();
+    method public float toFloat();
+    method public String toHexString();
+    method public int toInt();
+    method public long toLong();
+    method public int toRawBits();
+    method public short toShort();
+    method public androidx.ui.util.Float16 trunc();
+    method public androidx.ui.util.Float16 withSign(androidx.ui.util.Float16 sign);
+    property public final int exponent;
+    property public final androidx.ui.util.Float16 sign;
+    property public final int significand;
+    field public static final androidx.ui.util.Float16.Companion! Companion;
+    field public static final int MaxExponent = 15; // 0xf
+    field public static final int MinExponent = -14; // 0xfffffff2
+    field public static final int Size = 16; // 0x10
+  }
+
+  public static final class Float16.Companion {
+    method public androidx.ui.util.Float16 getEpsilon();
+    method public androidx.ui.util.Float16 getLowestValue();
+    method public androidx.ui.util.Float16 getMaxValue();
+    method public androidx.ui.util.Float16 getMinNormal();
+    method public androidx.ui.util.Float16 getMinValue();
+    method public androidx.ui.util.Float16 getNaN();
+    method public androidx.ui.util.Float16 getNegativeInfinity();
+    method public androidx.ui.util.Float16 getNegativeZero();
+    method public androidx.ui.util.Float16 getPositiveInfinity();
+    method public androidx.ui.util.Float16 getPositiveZero();
+    property public final androidx.ui.util.Float16 Epsilon;
+    property public final androidx.ui.util.Float16 LowestValue;
+    property public final androidx.ui.util.Float16 MaxValue;
+    property public final androidx.ui.util.Float16 MinNormal;
+    property public final androidx.ui.util.Float16 MinValue;
+    property public final androidx.ui.util.Float16 NaN;
+    property public final androidx.ui.util.Float16 NegativeInfinity;
+    property public final androidx.ui.util.Float16 NegativeZero;
+    property public final androidx.ui.util.Float16 PositiveInfinity;
+    property public final androidx.ui.util.Float16 PositiveZero;
+  }
+
+  public final class Float16Kt {
+    ctor public Float16Kt();
+    method public static androidx.ui.util.Float16 max(androidx.ui.util.Float16 x, androidx.ui.util.Float16 y);
+    method public static androidx.ui.util.Float16 min(androidx.ui.util.Float16 x, androidx.ui.util.Float16 y);
+  }
+
+}
+
+package androidx.ui.vectormath64 {
+
+  public final class Matrix2 {
+    ctor public Matrix2(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
+    ctor public Matrix2();
+    ctor public Matrix2(androidx.ui.vectormath64.Matrix2 m);
+    method public androidx.ui.vectormath64.Vector2 component1();
+    method public androidx.ui.vectormath64.Vector2 component2();
+    method public androidx.ui.vectormath64.Matrix2 copy(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
+    method public operator androidx.ui.vectormath64.Matrix2 dec();
+    method public operator androidx.ui.vectormath64.Matrix2 div(float v);
+    method public operator androidx.ui.vectormath64.Vector2 get(int column);
+    method public operator float get(int column, int row);
+    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.MatrixColumn column);
+    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
+    method public inline java.util.List<java.lang.Float> getM2storage();
+    method public androidx.ui.vectormath64.Vector2 getX();
+    method public androidx.ui.vectormath64.Vector2 getY();
+    method public operator androidx.ui.vectormath64.Matrix2 inc();
+    method public operator androidx.ui.vectormath64.Matrix2 minus(float v);
+    method public operator androidx.ui.vectormath64.Matrix2 plus(float v);
+    method public operator void set(int column, androidx.ui.vectormath64.Vector2 v);
+    method public operator void set(int column, int row, float v);
+    method public void setX(androidx.ui.vectormath64.Vector2 p);
+    method public void setY(androidx.ui.vectormath64.Vector2 p);
+    method public operator androidx.ui.vectormath64.Matrix2 times(float v);
+    method public operator androidx.ui.vectormath64.Matrix2 times(androidx.ui.vectormath64.Matrix2 m);
+    method public operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
+    method public float[] toFloatArray();
+    method public operator androidx.ui.vectormath64.Matrix2 unaryMinus();
+    property public final inline java.util.List<java.lang.Float> m2storage;
+    field public static final androidx.ui.vectormath64.Matrix2.Companion! Companion;
+  }
+
+  public static final class Matrix2.Companion {
+    method public androidx.ui.vectormath64.Matrix2 identity();
+    method public androidx.ui.vectormath64.Matrix2 of(float... a);
+  }
+
+  public final class Matrix3 {
+    ctor public Matrix3(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
+    ctor public Matrix3();
+    ctor public Matrix3(androidx.ui.vectormath64.Matrix3 m);
+    method public androidx.ui.vectormath64.Vector3 component1();
+    method public androidx.ui.vectormath64.Vector3 component2();
+    method public androidx.ui.vectormath64.Vector3 component3();
+    method public androidx.ui.vectormath64.Matrix3 copy(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
+    method public operator androidx.ui.vectormath64.Matrix3 dec();
+    method public operator androidx.ui.vectormath64.Matrix3 div(float v);
+    method public operator androidx.ui.vectormath64.Vector3 get(int column);
+    method public operator float get(int column, int row);
+    method public operator androidx.ui.vectormath64.Vector3 get(androidx.ui.vectormath64.MatrixColumn column);
+    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
+    method public inline java.util.List<java.lang.Float> getM3storage();
+    method public androidx.ui.vectormath64.Vector3 getX();
+    method public androidx.ui.vectormath64.Vector3 getY();
+    method public androidx.ui.vectormath64.Vector3 getZ();
+    method public operator androidx.ui.vectormath64.Matrix3 inc();
+    method public operator androidx.ui.vectormath64.Matrix3 minus(float v);
+    method public operator androidx.ui.vectormath64.Matrix3 plus(float v);
+    method public operator void set(int column, androidx.ui.vectormath64.Vector3 v);
+    method public operator void set(int column, int row, float v);
+    method public void setX(androidx.ui.vectormath64.Vector3 p);
+    method public void setY(androidx.ui.vectormath64.Vector3 p);
+    method public void setZ(androidx.ui.vectormath64.Vector3 p);
+    method public operator androidx.ui.vectormath64.Matrix3 times(float v);
+    method public operator androidx.ui.vectormath64.Matrix3 times(androidx.ui.vectormath64.Matrix3 m);
+    method public operator androidx.ui.vectormath64.Vector3 times(androidx.ui.vectormath64.Vector3 v);
+    method public float[] toFloatArray();
+    method public operator androidx.ui.vectormath64.Matrix3 unaryMinus();
+    property public final inline java.util.List<java.lang.Float> m3storage;
+    field public static final androidx.ui.vectormath64.Matrix3.Companion! Companion;
+  }
+
+  public static final class Matrix3.Companion {
+    method public androidx.ui.vectormath64.Matrix3 identity();
+    method public androidx.ui.vectormath64.Matrix3 of(float... a);
+  }
+
+  public final class Matrix4 {
+    ctor public Matrix4(androidx.ui.vectormath64.Vector4 x, androidx.ui.vectormath64.Vector4 y, androidx.ui.vectormath64.Vector4 z, androidx.ui.vectormath64.Vector4 w);
+    ctor public Matrix4();
+    ctor public Matrix4(androidx.ui.vectormath64.Vector3 right, androidx.ui.vectormath64.Vector3 up, androidx.ui.vectormath64.Vector3 forward, androidx.ui.vectormath64.Vector3 position);
+    ctor public Matrix4(androidx.ui.vectormath64.Matrix4 m);
+    method public void assignColumns(androidx.ui.vectormath64.Matrix4 other);
+    method public void assignFromStorage(java.util.List<java.lang.Float> storage);
+    method public androidx.ui.vectormath64.Vector4 component1();
+    method public androidx.ui.vectormath64.Vector4 component2();
+    method public androidx.ui.vectormath64.Vector4 component3();
+    method public androidx.ui.vectormath64.Vector4 component4();
+    method public androidx.ui.vectormath64.Matrix4 copy(androidx.ui.vectormath64.Vector4 x, androidx.ui.vectormath64.Vector4 y, androidx.ui.vectormath64.Vector4 z, androidx.ui.vectormath64.Vector4 w);
+    method public float copyInverse(androidx.ui.vectormath64.Matrix4 arg);
+    method public operator androidx.ui.vectormath64.Matrix4 dec();
+    method public operator androidx.ui.vectormath64.Matrix4 div(float v);
+    method public operator androidx.ui.vectormath64.Vector4 get(int column);
+    method public operator float get(int column, int row);
+    method public operator androidx.ui.vectormath64.Vector4 get(androidx.ui.vectormath64.MatrixColumn column);
+    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
+    method public float getDeterminant();
+    method public inline androidx.ui.vectormath64.Vector3 getForward();
+    method public inline java.util.List<java.lang.Float> getM4storage();
+    method public inline androidx.ui.vectormath64.Vector3 getPosition();
+    method public inline androidx.ui.vectormath64.Vector3 getRight();
+    method public androidx.ui.vectormath64.Vector3 getRotation();
+    method public androidx.ui.vectormath64.Vector4 getRow(int row);
+    method public inline androidx.ui.vectormath64.Vector3 getScale();
+    method public inline androidx.ui.vectormath64.Vector3 getTranslation();
+    method public inline androidx.ui.vectormath64.Vector3 getUp();
+    method public inline androidx.ui.vectormath64.Matrix3 getUpperLeft();
+    method public androidx.ui.vectormath64.Vector4 getW();
+    method public androidx.ui.vectormath64.Vector4 getX();
+    method public androidx.ui.vectormath64.Vector4 getY();
+    method public androidx.ui.vectormath64.Vector4 getZ();
+    method public operator androidx.ui.vectormath64.Matrix4 inc();
+    method public float invert();
+    method public operator androidx.ui.vectormath64.Matrix4 minus(float v);
+    method public androidx.ui.vectormath64.Vector3 perspectiveTransform(androidx.ui.vectormath64.Vector3 arg);
+    method public operator androidx.ui.vectormath64.Matrix4 plus(float v);
+    method public void rotateX(float radians);
+    method public void rotateY(float radians);
+    method public void rotateZ(float radians);
+    method public void scale(Object x, Float? y = null, Float? z = null);
+    method public operator void set(int column, androidx.ui.vectormath64.Vector4 v);
+    method public operator void set(int column, int row, float v);
+    method public inline void setForward(androidx.ui.vectormath64.Vector3 value);
+    method public void setFrom(androidx.ui.vectormath64.Matrix4 arg);
+    method public inline void setPosition(androidx.ui.vectormath64.Vector3 value);
+    method public inline void setRight(androidx.ui.vectormath64.Vector3 value);
+    method public void setTranslationRaw(float x, float y, float z);
+    method public inline void setUp(androidx.ui.vectormath64.Vector3 value);
+    method public void setW(androidx.ui.vectormath64.Vector4 p);
+    method public void setX(androidx.ui.vectormath64.Vector4 p);
+    method public void setY(androidx.ui.vectormath64.Vector4 p);
+    method public void setZ(androidx.ui.vectormath64.Vector4 p);
+    method public operator androidx.ui.vectormath64.Matrix4 times(float v);
+    method public operator androidx.ui.vectormath64.Matrix4 times(androidx.ui.vectormath64.Matrix4 m);
+    method public operator androidx.ui.vectormath64.Vector4 times(androidx.ui.vectormath64.Vector4 v);
+    method public operator void timesAssign(androidx.ui.vectormath64.Matrix4 m);
+    method public float[] toFloatArray();
+    method public void translate(Object x, float y = 0.0f, float z = 0.0f);
+    method public operator androidx.ui.vectormath64.Matrix4 unaryMinus();
+    property public final float determinant;
+    property public final inline androidx.ui.vectormath64.Vector3 forward;
+    property public final inline java.util.List<java.lang.Float> m4storage;
+    property public final inline androidx.ui.vectormath64.Vector3 position;
+    property public final inline androidx.ui.vectormath64.Vector3 right;
+    property public final androidx.ui.vectormath64.Vector3 rotation;
+    property public final inline androidx.ui.vectormath64.Vector3 scale;
+    property public final inline androidx.ui.vectormath64.Vector3 translation;
+    property public final inline androidx.ui.vectormath64.Vector3 up;
+    property public final inline androidx.ui.vectormath64.Matrix3 upperLeft;
+    field public static final androidx.ui.vectormath64.Matrix4.Companion! Companion;
+  }
+
+  public static final class Matrix4.Companion {
+    method public androidx.ui.vectormath64.Matrix4 diagonal3(androidx.ui.vectormath64.Vector3 scale);
+    method public androidx.ui.vectormath64.Matrix4 diagonal3Values(float x, float y, float z);
+    method public androidx.ui.vectormath64.Matrix4 identity();
+    method public androidx.ui.vectormath64.Matrix4 of(float... a);
+    method public androidx.ui.vectormath64.Matrix4 rotationX(float radians);
+    method public androidx.ui.vectormath64.Matrix4 rotationY(float radians);
+    method public androidx.ui.vectormath64.Matrix4 rotationZ(float radians);
+    method public androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 translation);
+    method public androidx.ui.vectormath64.Matrix4 translationValues(float x, float y, float z);
+    method public androidx.ui.vectormath64.Matrix4 zero();
+  }
+
+  public final class Matrix4Kt {
+    ctor public Matrix4Kt();
+    method public static Float? getAsScale(androidx.ui.vectormath64.Matrix4);
+    method public static androidx.ui.engine.geometry.Offset? getAsTranslation(androidx.ui.vectormath64.Matrix4);
+    method public static androidx.ui.engine.geometry.Rect inverseTransformRect(androidx.ui.vectormath64.Matrix4 transform, androidx.ui.engine.geometry.Rect rect);
+    method public static boolean isIdentity(androidx.ui.vectormath64.Matrix4);
+    method public static boolean matrixEquals(androidx.ui.vectormath64.Matrix4? a, androidx.ui.vectormath64.Matrix4? b);
+    method public static androidx.ui.engine.geometry.Offset transformPoint(androidx.ui.vectormath64.Matrix4, androidx.ui.engine.geometry.Offset point);
+    method public static androidx.ui.engine.geometry.Rect transformRect(androidx.ui.vectormath64.Matrix4, androidx.ui.engine.geometry.Rect rect);
+  }
+
+  public enum MatrixColumn {
+    enum_constant public static final androidx.ui.vectormath64.MatrixColumn W;
+    enum_constant public static final androidx.ui.vectormath64.MatrixColumn X;
+    enum_constant public static final androidx.ui.vectormath64.MatrixColumn Y;
+    enum_constant public static final androidx.ui.vectormath64.MatrixColumn Z;
+  }
+
+  public final class MatrixExtensionsKt {
+    ctor public MatrixExtensionsKt();
+    method public static androidx.ui.vectormath64.Matrix3 inverse(androidx.ui.vectormath64.Matrix3 m);
+    method public static androidx.ui.vectormath64.Matrix4 inverse(androidx.ui.vectormath64.Matrix4 m);
+    method public static androidx.ui.vectormath64.Matrix4 lookAt(androidx.ui.vectormath64.Vector3 eye, androidx.ui.vectormath64.Vector3 target, androidx.ui.vectormath64.Vector3 up = androidx.ui.vectormath64.Vector3(1.0));
+    method public static androidx.ui.vectormath64.Matrix4 lookTowards(androidx.ui.vectormath64.Vector3 eye, androidx.ui.vectormath64.Vector3 forward, androidx.ui.vectormath64.Vector3 up = androidx.ui.vectormath64.Vector3(1.0));
+    method public static androidx.ui.vectormath64.Matrix4 normal(androidx.ui.vectormath64.Matrix4 m);
+    method public static androidx.ui.vectormath64.Matrix4 ortho(float l, float r, float b, float t, float n, float f);
+    method public static androidx.ui.vectormath64.Matrix4 perspective(float fov, float ratio, float near, float far);
+    method public static androidx.ui.vectormath64.Matrix4 rotation(androidx.ui.vectormath64.Matrix4 m);
+    method public static androidx.ui.vectormath64.Matrix4 rotation(androidx.ui.vectormath64.Vector3 d);
+    method public static androidx.ui.vectormath64.Matrix4 rotation(androidx.ui.vectormath64.Vector3 axis, float angle);
+    method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Vector3 s);
+    method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Matrix4 m);
+    method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 t);
+    method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Matrix4 m);
+    method public static androidx.ui.vectormath64.Matrix2 transpose(androidx.ui.vectormath64.Matrix2 m);
+    method public static androidx.ui.vectormath64.Matrix3 transpose(androidx.ui.vectormath64.Matrix3 m);
+    method public static androidx.ui.vectormath64.Matrix4 transpose(androidx.ui.vectormath64.Matrix4 m);
+  }
+
+  public final class ScalarKt {
+    ctor public ScalarKt();
+    method public static inline float degrees(float v);
+    method public static inline float fract(float v);
+    method public static inline float mix(float a, float b, float x);
+    method public static inline float radians(float v);
+    method public static inline float sqr(float v);
+    field public static final float FOUR_PI = 12.566371f;
+    field public static final float HALF_PI = 1.5707964f;
+    field public static final float INV_FOUR_PI = 0.07957747f;
+    field public static final float INV_PI = 0.31830987f;
+    field public static final float INV_TWO_PI = 0.15915494f;
+    field public static final float PI = 3.1415927f;
+    field public static final float TWO_PI = 6.2831855f;
+  }
+
+  public final class Vector2 {
+    ctor public Vector2(float x, float y);
+    ctor public Vector2();
+    ctor public Vector2(androidx.ui.vectormath64.Vector2 v);
+    method public float component1();
+    method public float component2();
+    method public androidx.ui.vectormath64.Vector2 copy(float x, float y);
+    method public operator androidx.ui.vectormath64.Vector2 dec();
+    method public inline operator androidx.ui.vectormath64.Vector2 div(float v);
+    method public inline operator androidx.ui.vectormath64.Vector2 div(androidx.ui.vectormath64.Vector2 v);
+    method public operator float get(androidx.ui.vectormath64.VectorComponent index);
+    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2);
+    method public operator float get(int index);
+    method public operator androidx.ui.vectormath64.Vector2 get(int index1, int index2);
+    method public inline float getG();
+    method public inline float getR();
+    method public inline androidx.ui.vectormath64.Vector2 getRg();
+    method public inline float getS();
+    method public inline androidx.ui.vectormath64.Vector2 getSt();
+    method public inline float getT();
+    method public inline java.util.List<java.lang.Float> getV2storage();
+    method public float getX();
+    method public inline androidx.ui.vectormath64.Vector2 getXy();
+    method public float getY();
+    method public operator androidx.ui.vectormath64.Vector2 inc();
+    method public inline operator androidx.ui.vectormath64.Vector2 minus(float v);
+    method public inline operator androidx.ui.vectormath64.Vector2 minus(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector2 plus(float v);
+    method public inline operator androidx.ui.vectormath64.Vector2 plus(androidx.ui.vectormath64.Vector2 v);
+    method public operator void set(int index, float v);
+    method public operator void set(int index1, int index2, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, float v);
+    method public inline void setG(float value);
+    method public inline void setR(float value);
+    method public inline void setRg(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setS(float value);
+    method public inline void setSt(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setT(float value);
+    method public void setX(float p);
+    method public inline void setXy(androidx.ui.vectormath64.Vector2 value);
+    method public void setY(float p);
+    method public inline operator androidx.ui.vectormath64.Vector2 times(float v);
+    method public inline operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
+    method public inline androidx.ui.vectormath64.Vector2 transform(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> block);
+    method public operator androidx.ui.vectormath64.Vector2 unaryMinus();
+    property public final inline float g;
+    property public final inline float r;
+    property public final inline androidx.ui.vectormath64.Vector2 rg;
+    property public final inline float s;
+    property public final inline androidx.ui.vectormath64.Vector2 st;
+    property public final inline float t;
+    property public final inline java.util.List<java.lang.Float> v2storage;
+    property public final inline androidx.ui.vectormath64.Vector2 xy;
+  }
+
+  public final class Vector3 {
+    ctor public Vector3(float x, float y, float z);
+    ctor public Vector3();
+    ctor public Vector3(androidx.ui.vectormath64.Vector2 v, float z);
+    ctor public Vector3(androidx.ui.vectormath64.Vector3 v);
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public androidx.ui.vectormath64.Vector3 copy(float x, float y, float z);
+    method public operator androidx.ui.vectormath64.Vector3 dec();
+    method public inline operator androidx.ui.vectormath64.Vector3 div(float v);
+    method public inline operator androidx.ui.vectormath64.Vector3 div(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector3 div(androidx.ui.vectormath64.Vector3 v);
+    method public operator float get(androidx.ui.vectormath64.VectorComponent index);
+    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2);
+    method public operator androidx.ui.vectormath64.Vector3 get(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, androidx.ui.vectormath64.VectorComponent index3);
+    method public operator float get(int index);
+    method public operator androidx.ui.vectormath64.Vector2 get(int index1, int index2);
+    method public operator androidx.ui.vectormath64.Vector3 get(int index1, int index2, int index3);
+    method public inline float getB();
+    method public inline float getG();
+    method public inline float getP();
+    method public inline float getR();
+    method public inline androidx.ui.vectormath64.Vector2 getRg();
+    method public inline androidx.ui.vectormath64.Vector3 getRgb();
+    method public inline float getS();
+    method public inline androidx.ui.vectormath64.Vector2 getSt();
+    method public inline androidx.ui.vectormath64.Vector3 getStp();
+    method public inline float getT();
+    method public inline java.util.List<java.lang.Float> getV3storage();
+    method public float getX();
+    method public inline androidx.ui.vectormath64.Vector2 getXy();
+    method public inline androidx.ui.vectormath64.Vector3 getXyz();
+    method public float getY();
+    method public float getZ();
+    method public operator androidx.ui.vectormath64.Vector3 inc();
+    method public inline operator androidx.ui.vectormath64.Vector3 minus(float v);
+    method public inline operator androidx.ui.vectormath64.Vector3 minus(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector3 minus(androidx.ui.vectormath64.Vector3 v);
+    method public inline operator androidx.ui.vectormath64.Vector3 plus(float v);
+    method public inline operator androidx.ui.vectormath64.Vector3 plus(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector3 plus(androidx.ui.vectormath64.Vector3 v);
+    method public operator void set(int index, float v);
+    method public operator void set(int index1, int index2, float v);
+    method public operator void set(int index1, int index2, int index3, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, androidx.ui.vectormath64.VectorComponent index3, float v);
+    method public inline void setB(float value);
+    method public inline void setG(float value);
+    method public inline void setP(float value);
+    method public inline void setR(float value);
+    method public inline void setRg(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setRgb(androidx.ui.vectormath64.Vector3 value);
+    method public inline void setS(float value);
+    method public inline void setSt(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setStp(androidx.ui.vectormath64.Vector3 value);
+    method public inline void setT(float value);
+    method public void setX(float p);
+    method public inline void setXy(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setXyz(androidx.ui.vectormath64.Vector3 value);
+    method public void setY(float p);
+    method public void setZ(float p);
+    method public inline operator androidx.ui.vectormath64.Vector3 times(float v);
+    method public inline operator androidx.ui.vectormath64.Vector3 times(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector3 times(androidx.ui.vectormath64.Vector3 v);
+    method public inline androidx.ui.vectormath64.Vector3 transform(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> block);
+    method public operator androidx.ui.vectormath64.Vector3 unaryMinus();
+    property public final inline float b;
+    property public final inline float g;
+    property public final inline float p;
+    property public final inline float r;
+    property public final inline androidx.ui.vectormath64.Vector2 rg;
+    property public final inline androidx.ui.vectormath64.Vector3 rgb;
+    property public final inline float s;
+    property public final inline androidx.ui.vectormath64.Vector2 st;
+    property public final inline androidx.ui.vectormath64.Vector3 stp;
+    property public final inline float t;
+    property public final inline java.util.List<java.lang.Float> v3storage;
+    property public final inline androidx.ui.vectormath64.Vector2 xy;
+    property public final inline androidx.ui.vectormath64.Vector3 xyz;
+  }
+
+  public final class Vector4 {
+    ctor public Vector4(float x, float y, float z, float w);
+    ctor public Vector4();
+    ctor public Vector4(androidx.ui.vectormath64.Vector2 v, float z, float w);
+    ctor public Vector4(androidx.ui.vectormath64.Vector3 v, float w);
+    ctor public Vector4(androidx.ui.vectormath64.Vector4 v);
+    method public void assignFromStorage(java.util.List<java.lang.Float> storage);
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method public androidx.ui.vectormath64.Vector4 copy(float x, float y, float z, float w);
+    method public operator androidx.ui.vectormath64.Vector4 dec();
+    method public inline operator androidx.ui.vectormath64.Vector4 div(float v);
+    method public inline operator androidx.ui.vectormath64.Vector4 div(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 div(androidx.ui.vectormath64.Vector3 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 div(androidx.ui.vectormath64.Vector4 v);
+    method public operator float get(androidx.ui.vectormath64.VectorComponent index);
+    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2);
+    method public operator androidx.ui.vectormath64.Vector3 get(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, androidx.ui.vectormath64.VectorComponent index3);
+    method public operator androidx.ui.vectormath64.Vector4 get(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, androidx.ui.vectormath64.VectorComponent index3, androidx.ui.vectormath64.VectorComponent index4);
+    method public operator float get(int index);
+    method public operator androidx.ui.vectormath64.Vector2 get(int index1, int index2);
+    method public operator androidx.ui.vectormath64.Vector3 get(int index1, int index2, int index3);
+    method public operator androidx.ui.vectormath64.Vector4 get(int index1, int index2, int index3, int index4);
+    method public inline float getA();
+    method public inline float getB();
+    method public inline float getG();
+    method public inline float getP();
+    method public inline float getQ();
+    method public inline float getR();
+    method public inline androidx.ui.vectormath64.Vector2 getRg();
+    method public inline androidx.ui.vectormath64.Vector3 getRgb();
+    method public inline androidx.ui.vectormath64.Vector4 getRgba();
+    method public inline float getS();
+    method public inline androidx.ui.vectormath64.Vector2 getSt();
+    method public inline androidx.ui.vectormath64.Vector3 getStp();
+    method public inline androidx.ui.vectormath64.Vector4 getStpq();
+    method public inline float getT();
+    method public inline java.util.List<java.lang.Float> getV4storage();
+    method public float getW();
+    method public float getX();
+    method public inline androidx.ui.vectormath64.Vector2 getXy();
+    method public inline androidx.ui.vectormath64.Vector3 getXyz();
+    method public inline androidx.ui.vectormath64.Vector4 getXyzw();
+    method public float getY();
+    method public float getZ();
+    method public operator androidx.ui.vectormath64.Vector4 inc();
+    method public inline operator androidx.ui.vectormath64.Vector4 minus(float v);
+    method public inline operator androidx.ui.vectormath64.Vector4 minus(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 minus(androidx.ui.vectormath64.Vector3 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 minus(androidx.ui.vectormath64.Vector4 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 plus(float v);
+    method public inline operator androidx.ui.vectormath64.Vector4 plus(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 plus(androidx.ui.vectormath64.Vector3 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 plus(androidx.ui.vectormath64.Vector4 v);
+    method public operator void set(int index, float v);
+    method public operator void set(int index1, int index2, float v);
+    method public operator void set(int index1, int index2, int index3, float v);
+    method public operator void set(int index1, int index2, int index3, int index4, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, androidx.ui.vectormath64.VectorComponent index3, float v);
+    method public operator void set(androidx.ui.vectormath64.VectorComponent index1, androidx.ui.vectormath64.VectorComponent index2, androidx.ui.vectormath64.VectorComponent index3, androidx.ui.vectormath64.VectorComponent index4, float v);
+    method public inline void setA(float value);
+    method public inline void setB(float value);
+    method public inline void setG(float value);
+    method public inline void setP(float value);
+    method public inline void setQ(float value);
+    method public inline void setR(float value);
+    method public inline void setRg(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setRgb(androidx.ui.vectormath64.Vector3 value);
+    method public inline void setRgba(androidx.ui.vectormath64.Vector4 value);
+    method public inline void setS(float value);
+    method public inline void setSt(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setStp(androidx.ui.vectormath64.Vector3 value);
+    method public inline void setStpq(androidx.ui.vectormath64.Vector4 value);
+    method public inline void setT(float value);
+    method public void setW(float p);
+    method public void setX(float p);
+    method public inline void setXy(androidx.ui.vectormath64.Vector2 value);
+    method public inline void setXyz(androidx.ui.vectormath64.Vector3 value);
+    method public inline void setXyzw(androidx.ui.vectormath64.Vector4 value);
+    method public void setY(float p);
+    method public void setZ(float p);
+    method public inline operator androidx.ui.vectormath64.Vector4 times(float v);
+    method public inline operator androidx.ui.vectormath64.Vector4 times(androidx.ui.vectormath64.Vector2 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 times(androidx.ui.vectormath64.Vector3 v);
+    method public inline operator androidx.ui.vectormath64.Vector4 times(androidx.ui.vectormath64.Vector4 v);
+    method public inline androidx.ui.vectormath64.Vector4 transform(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> block);
+    method public operator androidx.ui.vectormath64.Vector4 unaryMinus();
+    property public final inline float a;
+    property public final inline float b;
+    property public final inline float g;
+    property public final inline float p;
+    property public final inline float q;
+    property public final inline float r;
+    property public final inline androidx.ui.vectormath64.Vector2 rg;
+    property public final inline androidx.ui.vectormath64.Vector3 rgb;
+    property public final inline androidx.ui.vectormath64.Vector4 rgba;
+    property public final inline float s;
+    property public final inline androidx.ui.vectormath64.Vector2 st;
+    property public final inline androidx.ui.vectormath64.Vector3 stp;
+    property public final inline androidx.ui.vectormath64.Vector4 stpq;
+    property public final inline float t;
+    property public final inline java.util.List<java.lang.Float> v4storage;
+    property public final inline androidx.ui.vectormath64.Vector2 xy;
+    property public final inline androidx.ui.vectormath64.Vector3 xyz;
+    property public final inline androidx.ui.vectormath64.Vector4 xyzw;
+  }
+
+  public enum VectorComponent {
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent A;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent B;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent G;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent P;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent Q;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent R;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent S;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent T;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent W;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent X;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent Y;
+    enum_constant public static final androidx.ui.vectormath64.VectorComponent Z;
+  }
+
+  public final class VectorExtensionsKt {
+    ctor public VectorExtensionsKt();
+    method public static inline androidx.ui.vectormath64.Vector2 abs(androidx.ui.vectormath64.Vector2 v);
+    method public static inline androidx.ui.vectormath64.Vector3 abs(androidx.ui.vectormath64.Vector3 v);
+    method public static inline androidx.ui.vectormath64.Vector4 abs(androidx.ui.vectormath64.Vector4 v);
+    method public static inline androidx.ui.vectormath64.Vector2 coerceIn(androidx.ui.vectormath64.Vector2, float min, float max);
+    method public static inline androidx.ui.vectormath64.Vector2 coerceIn(androidx.ui.vectormath64.Vector2, androidx.ui.vectormath64.Vector2 min, androidx.ui.vectormath64.Vector2 max);
+    method public static inline androidx.ui.vectormath64.Vector3 coerceIn(androidx.ui.vectormath64.Vector3, float min, float max);
+    method public static inline androidx.ui.vectormath64.Vector3 coerceIn(androidx.ui.vectormath64.Vector3, androidx.ui.vectormath64.Vector3 min, androidx.ui.vectormath64.Vector3 max);
+    method public static inline androidx.ui.vectormath64.Vector4 coerceIn(androidx.ui.vectormath64.Vector4, float min, float max);
+    method public static inline androidx.ui.vectormath64.Vector4 coerceIn(androidx.ui.vectormath64.Vector4, androidx.ui.vectormath64.Vector4 min, androidx.ui.vectormath64.Vector4 max);
+    method public static inline androidx.ui.vectormath64.Vector3 cross(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b);
+    method public static inline float distance(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b);
+    method public static inline float distance(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b);
+    method public static inline float distance(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b);
+    method public static inline operator androidx.ui.vectormath64.Vector2 div(float, androidx.ui.vectormath64.Vector2 v);
+    method public static inline operator androidx.ui.vectormath64.Vector3 div(float, androidx.ui.vectormath64.Vector3 v);
+    method public static inline operator androidx.ui.vectormath64.Vector4 div(float, androidx.ui.vectormath64.Vector4 v);
+    method public static inline float dot(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b);
+    method public static inline float dot(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b);
+    method public static inline float dot(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b);
+    method public static inline float length(androidx.ui.vectormath64.Vector2 v);
+    method public static inline float length(androidx.ui.vectormath64.Vector3 v);
+    method public static inline float length(androidx.ui.vectormath64.Vector4 v);
+    method public static inline float length2(androidx.ui.vectormath64.Vector2 v);
+    method public static inline float length2(androidx.ui.vectormath64.Vector3 v);
+    method public static inline float length2(androidx.ui.vectormath64.Vector4 v);
+    method public static inline float max(androidx.ui.vectormath64.Vector2 v);
+    method public static inline androidx.ui.vectormath64.Vector2 max(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b);
+    method public static inline float max(androidx.ui.vectormath64.Vector3 v);
+    method public static inline androidx.ui.vectormath64.Vector3 max(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b);
+    method public static inline float max(androidx.ui.vectormath64.Vector4 v);
+    method public static inline androidx.ui.vectormath64.Vector4 max(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b);
+    method public static inline float min(androidx.ui.vectormath64.Vector2 v);
+    method public static inline androidx.ui.vectormath64.Vector2 min(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b);
+    method public static inline float min(androidx.ui.vectormath64.Vector3 v);
+    method public static inline androidx.ui.vectormath64.Vector3 min(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b);
+    method public static inline float min(androidx.ui.vectormath64.Vector4 v);
+    method public static inline androidx.ui.vectormath64.Vector4 min(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b);
+    method public static inline operator androidx.ui.vectormath64.Vector2 minus(float, androidx.ui.vectormath64.Vector2 v);
+    method public static inline operator androidx.ui.vectormath64.Vector3 minus(float, androidx.ui.vectormath64.Vector3 v);
+    method public static inline operator androidx.ui.vectormath64.Vector4 minus(float, androidx.ui.vectormath64.Vector4 v);
+    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, float x);
+    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, androidx.ui.vectormath64.Vector2 x);
+    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, float x);
+    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, androidx.ui.vectormath64.Vector3 x);
+    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, float x);
+    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, androidx.ui.vectormath64.Vector4 x);
+    method public static androidx.ui.vectormath64.Vector2 normalize(androidx.ui.vectormath64.Vector2 v);
+    method public static androidx.ui.vectormath64.Vector3 normalize(androidx.ui.vectormath64.Vector3 v);
+    method public static androidx.ui.vectormath64.Vector4 normalize(androidx.ui.vectormath64.Vector4 v);
+    method public static inline operator androidx.ui.vectormath64.Vector2 plus(float, androidx.ui.vectormath64.Vector2 v);
+    method public static inline operator androidx.ui.vectormath64.Vector3 plus(float, androidx.ui.vectormath64.Vector3 v);
+    method public static inline operator androidx.ui.vectormath64.Vector4 plus(float, androidx.ui.vectormath64.Vector4 v);
+    method public static inline androidx.ui.vectormath64.Vector2 reflect(androidx.ui.vectormath64.Vector2 i, androidx.ui.vectormath64.Vector2 n);
+    method public static inline androidx.ui.vectormath64.Vector3 reflect(androidx.ui.vectormath64.Vector3 i, androidx.ui.vectormath64.Vector3 n);
+    method public static androidx.ui.vectormath64.Vector2 refract(androidx.ui.vectormath64.Vector2 i, androidx.ui.vectormath64.Vector2 n, float eta);
+    method public static androidx.ui.vectormath64.Vector3 refract(androidx.ui.vectormath64.Vector3 i, androidx.ui.vectormath64.Vector3 n, float eta);
+    method public static inline operator androidx.ui.vectormath64.Vector2 times(float, androidx.ui.vectormath64.Vector2 v);
+    method public static inline operator androidx.ui.vectormath64.Vector3 times(float, androidx.ui.vectormath64.Vector3 v);
+    method public static inline operator androidx.ui.vectormath64.Vector4 times(float, androidx.ui.vectormath64.Vector4 v);
+    method public static inline androidx.ui.vectormath64.Vector2 transform(androidx.ui.vectormath64.Vector2 v, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> block);
+    method public static inline androidx.ui.vectormath64.Vector3 transform(androidx.ui.vectormath64.Vector3 v, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> block);
+    method public static inline androidx.ui.vectormath64.Vector4 transform(androidx.ui.vectormath64.Vector4 v, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> block);
+    method public static inline infix androidx.ui.vectormath64.Vector3 x(androidx.ui.vectormath64.Vector3, androidx.ui.vectormath64.Vector3 v);
+  }
+
+}
+
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index 1df842d..a363165 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -275,6 +275,9 @@
     method public static inline operator androidx.ui.core.Dp times(float, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(double, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(int, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Size times(int, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(float, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(double, androidx.ui.core.Size size);
     method public static androidx.ui.core.Bounds toBounds(androidx.ui.core.Size);
     method public static inline androidx.ui.core.Size toSize(androidx.ui.core.Bounds);
   }
@@ -374,6 +377,7 @@
     method public int getValue();
     method public operator androidx.ui.core.IntPx minus(androidx.ui.core.IntPx other);
     method public operator androidx.ui.core.IntPx plus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.IntPx rem(int other);
     method public operator androidx.ui.core.IntPx times(float other);
     method public operator androidx.ui.core.IntPx times(double other);
     method public operator androidx.ui.core.IntPx times(int other);
@@ -421,6 +425,7 @@
     method public static operator androidx.ui.core.IntPx times(float, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(double, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(int, androidx.ui.core.IntPx other);
+    method public static inline operator androidx.ui.core.IntPxSize times(int, androidx.ui.core.IntPxSize size);
     method public static inline androidx.ui.core.Px toPx(androidx.ui.core.IntPx);
     method public static inline androidx.ui.core.PxPosition toPxPosition(androidx.ui.core.IntPxPosition);
     method public static inline androidx.ui.core.PxSize toPxSize(androidx.ui.core.IntPxSize);
@@ -443,8 +448,10 @@
     method public androidx.ui.core.IntPx component1();
     method public androidx.ui.core.IntPx component2();
     method public androidx.ui.core.IntPxSize copy(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public inline operator androidx.ui.core.IntPxSize div(int other);
     method public androidx.ui.core.IntPx getHeight();
     method public androidx.ui.core.IntPx getWidth();
+    method public inline operator androidx.ui.core.IntPxSize times(int other);
   }
 
   public interface IntrinsicMeasurable {
@@ -464,10 +471,17 @@
     method public androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.PxPosition global);
     method public androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.PxPosition local);
     method public androidx.ui.core.PxPosition localToRoot(androidx.ui.core.PxPosition local);
+    property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract androidx.ui.core.PxPosition position;
     property public abstract androidx.ui.core.PxSize size;
   }
 
+  public final class LayoutCoordinatesKt {
+    ctor public LayoutCoordinatesKt();
+    method public static inline androidx.ui.core.PxPosition getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.ui.core.PxPosition getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+  }
+
   public enum LayoutDirection {
     enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
     enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
@@ -666,6 +680,9 @@
     method public static inline operator androidx.ui.core.Px times(float, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(double, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(int, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.PxSize times(int, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(float, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(double, androidx.ui.core.PxSize size);
     method public static androidx.ui.core.PxBounds toBounds(androidx.ui.core.PxSize);
     method public static inline androidx.ui.engine.geometry.Offset toOffset(androidx.ui.core.PxPosition);
     method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxBounds);
@@ -698,8 +715,14 @@
     method public androidx.ui.core.Px component1();
     method public androidx.ui.core.Px component2();
     method public androidx.ui.core.PxSize copy(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public inline operator androidx.ui.core.PxSize div(int other);
+    method public inline operator androidx.ui.core.PxSize div(float other);
+    method public inline operator androidx.ui.core.PxSize div(double other);
     method public androidx.ui.core.Px getHeight();
     method public androidx.ui.core.Px getWidth();
+    method public inline operator androidx.ui.core.PxSize times(int other);
+    method public inline operator androidx.ui.core.PxSize times(float other);
+    method public inline operator androidx.ui.core.PxSize times(double other);
     field public static final androidx.ui.core.PxSize.Companion! Companion;
   }
 
@@ -738,8 +761,14 @@
     method public androidx.ui.core.Dp component1();
     method public androidx.ui.core.Dp component2();
     method public androidx.ui.core.Size copy(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public inline operator androidx.ui.core.Size div(int other);
+    method public inline operator androidx.ui.core.Size div(float other);
+    method public inline operator androidx.ui.core.Size div(double other);
     method public androidx.ui.core.Dp getHeight();
     method public androidx.ui.core.Dp getWidth();
+    method public inline operator androidx.ui.core.Size times(int other);
+    method public inline operator androidx.ui.core.Size times(float other);
+    method public inline operator androidx.ui.core.Size times(double other);
   }
 
   public final class Sp {
@@ -880,10 +909,10 @@
   }
 
   public static final class Outline.Generic extends androidx.ui.engine.geometry.Outline {
-    ctor public Outline.Generic(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path component1();
-    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path getPath();
+    ctor public Outline.Generic(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path component1();
+    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path getPath();
   }
 
   public static final class Outline.Rectangle extends androidx.ui.engine.geometry.Outline {
@@ -902,8 +931,8 @@
 
   public final class OutlineKt {
     ctor public OutlineKt();
-    method public static void addOutline(androidx.ui.painting.Path, androidx.ui.engine.geometry.Outline outline);
-    method public static void drawOutline(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.painting.Paint paint);
+    method public static void addOutline(androidx.ui.graphics.Path, androidx.ui.engine.geometry.Outline outline);
+    method public static void drawOutline(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.graphics.Paint paint);
   }
 
   public final class RRect {
@@ -1124,22 +1153,117 @@
 
 package androidx.ui.graphics {
 
+  public final class AndroidCanvasKt {
+    ctor public AndroidCanvasKt();
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.Image image);
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
+    method public static androidx.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+  }
+
+  public final class AndroidImageKt {
+    ctor public AndroidImageKt();
+    method public static androidx.ui.graphics.Image Image(int width, int height, androidx.ui.graphics.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Image imageFromResource(android.content.res.Resources res, int resId);
+  }
+
+  public enum BlendMode {
+    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
+    enum_constant public static final androidx.ui.graphics.BlendMode clear;
+    enum_constant public static final androidx.ui.graphics.BlendMode color;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorBurn;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorDodge;
+    enum_constant public static final androidx.ui.graphics.BlendMode darken;
+    enum_constant public static final androidx.ui.graphics.BlendMode difference;
+    enum_constant public static final androidx.ui.graphics.BlendMode dst;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode exclusion;
+    enum_constant public static final androidx.ui.graphics.BlendMode hardLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode hue;
+    enum_constant public static final androidx.ui.graphics.BlendMode lighten;
+    enum_constant public static final androidx.ui.graphics.BlendMode luminosity;
+    enum_constant public static final androidx.ui.graphics.BlendMode modulate;
+    enum_constant public static final androidx.ui.graphics.BlendMode multiply;
+    enum_constant public static final androidx.ui.graphics.BlendMode overlay;
+    enum_constant public static final androidx.ui.graphics.BlendMode plus;
+    enum_constant public static final androidx.ui.graphics.BlendMode saturation;
+    enum_constant public static final androidx.ui.graphics.BlendMode screen;
+    enum_constant public static final androidx.ui.graphics.BlendMode softLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode src;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode xor;
+  }
+
+  public enum BlurStyle {
+    enum_constant public static final androidx.ui.graphics.BlurStyle inner;
+    enum_constant public static final androidx.ui.graphics.BlurStyle normal;
+    enum_constant public static final androidx.ui.graphics.BlurStyle outer;
+    enum_constant public static final androidx.ui.graphics.BlurStyle solid;
+  }
+
   public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
+    method public void applyTo(androidx.ui.graphics.Paint p);
   }
 
   public final class BrushKt {
     ctor public BrushKt();
-    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush getEmptyBrush();
-    method public static androidx.ui.graphics.Brush obtainBrush(Object? brush);
+    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public interface Canvas {
+    method public void clipPath(androidx.ui.graphics.Path path);
+    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = ClipOp.intersect);
+    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
+    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawDoubleRoundRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
+    method public void drawPicture(androidx.ui.graphics.Picture picture);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.graphics.Paint paint);
+    method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
+    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
+    method public android.graphics.Canvas getNativeCanvas();
+    method public void restore();
+    method public void rotate(float degrees);
+    method public default void rotateRad(float radians);
+    method public void save();
+    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void scale(float sx, float sy = sx);
+    method public void skew(float sx, float sy);
+    method public default void skewRad(float sxRad, float syRad);
+    method public void translate(float dx, float dy);
+    property public abstract android.graphics.Canvas nativeCanvas;
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum ClipOp {
+    enum_constant public static final androidx.ui.graphics.ClipOp difference;
+    enum_constant public static final androidx.ui.graphics.ClipOp intersect;
   }
 
   public final class Color {
@@ -1186,6 +1310,15 @@
     property public final androidx.ui.graphics.Color Yellow;
   }
 
+  public final class ColorFilter {
+    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.BlendMode component2();
+    method public androidx.ui.graphics.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+  }
+
   public final class ColorKt {
     ctor public ColorKt();
     method public static androidx.ui.graphics.Color Color(float red, float green, float blue, float alpha = 1f, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
@@ -1197,20 +1330,271 @@
     method @ColorInt public static int toArgb(androidx.ui.graphics.Color);
   }
 
-  public final class LinearGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode);
+  public enum FilterQuality {
+    enum_constant public static final androidx.ui.graphics.FilterQuality high;
+    enum_constant public static final androidx.ui.graphics.FilterQuality low;
+    enum_constant public static final androidx.ui.graphics.FilterQuality medium;
+    enum_constant public static final androidx.ui.graphics.FilterQuality none;
   }
 
-  public final class RadialGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
+  public interface Image {
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public androidx.ui.graphics.ImageConfig getConfig();
+    method public boolean getHasAlpha();
+    method public int getHeight();
+    method public android.graphics.Bitmap getNativeImage();
+    method public int getWidth();
+    method public void prepareToDraw();
+    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public abstract androidx.ui.graphics.ImageConfig config;
+    property public abstract boolean hasAlpha;
+    property public abstract int height;
+    property public abstract android.graphics.Bitmap nativeImage;
+    property public abstract int width;
+  }
+
+  public enum ImageByteFormat {
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
+  }
+
+  public enum ImageConfig {
+    enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
+    enum_constant public static final androidx.ui.graphics.ImageConfig F16;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Gpu;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Rgb565;
+  }
+
+  public final class ImageKt {
+    ctor public ImageKt();
+  }
+
+  public enum ImageRepeat {
+    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
+  }
+
+  public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class MaskFilter {
+    ctor public MaskFilter(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public androidx.ui.graphics.BlurStyle component1();
+    method public float component2();
+    method public androidx.ui.graphics.MaskFilter copy(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public float getSigma();
+    method public androidx.ui.graphics.BlurStyle getStyle();
+    field public static final androidx.ui.graphics.MaskFilter.Companion! Companion;
+    field public static final int TYPE_BLUR = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+  }
+
+  public static final class MaskFilter.Companion {
+  }
+
+  public final class Paint {
+    ctor public Paint();
+    method public android.graphics.Paint asFrameworkPaint();
+    method public float getAlpha();
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.graphics.ColorFilter? getColorFilter();
+    method public androidx.ui.graphics.FilterQuality getFilterQuality();
+    method public androidx.ui.graphics.MaskFilter getMaskFilter();
+    method public androidx.ui.graphics.Shader? getShader();
+    method public androidx.ui.graphics.StrokeCap getStrokeCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeJoin();
+    method public float getStrokeMiterLimit();
+    method public float getStrokeWidth();
+    method public androidx.ui.graphics.PaintingStyle getStyle();
+    method public boolean isAntiAlias();
+    method public void setAlpha(float value);
+    method public void setAntiAlias(boolean value);
+    method public void setBlendMode(androidx.ui.graphics.BlendMode value);
+    method public void setColor(androidx.ui.graphics.Color color);
+    method public void setColorFilter(androidx.ui.graphics.ColorFilter? value);
+    method public void setFilterQuality(androidx.ui.graphics.FilterQuality value);
+    method public void setMaskFilter(androidx.ui.graphics.MaskFilter value);
+    method public void setShader(androidx.ui.graphics.Shader? value);
+    method public void setStrokeCap(androidx.ui.graphics.StrokeCap value);
+    method public void setStrokeJoin(androidx.ui.graphics.StrokeJoin value);
+    method public void setStrokeMiterLimit(float value);
+    method public void setStrokeWidth(float value);
+    method public void setStyle(androidx.ui.graphics.PaintingStyle value);
+    property public final float alpha;
+    property public final androidx.ui.graphics.BlendMode blendMode;
+    property public final androidx.ui.graphics.Color color;
+    property public final androidx.ui.graphics.ColorFilter? colorFilter;
+    property public final androidx.ui.graphics.FilterQuality filterQuality;
+    property public final boolean isAntiAlias;
+    property public final androidx.ui.graphics.MaskFilter maskFilter;
+    property public final androidx.ui.graphics.Shader? shader;
+    property public final androidx.ui.graphics.StrokeCap strokeCap;
+    property public final androidx.ui.graphics.StrokeJoin strokeJoin;
+    property public final float strokeMiterLimit;
+    property public final float strokeWidth;
+    property public final androidx.ui.graphics.PaintingStyle style;
+  }
+
+  public enum PaintingStyle {
+    enum_constant public static final androidx.ui.graphics.PaintingStyle fill;
+    enum_constant public static final androidx.ui.graphics.PaintingStyle stroke;
+  }
+
+  public final class Path {
+    ctor public Path(android.graphics.Path internalPath);
+    ctor public Path();
+    method public void _addRect(float left, float top, float right, float bottom);
+    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.ui.engine.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
+    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
+    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void addRect(androidx.ui.engine.geometry.Rect rect);
+    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void close();
+    method public void conicTo(float x1, float y1, float x2, float y2, float w);
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void extendWithPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
+    method public androidx.ui.engine.geometry.Rect getBounds();
+    method public androidx.ui.graphics.PathFillType getFillType();
+    method public boolean isConvex();
+    method public boolean isEmpty();
+    method public void lineTo(float dx, float dy);
+    method public void moveTo(float dx, float dy);
+    method public boolean op(androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2, androidx.ui.graphics.PathOperation operation);
+    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
+    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void relativeLineTo(float dx, float dy);
+    method public void relativeMoveTo(float dx, float dy);
+    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void reset();
+    method public void setFillType(androidx.ui.graphics.PathFillType value);
+    method public void shift(androidx.ui.engine.geometry.Offset offset);
+    method public android.graphics.Path toFrameworkPath();
+    method public androidx.ui.graphics.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
+    property public final boolean isConvex;
+    property public final boolean isEmpty;
+    field public static final androidx.ui.graphics.Path.Companion! Companion;
+  }
+
+  public static final class Path.Companion {
+    method public androidx.ui.graphics.Path combine(androidx.ui.graphics.PathOperation operation, androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2);
+  }
+
+  public enum PathFillType {
+    enum_constant public static final androidx.ui.graphics.PathFillType evenOdd;
+    enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
+  }
+
+  public enum PathOperation {
+    enum_constant public static final androidx.ui.graphics.PathOperation difference;
+    enum_constant public static final androidx.ui.graphics.PathOperation intersect;
+    enum_constant public static final androidx.ui.graphics.PathOperation reverseDifference;
+    enum_constant public static final androidx.ui.graphics.PathOperation union;
+    enum_constant public static final androidx.ui.graphics.PathOperation xor;
+  }
+
+  public final class Picture {
+    ctor public Picture(android.graphics.Picture frameworkPicture);
+    method public androidx.ui.engine.geometry.Rect cullRect();
+    method public void dispose();
+    method public android.graphics.Picture getFrameworkPicture();
+  }
+
+  public final class PictureRecorder {
+    ctor public PictureRecorder();
+    method public androidx.ui.graphics.Picture endRecording();
+    method public boolean isRecording();
+    property public final boolean isRecording;
+  }
+
+  public enum PointMode {
+    enum_constant public static final androidx.ui.graphics.PointMode lines;
+    enum_constant public static final androidx.ui.graphics.PointMode points;
+    enum_constant public static final androidx.ui.graphics.PointMode polygon;
+  }
+
+  public final class RadialGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class Shader {
+    ctor public Shader(android.graphics.Shader nativeShader);
+    method public android.graphics.Shader getNativeShader();
+  }
+
+  public class ShaderBrush implements androidx.ui.graphics.Brush {
+    ctor public ShaderBrush(androidx.ui.graphics.Shader shader);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public final androidx.ui.graphics.Shader getShader();
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static androidx.ui.graphics.Shader ImageShader(androidx.ui.graphics.Image image, androidx.ui.graphics.TileMode tileModeX = TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public final class Shadow {
+    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    ctor public Shadow();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Offset component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.graphics.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    method public androidx.ui.core.Px getBlurRadius();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.engine.geometry.Offset getOffset();
+  }
+
+  public final class ShadowKt {
+    ctor public ShadowKt();
+    method public static androidx.ui.graphics.Shadow lerp(androidx.ui.graphics.Shadow a, androidx.ui.graphics.Shadow b, float t);
   }
 
   public final class SolidColor implements androidx.ui.graphics.Brush {
     ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.SolidColor copy(androidx.ui.graphics.Color value);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public androidx.ui.graphics.Color getValue();
+  }
+
+  public enum StrokeCap {
+    enum_constant public static final androidx.ui.graphics.StrokeCap butt;
+    enum_constant public static final androidx.ui.graphics.StrokeCap round;
+    enum_constant public static final androidx.ui.graphics.StrokeCap square;
+  }
+
+  public enum StrokeJoin {
+    enum_constant public static final androidx.ui.graphics.StrokeJoin bevel;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin miter;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin round;
+  }
+
+  public enum TileMode {
+    method public final android.graphics.Shader.TileMode getNativeTileMode();
+    enum_constant public static final androidx.ui.graphics.TileMode Clamp;
+    enum_constant public static final androidx.ui.graphics.TileMode Mirror;
+    enum_constant public static final androidx.ui.graphics.TileMode Repeated;
+  }
+
+  public final class TileModeKt {
+    ctor public TileModeKt();
+    method public static android.graphics.Shader.TileMode NativeClampTileMode();
+    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
+    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
   }
 
 }
@@ -1468,7 +1852,7 @@
     method public void clear();
     method public androidx.ui.graphics.vector.PathParser parsePathString(String pathData);
     method public androidx.ui.graphics.vector.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = androidx.ui.painting.Path());
+    method public androidx.ui.graphics.Path toPath(androidx.ui.graphics.Path target = androidx.ui.graphics.Path());
   }
 
   public final class PathParserKt {
@@ -1477,363 +1861,6 @@
 
 }
 
-package androidx.ui.painting {
-
-  public final class AndroidCanvasKt {
-    ctor public AndroidCanvasKt();
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.Image image);
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
-    method public static androidx.ui.painting.Canvas Canvas(android.graphics.Canvas c);
-  }
-
-  public final class AndroidImageKt {
-    ctor public AndroidImageKt();
-    method public static androidx.ui.painting.Image Image(int width, int height, androidx.ui.painting.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method public static androidx.ui.painting.Image imageFromResource(android.content.res.Resources res, int resId);
-  }
-
-  public enum BlendMode {
-    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
-    enum_constant public static final androidx.ui.painting.BlendMode clear;
-    enum_constant public static final androidx.ui.painting.BlendMode color;
-    enum_constant public static final androidx.ui.painting.BlendMode colorBurn;
-    enum_constant public static final androidx.ui.painting.BlendMode colorDodge;
-    enum_constant public static final androidx.ui.painting.BlendMode darken;
-    enum_constant public static final androidx.ui.painting.BlendMode difference;
-    enum_constant public static final androidx.ui.painting.BlendMode dst;
-    enum_constant public static final androidx.ui.painting.BlendMode dstATop;
-    enum_constant public static final androidx.ui.painting.BlendMode dstIn;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOut;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOver;
-    enum_constant public static final androidx.ui.painting.BlendMode exclusion;
-    enum_constant public static final androidx.ui.painting.BlendMode hardLight;
-    enum_constant public static final androidx.ui.painting.BlendMode hue;
-    enum_constant public static final androidx.ui.painting.BlendMode lighten;
-    enum_constant public static final androidx.ui.painting.BlendMode luminosity;
-    enum_constant public static final androidx.ui.painting.BlendMode modulate;
-    enum_constant public static final androidx.ui.painting.BlendMode multiply;
-    enum_constant public static final androidx.ui.painting.BlendMode overlay;
-    enum_constant public static final androidx.ui.painting.BlendMode plus;
-    enum_constant public static final androidx.ui.painting.BlendMode saturation;
-    enum_constant public static final androidx.ui.painting.BlendMode screen;
-    enum_constant public static final androidx.ui.painting.BlendMode softLight;
-    enum_constant public static final androidx.ui.painting.BlendMode src;
-    enum_constant public static final androidx.ui.painting.BlendMode srcATop;
-    enum_constant public static final androidx.ui.painting.BlendMode srcIn;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOut;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOver;
-    enum_constant public static final androidx.ui.painting.BlendMode xor;
-  }
-
-  public enum BlurStyle {
-    enum_constant public static final androidx.ui.painting.BlurStyle inner;
-    enum_constant public static final androidx.ui.painting.BlurStyle normal;
-    enum_constant public static final androidx.ui.painting.BlurStyle outer;
-    enum_constant public static final androidx.ui.painting.BlurStyle solid;
-  }
-
-  public interface Canvas {
-    method public void clipPath(androidx.ui.painting.Path path);
-    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.ClipOp clipOp = ClipOp.intersect);
-    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
-    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.painting.Paint paint);
-    method public void drawDRRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.painting.Paint paint);
-    method public void drawImage(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.painting.Paint paint);
-    method public void drawImageRect(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.painting.Paint paint);
-    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.painting.Paint paint);
-    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawPath(androidx.ui.painting.Path path, androidx.ui.painting.Paint paint);
-    method public void drawPicture(androidx.ui.painting.Picture picture);
-    method public void drawPoints(androidx.ui.painting.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.painting.Paint paint);
-    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.painting.Paint paint);
-    method public void drawRawPoints(androidx.ui.painting.PointMode pointMode, float[] points, androidx.ui.painting.Paint paint);
-    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.painting.BlendMode blendMode, androidx.ui.painting.Paint paint);
-    method public android.graphics.Canvas getNativeCanvas();
-    method public void restore();
-    method public void rotate(float degrees);
-    method public default void rotateRad(float radians);
-    method public void save();
-    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint);
-    method public void scale(float sx, float sy = sx);
-    method public void skew(float sx, float sy);
-    method public default void skewRad(float sxRad, float syRad);
-    method public void translate(float dx, float dy);
-    property public abstract android.graphics.Canvas nativeCanvas;
-  }
-
-  public final class CanvasKt {
-    ctor public CanvasKt();
-    method public static inline void withSave(androidx.ui.painting.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-  }
-
-  public enum ClipOp {
-    enum_constant public static final androidx.ui.painting.ClipOp difference;
-    enum_constant public static final androidx.ui.painting.ClipOp intersect;
-  }
-
-  public final class ColorFilter {
-    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.painting.BlendMode component2();
-    method public androidx.ui.painting.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-  }
-
-  public enum FilterQuality {
-    enum_constant public static final androidx.ui.painting.FilterQuality high;
-    enum_constant public static final androidx.ui.painting.FilterQuality low;
-    enum_constant public static final androidx.ui.painting.FilterQuality medium;
-    enum_constant public static final androidx.ui.painting.FilterQuality none;
-  }
-
-  public interface Image {
-    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
-    method public androidx.ui.painting.ImageConfig getConfig();
-    method public boolean getHasAlpha();
-    method public int getHeight();
-    method public android.graphics.Bitmap getNativeImage();
-    method public int getWidth();
-    method public void prepareToDraw();
-    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
-    property public abstract androidx.ui.painting.ImageConfig config;
-    property public abstract boolean hasAlpha;
-    property public abstract int height;
-    property public abstract android.graphics.Bitmap nativeImage;
-    property public abstract int width;
-  }
-
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.painting.ImageByteFormat png;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawUnmodified;
-  }
-
-  public enum ImageConfig {
-    enum_constant public static final androidx.ui.painting.ImageConfig Alpha8;
-    enum_constant public static final androidx.ui.painting.ImageConfig Argb8888;
-    enum_constant public static final androidx.ui.painting.ImageConfig F16;
-    enum_constant public static final androidx.ui.painting.ImageConfig Gpu;
-    enum_constant public static final androidx.ui.painting.ImageConfig Rgb565;
-  }
-
-  public final class ImageKt {
-    ctor public ImageKt();
-  }
-
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.painting.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatY;
-  }
-
-  public final class MaskFilter {
-    ctor public MaskFilter(androidx.ui.painting.BlurStyle style, float sigma);
-    method public androidx.ui.painting.BlurStyle component1();
-    method public float component2();
-    method public androidx.ui.painting.MaskFilter copy(androidx.ui.painting.BlurStyle style, float sigma);
-    method public float getSigma();
-    method public androidx.ui.painting.BlurStyle getStyle();
-    field public static final androidx.ui.painting.MaskFilter.Companion! Companion;
-    field public static final int TYPE_BLUR = 1; // 0x1
-    field public static final int TYPE_NONE = 0; // 0x0
-  }
-
-  public static final class MaskFilter.Companion {
-  }
-
-  public final class Paint {
-    ctor public Paint();
-    method public android.graphics.Paint asFrameworkPaint();
-    method public float getAlpha();
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.painting.ColorFilter? getColorFilter();
-    method public androidx.ui.painting.FilterQuality getFilterQuality();
-    method public androidx.ui.painting.MaskFilter getMaskFilter();
-    method public androidx.ui.painting.Shader? getShader();
-    method public androidx.ui.painting.StrokeCap getStrokeCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeJoin();
-    method public float getStrokeMiterLimit();
-    method public float getStrokeWidth();
-    method public androidx.ui.painting.PaintingStyle getStyle();
-    method public boolean isAntiAlias();
-    method public void setAlpha(float value);
-    method public void setAntiAlias(boolean value);
-    method public void setBlendMode(androidx.ui.painting.BlendMode value);
-    method public void setColor(androidx.ui.graphics.Color color);
-    method public void setColorFilter(androidx.ui.painting.ColorFilter? value);
-    method public void setFilterQuality(androidx.ui.painting.FilterQuality value);
-    method public void setMaskFilter(androidx.ui.painting.MaskFilter value);
-    method public void setShader(androidx.ui.painting.Shader? value);
-    method public void setStrokeCap(androidx.ui.painting.StrokeCap value);
-    method public void setStrokeJoin(androidx.ui.painting.StrokeJoin value);
-    method public void setStrokeMiterLimit(float value);
-    method public void setStrokeWidth(float value);
-    method public void setStyle(androidx.ui.painting.PaintingStyle value);
-    property public final float alpha;
-    property public final androidx.ui.painting.BlendMode blendMode;
-    property public final androidx.ui.graphics.Color color;
-    property public final androidx.ui.painting.ColorFilter? colorFilter;
-    property public final androidx.ui.painting.FilterQuality filterQuality;
-    property public final boolean isAntiAlias;
-    property public final androidx.ui.painting.MaskFilter maskFilter;
-    property public final androidx.ui.painting.Shader? shader;
-    property public final androidx.ui.painting.StrokeCap strokeCap;
-    property public final androidx.ui.painting.StrokeJoin strokeJoin;
-    property public final float strokeMiterLimit;
-    property public final float strokeWidth;
-    property public final androidx.ui.painting.PaintingStyle style;
-  }
-
-  public enum PaintingStyle {
-    enum_constant public static final androidx.ui.painting.PaintingStyle fill;
-    enum_constant public static final androidx.ui.painting.PaintingStyle stroke;
-  }
-
-  public final class Path {
-    ctor public Path(android.graphics.Path internalPath);
-    ctor public Path();
-    method public void _addRect(float left, float top, float right, float bottom);
-    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.engine.geometry.Rect oval);
-    method public void addPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
-    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
-    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void addRect(androidx.ui.engine.geometry.Rect rect);
-    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
-    method public void close();
-    method public void conicTo(float x1, float y1, float x2, float y2, float w);
-    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
-    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void extendWithPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
-    method public androidx.ui.engine.geometry.Rect getBounds();
-    method public androidx.ui.painting.PathFillType getFillType();
-    method public boolean isConvex();
-    method public boolean isEmpty();
-    method public void lineTo(float dx, float dy);
-    method public void moveTo(float dx, float dy);
-    method public boolean op(androidx.ui.painting.Path path1, androidx.ui.painting.Path path2, androidx.ui.painting.PathOperation operation);
-    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
-    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void relativeLineTo(float dx, float dy);
-    method public void relativeMoveTo(float dx, float dy);
-    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void reset();
-    method public void setFillType(androidx.ui.painting.PathFillType value);
-    method public void shift(androidx.ui.engine.geometry.Offset offset);
-    method public android.graphics.Path toFrameworkPath();
-    method public androidx.ui.painting.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
-    property public final boolean isConvex;
-    property public final boolean isEmpty;
-    field public static final androidx.ui.painting.Path.Companion! Companion;
-  }
-
-  public static final class Path.Companion {
-    method public androidx.ui.painting.Path combine(androidx.ui.painting.PathOperation operation, androidx.ui.painting.Path path1, androidx.ui.painting.Path path2);
-  }
-
-  public enum PathFillType {
-    enum_constant public static final androidx.ui.painting.PathFillType evenOdd;
-    enum_constant public static final androidx.ui.painting.PathFillType nonZero;
-  }
-
-  public enum PathOperation {
-    enum_constant public static final androidx.ui.painting.PathOperation difference;
-    enum_constant public static final androidx.ui.painting.PathOperation intersect;
-    enum_constant public static final androidx.ui.painting.PathOperation reverseDifference;
-    enum_constant public static final androidx.ui.painting.PathOperation union;
-    enum_constant public static final androidx.ui.painting.PathOperation xor;
-  }
-
-  public final class Picture {
-    ctor public Picture(android.graphics.Picture frameworkPicture);
-    method public androidx.ui.engine.geometry.Rect cullRect();
-    method public void dispose();
-    method public android.graphics.Picture getFrameworkPicture();
-  }
-
-  public final class PictureRecorder {
-    ctor public PictureRecorder();
-    method public androidx.ui.painting.Picture endRecording();
-    method public boolean isRecording();
-    property public final boolean isRecording;
-  }
-
-  public enum PointMode {
-    enum_constant public static final androidx.ui.painting.PointMode lines;
-    enum_constant public static final androidx.ui.painting.PointMode points;
-    enum_constant public static final androidx.ui.painting.PointMode polygon;
-  }
-
-  public final class Shader {
-    ctor public Shader(android.graphics.Shader nativeShader);
-    method public android.graphics.Shader getNativeShader();
-  }
-
-  public final class ShaderKt {
-    ctor public ShaderKt();
-    method public static androidx.ui.painting.Shader ImageShader(androidx.ui.painting.Image image, androidx.ui.painting.TileMode tileModeX = TileMode.Clamp, androidx.ui.painting.TileMode tileModeY = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-  }
-
-  public final class Shadow {
-    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    ctor public Shadow();
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.engine.geometry.Offset component2();
-    method public androidx.ui.core.Px component3();
-    method public androidx.ui.painting.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    method public androidx.ui.core.Px getBlurRadius();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.engine.geometry.Offset getOffset();
-  }
-
-  public final class ShadowKt {
-    ctor public ShadowKt();
-    method public static androidx.ui.painting.Shadow lerp(androidx.ui.painting.Shadow a, androidx.ui.painting.Shadow b, float t);
-  }
-
-  public enum StrokeCap {
-    enum_constant public static final androidx.ui.painting.StrokeCap butt;
-    enum_constant public static final androidx.ui.painting.StrokeCap round;
-    enum_constant public static final androidx.ui.painting.StrokeCap square;
-  }
-
-  public enum StrokeJoin {
-    enum_constant public static final androidx.ui.painting.StrokeJoin bevel;
-    enum_constant public static final androidx.ui.painting.StrokeJoin miter;
-    enum_constant public static final androidx.ui.painting.StrokeJoin round;
-  }
-
-  public enum TileMode {
-    method public final android.graphics.Shader.TileMode getNativeTileMode();
-    enum_constant public static final androidx.ui.painting.TileMode Clamp;
-    enum_constant public static final androidx.ui.painting.TileMode Mirror;
-    enum_constant public static final androidx.ui.painting.TileMode Repeated;
-  }
-
-  public final class TileModeKt {
-    ctor public TileModeKt();
-    method public static android.graphics.Shader.TileMode NativeClampTileMode();
-    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
-    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
-  }
-
-}
-
 package androidx.ui.semantics {
 
   public final class AccessibilityAction<T extends kotlin.Function<? extends kotlin.Unit>> {
diff --git a/ui/ui-core/api/restricted_0.1.0-dev01.txt b/ui/ui-core/api/restricted_0.1.0-dev01.txt
index 1df842d..a363165 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev01.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev01.txt
@@ -275,6 +275,9 @@
     method public static inline operator androidx.ui.core.Dp times(float, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(double, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(int, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Size times(int, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(float, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(double, androidx.ui.core.Size size);
     method public static androidx.ui.core.Bounds toBounds(androidx.ui.core.Size);
     method public static inline androidx.ui.core.Size toSize(androidx.ui.core.Bounds);
   }
@@ -374,6 +377,7 @@
     method public int getValue();
     method public operator androidx.ui.core.IntPx minus(androidx.ui.core.IntPx other);
     method public operator androidx.ui.core.IntPx plus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.IntPx rem(int other);
     method public operator androidx.ui.core.IntPx times(float other);
     method public operator androidx.ui.core.IntPx times(double other);
     method public operator androidx.ui.core.IntPx times(int other);
@@ -421,6 +425,7 @@
     method public static operator androidx.ui.core.IntPx times(float, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(double, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(int, androidx.ui.core.IntPx other);
+    method public static inline operator androidx.ui.core.IntPxSize times(int, androidx.ui.core.IntPxSize size);
     method public static inline androidx.ui.core.Px toPx(androidx.ui.core.IntPx);
     method public static inline androidx.ui.core.PxPosition toPxPosition(androidx.ui.core.IntPxPosition);
     method public static inline androidx.ui.core.PxSize toPxSize(androidx.ui.core.IntPxSize);
@@ -443,8 +448,10 @@
     method public androidx.ui.core.IntPx component1();
     method public androidx.ui.core.IntPx component2();
     method public androidx.ui.core.IntPxSize copy(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public inline operator androidx.ui.core.IntPxSize div(int other);
     method public androidx.ui.core.IntPx getHeight();
     method public androidx.ui.core.IntPx getWidth();
+    method public inline operator androidx.ui.core.IntPxSize times(int other);
   }
 
   public interface IntrinsicMeasurable {
@@ -464,10 +471,17 @@
     method public androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.PxPosition global);
     method public androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.PxPosition local);
     method public androidx.ui.core.PxPosition localToRoot(androidx.ui.core.PxPosition local);
+    property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract androidx.ui.core.PxPosition position;
     property public abstract androidx.ui.core.PxSize size;
   }
 
+  public final class LayoutCoordinatesKt {
+    ctor public LayoutCoordinatesKt();
+    method public static inline androidx.ui.core.PxPosition getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.ui.core.PxPosition getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+  }
+
   public enum LayoutDirection {
     enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
     enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
@@ -666,6 +680,9 @@
     method public static inline operator androidx.ui.core.Px times(float, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(double, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(int, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.PxSize times(int, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(float, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(double, androidx.ui.core.PxSize size);
     method public static androidx.ui.core.PxBounds toBounds(androidx.ui.core.PxSize);
     method public static inline androidx.ui.engine.geometry.Offset toOffset(androidx.ui.core.PxPosition);
     method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxBounds);
@@ -698,8 +715,14 @@
     method public androidx.ui.core.Px component1();
     method public androidx.ui.core.Px component2();
     method public androidx.ui.core.PxSize copy(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public inline operator androidx.ui.core.PxSize div(int other);
+    method public inline operator androidx.ui.core.PxSize div(float other);
+    method public inline operator androidx.ui.core.PxSize div(double other);
     method public androidx.ui.core.Px getHeight();
     method public androidx.ui.core.Px getWidth();
+    method public inline operator androidx.ui.core.PxSize times(int other);
+    method public inline operator androidx.ui.core.PxSize times(float other);
+    method public inline operator androidx.ui.core.PxSize times(double other);
     field public static final androidx.ui.core.PxSize.Companion! Companion;
   }
 
@@ -738,8 +761,14 @@
     method public androidx.ui.core.Dp component1();
     method public androidx.ui.core.Dp component2();
     method public androidx.ui.core.Size copy(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public inline operator androidx.ui.core.Size div(int other);
+    method public inline operator androidx.ui.core.Size div(float other);
+    method public inline operator androidx.ui.core.Size div(double other);
     method public androidx.ui.core.Dp getHeight();
     method public androidx.ui.core.Dp getWidth();
+    method public inline operator androidx.ui.core.Size times(int other);
+    method public inline operator androidx.ui.core.Size times(float other);
+    method public inline operator androidx.ui.core.Size times(double other);
   }
 
   public final class Sp {
@@ -880,10 +909,10 @@
   }
 
   public static final class Outline.Generic extends androidx.ui.engine.geometry.Outline {
-    ctor public Outline.Generic(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path component1();
-    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path getPath();
+    ctor public Outline.Generic(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path component1();
+    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path getPath();
   }
 
   public static final class Outline.Rectangle extends androidx.ui.engine.geometry.Outline {
@@ -902,8 +931,8 @@
 
   public final class OutlineKt {
     ctor public OutlineKt();
-    method public static void addOutline(androidx.ui.painting.Path, androidx.ui.engine.geometry.Outline outline);
-    method public static void drawOutline(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.painting.Paint paint);
+    method public static void addOutline(androidx.ui.graphics.Path, androidx.ui.engine.geometry.Outline outline);
+    method public static void drawOutline(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.graphics.Paint paint);
   }
 
   public final class RRect {
@@ -1124,22 +1153,117 @@
 
 package androidx.ui.graphics {
 
+  public final class AndroidCanvasKt {
+    ctor public AndroidCanvasKt();
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.Image image);
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
+    method public static androidx.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+  }
+
+  public final class AndroidImageKt {
+    ctor public AndroidImageKt();
+    method public static androidx.ui.graphics.Image Image(int width, int height, androidx.ui.graphics.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Image imageFromResource(android.content.res.Resources res, int resId);
+  }
+
+  public enum BlendMode {
+    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
+    enum_constant public static final androidx.ui.graphics.BlendMode clear;
+    enum_constant public static final androidx.ui.graphics.BlendMode color;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorBurn;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorDodge;
+    enum_constant public static final androidx.ui.graphics.BlendMode darken;
+    enum_constant public static final androidx.ui.graphics.BlendMode difference;
+    enum_constant public static final androidx.ui.graphics.BlendMode dst;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode exclusion;
+    enum_constant public static final androidx.ui.graphics.BlendMode hardLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode hue;
+    enum_constant public static final androidx.ui.graphics.BlendMode lighten;
+    enum_constant public static final androidx.ui.graphics.BlendMode luminosity;
+    enum_constant public static final androidx.ui.graphics.BlendMode modulate;
+    enum_constant public static final androidx.ui.graphics.BlendMode multiply;
+    enum_constant public static final androidx.ui.graphics.BlendMode overlay;
+    enum_constant public static final androidx.ui.graphics.BlendMode plus;
+    enum_constant public static final androidx.ui.graphics.BlendMode saturation;
+    enum_constant public static final androidx.ui.graphics.BlendMode screen;
+    enum_constant public static final androidx.ui.graphics.BlendMode softLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode src;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode xor;
+  }
+
+  public enum BlurStyle {
+    enum_constant public static final androidx.ui.graphics.BlurStyle inner;
+    enum_constant public static final androidx.ui.graphics.BlurStyle normal;
+    enum_constant public static final androidx.ui.graphics.BlurStyle outer;
+    enum_constant public static final androidx.ui.graphics.BlurStyle solid;
+  }
+
   public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
+    method public void applyTo(androidx.ui.graphics.Paint p);
   }
 
   public final class BrushKt {
     ctor public BrushKt();
-    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush getEmptyBrush();
-    method public static androidx.ui.graphics.Brush obtainBrush(Object? brush);
+    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public interface Canvas {
+    method public void clipPath(androidx.ui.graphics.Path path);
+    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = ClipOp.intersect);
+    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
+    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawDoubleRoundRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
+    method public void drawPicture(androidx.ui.graphics.Picture picture);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.graphics.Paint paint);
+    method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
+    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
+    method public android.graphics.Canvas getNativeCanvas();
+    method public void restore();
+    method public void rotate(float degrees);
+    method public default void rotateRad(float radians);
+    method public void save();
+    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void scale(float sx, float sy = sx);
+    method public void skew(float sx, float sy);
+    method public default void skewRad(float sxRad, float syRad);
+    method public void translate(float dx, float dy);
+    property public abstract android.graphics.Canvas nativeCanvas;
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum ClipOp {
+    enum_constant public static final androidx.ui.graphics.ClipOp difference;
+    enum_constant public static final androidx.ui.graphics.ClipOp intersect;
   }
 
   public final class Color {
@@ -1186,6 +1310,15 @@
     property public final androidx.ui.graphics.Color Yellow;
   }
 
+  public final class ColorFilter {
+    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.BlendMode component2();
+    method public androidx.ui.graphics.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+  }
+
   public final class ColorKt {
     ctor public ColorKt();
     method public static androidx.ui.graphics.Color Color(float red, float green, float blue, float alpha = 1f, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
@@ -1197,20 +1330,271 @@
     method @ColorInt public static int toArgb(androidx.ui.graphics.Color);
   }
 
-  public final class LinearGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode);
+  public enum FilterQuality {
+    enum_constant public static final androidx.ui.graphics.FilterQuality high;
+    enum_constant public static final androidx.ui.graphics.FilterQuality low;
+    enum_constant public static final androidx.ui.graphics.FilterQuality medium;
+    enum_constant public static final androidx.ui.graphics.FilterQuality none;
   }
 
-  public final class RadialGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
+  public interface Image {
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public androidx.ui.graphics.ImageConfig getConfig();
+    method public boolean getHasAlpha();
+    method public int getHeight();
+    method public android.graphics.Bitmap getNativeImage();
+    method public int getWidth();
+    method public void prepareToDraw();
+    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public abstract androidx.ui.graphics.ImageConfig config;
+    property public abstract boolean hasAlpha;
+    property public abstract int height;
+    property public abstract android.graphics.Bitmap nativeImage;
+    property public abstract int width;
+  }
+
+  public enum ImageByteFormat {
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
+  }
+
+  public enum ImageConfig {
+    enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
+    enum_constant public static final androidx.ui.graphics.ImageConfig F16;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Gpu;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Rgb565;
+  }
+
+  public final class ImageKt {
+    ctor public ImageKt();
+  }
+
+  public enum ImageRepeat {
+    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
+  }
+
+  public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class MaskFilter {
+    ctor public MaskFilter(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public androidx.ui.graphics.BlurStyle component1();
+    method public float component2();
+    method public androidx.ui.graphics.MaskFilter copy(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public float getSigma();
+    method public androidx.ui.graphics.BlurStyle getStyle();
+    field public static final androidx.ui.graphics.MaskFilter.Companion! Companion;
+    field public static final int TYPE_BLUR = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+  }
+
+  public static final class MaskFilter.Companion {
+  }
+
+  public final class Paint {
+    ctor public Paint();
+    method public android.graphics.Paint asFrameworkPaint();
+    method public float getAlpha();
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.graphics.ColorFilter? getColorFilter();
+    method public androidx.ui.graphics.FilterQuality getFilterQuality();
+    method public androidx.ui.graphics.MaskFilter getMaskFilter();
+    method public androidx.ui.graphics.Shader? getShader();
+    method public androidx.ui.graphics.StrokeCap getStrokeCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeJoin();
+    method public float getStrokeMiterLimit();
+    method public float getStrokeWidth();
+    method public androidx.ui.graphics.PaintingStyle getStyle();
+    method public boolean isAntiAlias();
+    method public void setAlpha(float value);
+    method public void setAntiAlias(boolean value);
+    method public void setBlendMode(androidx.ui.graphics.BlendMode value);
+    method public void setColor(androidx.ui.graphics.Color color);
+    method public void setColorFilter(androidx.ui.graphics.ColorFilter? value);
+    method public void setFilterQuality(androidx.ui.graphics.FilterQuality value);
+    method public void setMaskFilter(androidx.ui.graphics.MaskFilter value);
+    method public void setShader(androidx.ui.graphics.Shader? value);
+    method public void setStrokeCap(androidx.ui.graphics.StrokeCap value);
+    method public void setStrokeJoin(androidx.ui.graphics.StrokeJoin value);
+    method public void setStrokeMiterLimit(float value);
+    method public void setStrokeWidth(float value);
+    method public void setStyle(androidx.ui.graphics.PaintingStyle value);
+    property public final float alpha;
+    property public final androidx.ui.graphics.BlendMode blendMode;
+    property public final androidx.ui.graphics.Color color;
+    property public final androidx.ui.graphics.ColorFilter? colorFilter;
+    property public final androidx.ui.graphics.FilterQuality filterQuality;
+    property public final boolean isAntiAlias;
+    property public final androidx.ui.graphics.MaskFilter maskFilter;
+    property public final androidx.ui.graphics.Shader? shader;
+    property public final androidx.ui.graphics.StrokeCap strokeCap;
+    property public final androidx.ui.graphics.StrokeJoin strokeJoin;
+    property public final float strokeMiterLimit;
+    property public final float strokeWidth;
+    property public final androidx.ui.graphics.PaintingStyle style;
+  }
+
+  public enum PaintingStyle {
+    enum_constant public static final androidx.ui.graphics.PaintingStyle fill;
+    enum_constant public static final androidx.ui.graphics.PaintingStyle stroke;
+  }
+
+  public final class Path {
+    ctor public Path(android.graphics.Path internalPath);
+    ctor public Path();
+    method public void _addRect(float left, float top, float right, float bottom);
+    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.ui.engine.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
+    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
+    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void addRect(androidx.ui.engine.geometry.Rect rect);
+    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void close();
+    method public void conicTo(float x1, float y1, float x2, float y2, float w);
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void extendWithPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
+    method public androidx.ui.engine.geometry.Rect getBounds();
+    method public androidx.ui.graphics.PathFillType getFillType();
+    method public boolean isConvex();
+    method public boolean isEmpty();
+    method public void lineTo(float dx, float dy);
+    method public void moveTo(float dx, float dy);
+    method public boolean op(androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2, androidx.ui.graphics.PathOperation operation);
+    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
+    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void relativeLineTo(float dx, float dy);
+    method public void relativeMoveTo(float dx, float dy);
+    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void reset();
+    method public void setFillType(androidx.ui.graphics.PathFillType value);
+    method public void shift(androidx.ui.engine.geometry.Offset offset);
+    method public android.graphics.Path toFrameworkPath();
+    method public androidx.ui.graphics.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
+    property public final boolean isConvex;
+    property public final boolean isEmpty;
+    field public static final androidx.ui.graphics.Path.Companion! Companion;
+  }
+
+  public static final class Path.Companion {
+    method public androidx.ui.graphics.Path combine(androidx.ui.graphics.PathOperation operation, androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2);
+  }
+
+  public enum PathFillType {
+    enum_constant public static final androidx.ui.graphics.PathFillType evenOdd;
+    enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
+  }
+
+  public enum PathOperation {
+    enum_constant public static final androidx.ui.graphics.PathOperation difference;
+    enum_constant public static final androidx.ui.graphics.PathOperation intersect;
+    enum_constant public static final androidx.ui.graphics.PathOperation reverseDifference;
+    enum_constant public static final androidx.ui.graphics.PathOperation union;
+    enum_constant public static final androidx.ui.graphics.PathOperation xor;
+  }
+
+  public final class Picture {
+    ctor public Picture(android.graphics.Picture frameworkPicture);
+    method public androidx.ui.engine.geometry.Rect cullRect();
+    method public void dispose();
+    method public android.graphics.Picture getFrameworkPicture();
+  }
+
+  public final class PictureRecorder {
+    ctor public PictureRecorder();
+    method public androidx.ui.graphics.Picture endRecording();
+    method public boolean isRecording();
+    property public final boolean isRecording;
+  }
+
+  public enum PointMode {
+    enum_constant public static final androidx.ui.graphics.PointMode lines;
+    enum_constant public static final androidx.ui.graphics.PointMode points;
+    enum_constant public static final androidx.ui.graphics.PointMode polygon;
+  }
+
+  public final class RadialGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class Shader {
+    ctor public Shader(android.graphics.Shader nativeShader);
+    method public android.graphics.Shader getNativeShader();
+  }
+
+  public class ShaderBrush implements androidx.ui.graphics.Brush {
+    ctor public ShaderBrush(androidx.ui.graphics.Shader shader);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public final androidx.ui.graphics.Shader getShader();
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static androidx.ui.graphics.Shader ImageShader(androidx.ui.graphics.Image image, androidx.ui.graphics.TileMode tileModeX = TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public final class Shadow {
+    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    ctor public Shadow();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Offset component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.graphics.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    method public androidx.ui.core.Px getBlurRadius();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.engine.geometry.Offset getOffset();
+  }
+
+  public final class ShadowKt {
+    ctor public ShadowKt();
+    method public static androidx.ui.graphics.Shadow lerp(androidx.ui.graphics.Shadow a, androidx.ui.graphics.Shadow b, float t);
   }
 
   public final class SolidColor implements androidx.ui.graphics.Brush {
     ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.SolidColor copy(androidx.ui.graphics.Color value);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public androidx.ui.graphics.Color getValue();
+  }
+
+  public enum StrokeCap {
+    enum_constant public static final androidx.ui.graphics.StrokeCap butt;
+    enum_constant public static final androidx.ui.graphics.StrokeCap round;
+    enum_constant public static final androidx.ui.graphics.StrokeCap square;
+  }
+
+  public enum StrokeJoin {
+    enum_constant public static final androidx.ui.graphics.StrokeJoin bevel;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin miter;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin round;
+  }
+
+  public enum TileMode {
+    method public final android.graphics.Shader.TileMode getNativeTileMode();
+    enum_constant public static final androidx.ui.graphics.TileMode Clamp;
+    enum_constant public static final androidx.ui.graphics.TileMode Mirror;
+    enum_constant public static final androidx.ui.graphics.TileMode Repeated;
+  }
+
+  public final class TileModeKt {
+    ctor public TileModeKt();
+    method public static android.graphics.Shader.TileMode NativeClampTileMode();
+    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
+    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
   }
 
 }
@@ -1468,7 +1852,7 @@
     method public void clear();
     method public androidx.ui.graphics.vector.PathParser parsePathString(String pathData);
     method public androidx.ui.graphics.vector.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = androidx.ui.painting.Path());
+    method public androidx.ui.graphics.Path toPath(androidx.ui.graphics.Path target = androidx.ui.graphics.Path());
   }
 
   public final class PathParserKt {
@@ -1477,363 +1861,6 @@
 
 }
 
-package androidx.ui.painting {
-
-  public final class AndroidCanvasKt {
-    ctor public AndroidCanvasKt();
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.Image image);
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
-    method public static androidx.ui.painting.Canvas Canvas(android.graphics.Canvas c);
-  }
-
-  public final class AndroidImageKt {
-    ctor public AndroidImageKt();
-    method public static androidx.ui.painting.Image Image(int width, int height, androidx.ui.painting.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method public static androidx.ui.painting.Image imageFromResource(android.content.res.Resources res, int resId);
-  }
-
-  public enum BlendMode {
-    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
-    enum_constant public static final androidx.ui.painting.BlendMode clear;
-    enum_constant public static final androidx.ui.painting.BlendMode color;
-    enum_constant public static final androidx.ui.painting.BlendMode colorBurn;
-    enum_constant public static final androidx.ui.painting.BlendMode colorDodge;
-    enum_constant public static final androidx.ui.painting.BlendMode darken;
-    enum_constant public static final androidx.ui.painting.BlendMode difference;
-    enum_constant public static final androidx.ui.painting.BlendMode dst;
-    enum_constant public static final androidx.ui.painting.BlendMode dstATop;
-    enum_constant public static final androidx.ui.painting.BlendMode dstIn;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOut;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOver;
-    enum_constant public static final androidx.ui.painting.BlendMode exclusion;
-    enum_constant public static final androidx.ui.painting.BlendMode hardLight;
-    enum_constant public static final androidx.ui.painting.BlendMode hue;
-    enum_constant public static final androidx.ui.painting.BlendMode lighten;
-    enum_constant public static final androidx.ui.painting.BlendMode luminosity;
-    enum_constant public static final androidx.ui.painting.BlendMode modulate;
-    enum_constant public static final androidx.ui.painting.BlendMode multiply;
-    enum_constant public static final androidx.ui.painting.BlendMode overlay;
-    enum_constant public static final androidx.ui.painting.BlendMode plus;
-    enum_constant public static final androidx.ui.painting.BlendMode saturation;
-    enum_constant public static final androidx.ui.painting.BlendMode screen;
-    enum_constant public static final androidx.ui.painting.BlendMode softLight;
-    enum_constant public static final androidx.ui.painting.BlendMode src;
-    enum_constant public static final androidx.ui.painting.BlendMode srcATop;
-    enum_constant public static final androidx.ui.painting.BlendMode srcIn;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOut;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOver;
-    enum_constant public static final androidx.ui.painting.BlendMode xor;
-  }
-
-  public enum BlurStyle {
-    enum_constant public static final androidx.ui.painting.BlurStyle inner;
-    enum_constant public static final androidx.ui.painting.BlurStyle normal;
-    enum_constant public static final androidx.ui.painting.BlurStyle outer;
-    enum_constant public static final androidx.ui.painting.BlurStyle solid;
-  }
-
-  public interface Canvas {
-    method public void clipPath(androidx.ui.painting.Path path);
-    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.ClipOp clipOp = ClipOp.intersect);
-    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
-    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.painting.Paint paint);
-    method public void drawDRRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.painting.Paint paint);
-    method public void drawImage(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.painting.Paint paint);
-    method public void drawImageRect(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.painting.Paint paint);
-    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.painting.Paint paint);
-    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawPath(androidx.ui.painting.Path path, androidx.ui.painting.Paint paint);
-    method public void drawPicture(androidx.ui.painting.Picture picture);
-    method public void drawPoints(androidx.ui.painting.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.painting.Paint paint);
-    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.painting.Paint paint);
-    method public void drawRawPoints(androidx.ui.painting.PointMode pointMode, float[] points, androidx.ui.painting.Paint paint);
-    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.painting.BlendMode blendMode, androidx.ui.painting.Paint paint);
-    method public android.graphics.Canvas getNativeCanvas();
-    method public void restore();
-    method public void rotate(float degrees);
-    method public default void rotateRad(float radians);
-    method public void save();
-    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint);
-    method public void scale(float sx, float sy = sx);
-    method public void skew(float sx, float sy);
-    method public default void skewRad(float sxRad, float syRad);
-    method public void translate(float dx, float dy);
-    property public abstract android.graphics.Canvas nativeCanvas;
-  }
-
-  public final class CanvasKt {
-    ctor public CanvasKt();
-    method public static inline void withSave(androidx.ui.painting.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-  }
-
-  public enum ClipOp {
-    enum_constant public static final androidx.ui.painting.ClipOp difference;
-    enum_constant public static final androidx.ui.painting.ClipOp intersect;
-  }
-
-  public final class ColorFilter {
-    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.painting.BlendMode component2();
-    method public androidx.ui.painting.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-  }
-
-  public enum FilterQuality {
-    enum_constant public static final androidx.ui.painting.FilterQuality high;
-    enum_constant public static final androidx.ui.painting.FilterQuality low;
-    enum_constant public static final androidx.ui.painting.FilterQuality medium;
-    enum_constant public static final androidx.ui.painting.FilterQuality none;
-  }
-
-  public interface Image {
-    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
-    method public androidx.ui.painting.ImageConfig getConfig();
-    method public boolean getHasAlpha();
-    method public int getHeight();
-    method public android.graphics.Bitmap getNativeImage();
-    method public int getWidth();
-    method public void prepareToDraw();
-    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
-    property public abstract androidx.ui.painting.ImageConfig config;
-    property public abstract boolean hasAlpha;
-    property public abstract int height;
-    property public abstract android.graphics.Bitmap nativeImage;
-    property public abstract int width;
-  }
-
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.painting.ImageByteFormat png;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawUnmodified;
-  }
-
-  public enum ImageConfig {
-    enum_constant public static final androidx.ui.painting.ImageConfig Alpha8;
-    enum_constant public static final androidx.ui.painting.ImageConfig Argb8888;
-    enum_constant public static final androidx.ui.painting.ImageConfig F16;
-    enum_constant public static final androidx.ui.painting.ImageConfig Gpu;
-    enum_constant public static final androidx.ui.painting.ImageConfig Rgb565;
-  }
-
-  public final class ImageKt {
-    ctor public ImageKt();
-  }
-
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.painting.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatY;
-  }
-
-  public final class MaskFilter {
-    ctor public MaskFilter(androidx.ui.painting.BlurStyle style, float sigma);
-    method public androidx.ui.painting.BlurStyle component1();
-    method public float component2();
-    method public androidx.ui.painting.MaskFilter copy(androidx.ui.painting.BlurStyle style, float sigma);
-    method public float getSigma();
-    method public androidx.ui.painting.BlurStyle getStyle();
-    field public static final androidx.ui.painting.MaskFilter.Companion! Companion;
-    field public static final int TYPE_BLUR = 1; // 0x1
-    field public static final int TYPE_NONE = 0; // 0x0
-  }
-
-  public static final class MaskFilter.Companion {
-  }
-
-  public final class Paint {
-    ctor public Paint();
-    method public android.graphics.Paint asFrameworkPaint();
-    method public float getAlpha();
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.painting.ColorFilter? getColorFilter();
-    method public androidx.ui.painting.FilterQuality getFilterQuality();
-    method public androidx.ui.painting.MaskFilter getMaskFilter();
-    method public androidx.ui.painting.Shader? getShader();
-    method public androidx.ui.painting.StrokeCap getStrokeCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeJoin();
-    method public float getStrokeMiterLimit();
-    method public float getStrokeWidth();
-    method public androidx.ui.painting.PaintingStyle getStyle();
-    method public boolean isAntiAlias();
-    method public void setAlpha(float value);
-    method public void setAntiAlias(boolean value);
-    method public void setBlendMode(androidx.ui.painting.BlendMode value);
-    method public void setColor(androidx.ui.graphics.Color color);
-    method public void setColorFilter(androidx.ui.painting.ColorFilter? value);
-    method public void setFilterQuality(androidx.ui.painting.FilterQuality value);
-    method public void setMaskFilter(androidx.ui.painting.MaskFilter value);
-    method public void setShader(androidx.ui.painting.Shader? value);
-    method public void setStrokeCap(androidx.ui.painting.StrokeCap value);
-    method public void setStrokeJoin(androidx.ui.painting.StrokeJoin value);
-    method public void setStrokeMiterLimit(float value);
-    method public void setStrokeWidth(float value);
-    method public void setStyle(androidx.ui.painting.PaintingStyle value);
-    property public final float alpha;
-    property public final androidx.ui.painting.BlendMode blendMode;
-    property public final androidx.ui.graphics.Color color;
-    property public final androidx.ui.painting.ColorFilter? colorFilter;
-    property public final androidx.ui.painting.FilterQuality filterQuality;
-    property public final boolean isAntiAlias;
-    property public final androidx.ui.painting.MaskFilter maskFilter;
-    property public final androidx.ui.painting.Shader? shader;
-    property public final androidx.ui.painting.StrokeCap strokeCap;
-    property public final androidx.ui.painting.StrokeJoin strokeJoin;
-    property public final float strokeMiterLimit;
-    property public final float strokeWidth;
-    property public final androidx.ui.painting.PaintingStyle style;
-  }
-
-  public enum PaintingStyle {
-    enum_constant public static final androidx.ui.painting.PaintingStyle fill;
-    enum_constant public static final androidx.ui.painting.PaintingStyle stroke;
-  }
-
-  public final class Path {
-    ctor public Path(android.graphics.Path internalPath);
-    ctor public Path();
-    method public void _addRect(float left, float top, float right, float bottom);
-    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.engine.geometry.Rect oval);
-    method public void addPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
-    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
-    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void addRect(androidx.ui.engine.geometry.Rect rect);
-    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
-    method public void close();
-    method public void conicTo(float x1, float y1, float x2, float y2, float w);
-    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
-    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void extendWithPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
-    method public androidx.ui.engine.geometry.Rect getBounds();
-    method public androidx.ui.painting.PathFillType getFillType();
-    method public boolean isConvex();
-    method public boolean isEmpty();
-    method public void lineTo(float dx, float dy);
-    method public void moveTo(float dx, float dy);
-    method public boolean op(androidx.ui.painting.Path path1, androidx.ui.painting.Path path2, androidx.ui.painting.PathOperation operation);
-    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
-    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void relativeLineTo(float dx, float dy);
-    method public void relativeMoveTo(float dx, float dy);
-    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void reset();
-    method public void setFillType(androidx.ui.painting.PathFillType value);
-    method public void shift(androidx.ui.engine.geometry.Offset offset);
-    method public android.graphics.Path toFrameworkPath();
-    method public androidx.ui.painting.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
-    property public final boolean isConvex;
-    property public final boolean isEmpty;
-    field public static final androidx.ui.painting.Path.Companion! Companion;
-  }
-
-  public static final class Path.Companion {
-    method public androidx.ui.painting.Path combine(androidx.ui.painting.PathOperation operation, androidx.ui.painting.Path path1, androidx.ui.painting.Path path2);
-  }
-
-  public enum PathFillType {
-    enum_constant public static final androidx.ui.painting.PathFillType evenOdd;
-    enum_constant public static final androidx.ui.painting.PathFillType nonZero;
-  }
-
-  public enum PathOperation {
-    enum_constant public static final androidx.ui.painting.PathOperation difference;
-    enum_constant public static final androidx.ui.painting.PathOperation intersect;
-    enum_constant public static final androidx.ui.painting.PathOperation reverseDifference;
-    enum_constant public static final androidx.ui.painting.PathOperation union;
-    enum_constant public static final androidx.ui.painting.PathOperation xor;
-  }
-
-  public final class Picture {
-    ctor public Picture(android.graphics.Picture frameworkPicture);
-    method public androidx.ui.engine.geometry.Rect cullRect();
-    method public void dispose();
-    method public android.graphics.Picture getFrameworkPicture();
-  }
-
-  public final class PictureRecorder {
-    ctor public PictureRecorder();
-    method public androidx.ui.painting.Picture endRecording();
-    method public boolean isRecording();
-    property public final boolean isRecording;
-  }
-
-  public enum PointMode {
-    enum_constant public static final androidx.ui.painting.PointMode lines;
-    enum_constant public static final androidx.ui.painting.PointMode points;
-    enum_constant public static final androidx.ui.painting.PointMode polygon;
-  }
-
-  public final class Shader {
-    ctor public Shader(android.graphics.Shader nativeShader);
-    method public android.graphics.Shader getNativeShader();
-  }
-
-  public final class ShaderKt {
-    ctor public ShaderKt();
-    method public static androidx.ui.painting.Shader ImageShader(androidx.ui.painting.Image image, androidx.ui.painting.TileMode tileModeX = TileMode.Clamp, androidx.ui.painting.TileMode tileModeY = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-  }
-
-  public final class Shadow {
-    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    ctor public Shadow();
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.engine.geometry.Offset component2();
-    method public androidx.ui.core.Px component3();
-    method public androidx.ui.painting.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    method public androidx.ui.core.Px getBlurRadius();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.engine.geometry.Offset getOffset();
-  }
-
-  public final class ShadowKt {
-    ctor public ShadowKt();
-    method public static androidx.ui.painting.Shadow lerp(androidx.ui.painting.Shadow a, androidx.ui.painting.Shadow b, float t);
-  }
-
-  public enum StrokeCap {
-    enum_constant public static final androidx.ui.painting.StrokeCap butt;
-    enum_constant public static final androidx.ui.painting.StrokeCap round;
-    enum_constant public static final androidx.ui.painting.StrokeCap square;
-  }
-
-  public enum StrokeJoin {
-    enum_constant public static final androidx.ui.painting.StrokeJoin bevel;
-    enum_constant public static final androidx.ui.painting.StrokeJoin miter;
-    enum_constant public static final androidx.ui.painting.StrokeJoin round;
-  }
-
-  public enum TileMode {
-    method public final android.graphics.Shader.TileMode getNativeTileMode();
-    enum_constant public static final androidx.ui.painting.TileMode Clamp;
-    enum_constant public static final androidx.ui.painting.TileMode Mirror;
-    enum_constant public static final androidx.ui.painting.TileMode Repeated;
-  }
-
-  public final class TileModeKt {
-    ctor public TileModeKt();
-    method public static android.graphics.Shader.TileMode NativeClampTileMode();
-    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
-    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
-  }
-
-}
-
 package androidx.ui.semantics {
 
   public final class AccessibilityAction<T extends kotlin.Function<? extends kotlin.Unit>> {
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index 1df842d..a363165 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -275,6 +275,9 @@
     method public static inline operator androidx.ui.core.Dp times(float, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(double, androidx.ui.core.Dp other);
     method public static inline operator androidx.ui.core.Dp times(int, androidx.ui.core.Dp other);
+    method public static inline operator androidx.ui.core.Size times(int, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(float, androidx.ui.core.Size size);
+    method public static inline operator androidx.ui.core.Size times(double, androidx.ui.core.Size size);
     method public static androidx.ui.core.Bounds toBounds(androidx.ui.core.Size);
     method public static inline androidx.ui.core.Size toSize(androidx.ui.core.Bounds);
   }
@@ -374,6 +377,7 @@
     method public int getValue();
     method public operator androidx.ui.core.IntPx minus(androidx.ui.core.IntPx other);
     method public operator androidx.ui.core.IntPx plus(androidx.ui.core.IntPx other);
+    method public inline operator androidx.ui.core.IntPx rem(int other);
     method public operator androidx.ui.core.IntPx times(float other);
     method public operator androidx.ui.core.IntPx times(double other);
     method public operator androidx.ui.core.IntPx times(int other);
@@ -421,6 +425,7 @@
     method public static operator androidx.ui.core.IntPx times(float, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(double, androidx.ui.core.IntPx other);
     method public static operator androidx.ui.core.IntPx times(int, androidx.ui.core.IntPx other);
+    method public static inline operator androidx.ui.core.IntPxSize times(int, androidx.ui.core.IntPxSize size);
     method public static inline androidx.ui.core.Px toPx(androidx.ui.core.IntPx);
     method public static inline androidx.ui.core.PxPosition toPxPosition(androidx.ui.core.IntPxPosition);
     method public static inline androidx.ui.core.PxSize toPxSize(androidx.ui.core.IntPxSize);
@@ -443,8 +448,10 @@
     method public androidx.ui.core.IntPx component1();
     method public androidx.ui.core.IntPx component2();
     method public androidx.ui.core.IntPxSize copy(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height);
+    method public inline operator androidx.ui.core.IntPxSize div(int other);
     method public androidx.ui.core.IntPx getHeight();
     method public androidx.ui.core.IntPx getWidth();
+    method public inline operator androidx.ui.core.IntPxSize times(int other);
   }
 
   public interface IntrinsicMeasurable {
@@ -464,10 +471,17 @@
     method public androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.PxPosition global);
     method public androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.PxPosition local);
     method public androidx.ui.core.PxPosition localToRoot(androidx.ui.core.PxPosition local);
+    property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract androidx.ui.core.PxPosition position;
     property public abstract androidx.ui.core.PxSize size;
   }
 
+  public final class LayoutCoordinatesKt {
+    ctor public LayoutCoordinatesKt();
+    method public static inline androidx.ui.core.PxPosition getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.ui.core.PxPosition getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+  }
+
   public enum LayoutDirection {
     enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
     enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
@@ -666,6 +680,9 @@
     method public static inline operator androidx.ui.core.Px times(float, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(double, androidx.ui.core.Px other);
     method public static inline operator androidx.ui.core.Px times(int, androidx.ui.core.Px other);
+    method public static inline operator androidx.ui.core.PxSize times(int, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(float, androidx.ui.core.PxSize size);
+    method public static inline operator androidx.ui.core.PxSize times(double, androidx.ui.core.PxSize size);
     method public static androidx.ui.core.PxBounds toBounds(androidx.ui.core.PxSize);
     method public static inline androidx.ui.engine.geometry.Offset toOffset(androidx.ui.core.PxPosition);
     method public static androidx.ui.engine.geometry.Rect toRect(androidx.ui.core.PxBounds);
@@ -698,8 +715,14 @@
     method public androidx.ui.core.Px component1();
     method public androidx.ui.core.Px component2();
     method public androidx.ui.core.PxSize copy(androidx.ui.core.Px width, androidx.ui.core.Px height);
+    method public inline operator androidx.ui.core.PxSize div(int other);
+    method public inline operator androidx.ui.core.PxSize div(float other);
+    method public inline operator androidx.ui.core.PxSize div(double other);
     method public androidx.ui.core.Px getHeight();
     method public androidx.ui.core.Px getWidth();
+    method public inline operator androidx.ui.core.PxSize times(int other);
+    method public inline operator androidx.ui.core.PxSize times(float other);
+    method public inline operator androidx.ui.core.PxSize times(double other);
     field public static final androidx.ui.core.PxSize.Companion! Companion;
   }
 
@@ -738,8 +761,14 @@
     method public androidx.ui.core.Dp component1();
     method public androidx.ui.core.Dp component2();
     method public androidx.ui.core.Size copy(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public inline operator androidx.ui.core.Size div(int other);
+    method public inline operator androidx.ui.core.Size div(float other);
+    method public inline operator androidx.ui.core.Size div(double other);
     method public androidx.ui.core.Dp getHeight();
     method public androidx.ui.core.Dp getWidth();
+    method public inline operator androidx.ui.core.Size times(int other);
+    method public inline operator androidx.ui.core.Size times(float other);
+    method public inline operator androidx.ui.core.Size times(double other);
   }
 
   public final class Sp {
@@ -880,10 +909,10 @@
   }
 
   public static final class Outline.Generic extends androidx.ui.engine.geometry.Outline {
-    ctor public Outline.Generic(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path component1();
-    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.painting.Path path);
-    method public androidx.ui.painting.Path getPath();
+    ctor public Outline.Generic(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path component1();
+    method public androidx.ui.engine.geometry.Outline.Generic copy(androidx.ui.graphics.Path path);
+    method public androidx.ui.graphics.Path getPath();
   }
 
   public static final class Outline.Rectangle extends androidx.ui.engine.geometry.Outline {
@@ -902,8 +931,8 @@
 
   public final class OutlineKt {
     ctor public OutlineKt();
-    method public static void addOutline(androidx.ui.painting.Path, androidx.ui.engine.geometry.Outline outline);
-    method public static void drawOutline(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.painting.Paint paint);
+    method public static void addOutline(androidx.ui.graphics.Path, androidx.ui.engine.geometry.Outline outline);
+    method public static void drawOutline(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Outline outline, androidx.ui.graphics.Paint paint);
   }
 
   public final class RRect {
@@ -1124,22 +1153,117 @@
 
 package androidx.ui.graphics {
 
+  public final class AndroidCanvasKt {
+    ctor public AndroidCanvasKt();
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.Image image);
+    method public static androidx.ui.graphics.Canvas Canvas(androidx.ui.graphics.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
+    method public static androidx.ui.graphics.Canvas Canvas(android.graphics.Canvas c);
+  }
+
+  public final class AndroidImageKt {
+    ctor public AndroidImageKt();
+    method public static androidx.ui.graphics.Image Image(int width, int height, androidx.ui.graphics.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method public static androidx.ui.graphics.Image imageFromResource(android.content.res.Resources res, int resId);
+  }
+
+  public enum BlendMode {
+    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
+    enum_constant public static final androidx.ui.graphics.BlendMode clear;
+    enum_constant public static final androidx.ui.graphics.BlendMode color;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorBurn;
+    enum_constant public static final androidx.ui.graphics.BlendMode colorDodge;
+    enum_constant public static final androidx.ui.graphics.BlendMode darken;
+    enum_constant public static final androidx.ui.graphics.BlendMode difference;
+    enum_constant public static final androidx.ui.graphics.BlendMode dst;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode dstOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode exclusion;
+    enum_constant public static final androidx.ui.graphics.BlendMode hardLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode hue;
+    enum_constant public static final androidx.ui.graphics.BlendMode lighten;
+    enum_constant public static final androidx.ui.graphics.BlendMode luminosity;
+    enum_constant public static final androidx.ui.graphics.BlendMode modulate;
+    enum_constant public static final androidx.ui.graphics.BlendMode multiply;
+    enum_constant public static final androidx.ui.graphics.BlendMode overlay;
+    enum_constant public static final androidx.ui.graphics.BlendMode plus;
+    enum_constant public static final androidx.ui.graphics.BlendMode saturation;
+    enum_constant public static final androidx.ui.graphics.BlendMode screen;
+    enum_constant public static final androidx.ui.graphics.BlendMode softLight;
+    enum_constant public static final androidx.ui.graphics.BlendMode src;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcATop;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcIn;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOut;
+    enum_constant public static final androidx.ui.graphics.BlendMode srcOver;
+    enum_constant public static final androidx.ui.graphics.BlendMode xor;
+  }
+
+  public enum BlurStyle {
+    enum_constant public static final androidx.ui.graphics.BlurStyle inner;
+    enum_constant public static final androidx.ui.graphics.BlurStyle normal;
+    enum_constant public static final androidx.ui.graphics.BlurStyle outer;
+    enum_constant public static final androidx.ui.graphics.BlurStyle solid;
+  }
+
   public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
+    method public void applyTo(androidx.ui.graphics.Paint p);
   }
 
   public final class BrushKt {
     ctor public BrushKt();
-    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.graphics.Brush getEmptyBrush();
-    method public static androidx.ui.graphics.Brush obtainBrush(Object? brush);
+    method public static androidx.ui.graphics.LinearGradient HorizontalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Brush HorizontalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px endX, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient LinearGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.RadialGradient RadialGradient(java.util.List<androidx.ui.graphics.Color> colors, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(java.util.List<androidx.ui.graphics.Color> colors, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.LinearGradient VerticalGradient(kotlin.Pair<java.lang.Float,androidx.ui.graphics.Color>![] colorStops, androidx.ui.core.Px startY, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public interface Canvas {
+    method public void clipPath(androidx.ui.graphics.Path path);
+    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = ClipOp.intersect);
+    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
+    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawDoubleRoundRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.ui.graphics.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
+    method public void drawPicture(androidx.ui.graphics.Picture picture);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.graphics.Paint paint);
+    method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
+    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
+    method public android.graphics.Canvas getNativeCanvas();
+    method public void restore();
+    method public void rotate(float degrees);
+    method public default void rotateRad(float radians);
+    method public void save();
+    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void scale(float sx, float sy = sx);
+    method public void skew(float sx, float sy);
+    method public default void skewRad(float sxRad, float syRad);
+    method public void translate(float dx, float dy);
+    property public abstract android.graphics.Canvas nativeCanvas;
+  }
+
+  public final class CanvasKt {
+    ctor public CanvasKt();
+    method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum ClipOp {
+    enum_constant public static final androidx.ui.graphics.ClipOp difference;
+    enum_constant public static final androidx.ui.graphics.ClipOp intersect;
   }
 
   public final class Color {
@@ -1186,6 +1310,15 @@
     property public final androidx.ui.graphics.Color Yellow;
   }
 
+  public final class ColorFilter {
+    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.BlendMode component2();
+    method public androidx.ui.graphics.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.graphics.BlendMode blendMode);
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+  }
+
   public final class ColorKt {
     ctor public ColorKt();
     method public static androidx.ui.graphics.Color Color(float red, float green, float blue, float alpha = 1f, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
@@ -1197,20 +1330,271 @@
     method @ColorInt public static int toArgb(androidx.ui.graphics.Color);
   }
 
-  public final class LinearGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.painting.TileMode tileMode);
+  public enum FilterQuality {
+    enum_constant public static final androidx.ui.graphics.FilterQuality high;
+    enum_constant public static final androidx.ui.graphics.FilterQuality low;
+    enum_constant public static final androidx.ui.graphics.FilterQuality medium;
+    enum_constant public static final androidx.ui.graphics.FilterQuality none;
   }
 
-  public final class RadialGradient implements androidx.ui.graphics.Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
+  public interface Image {
+    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
+    method public androidx.ui.graphics.ImageConfig getConfig();
+    method public boolean getHasAlpha();
+    method public int getHeight();
+    method public android.graphics.Bitmap getNativeImage();
+    method public int getWidth();
+    method public void prepareToDraw();
+    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
+    property public abstract androidx.ui.graphics.ImageConfig config;
+    property public abstract boolean hasAlpha;
+    property public abstract int height;
+    property public abstract android.graphics.Bitmap nativeImage;
+    property public abstract int width;
+  }
+
+  public enum ImageByteFormat {
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
+    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
+  }
+
+  public enum ImageConfig {
+    enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
+    enum_constant public static final androidx.ui.graphics.ImageConfig F16;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Gpu;
+    enum_constant public static final androidx.ui.graphics.ImageConfig Rgb565;
+  }
+
+  public final class ImageKt {
+    ctor public ImageKt();
+  }
+
+  public enum ImageRepeat {
+    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
+    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
+  }
+
+  public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class MaskFilter {
+    ctor public MaskFilter(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public androidx.ui.graphics.BlurStyle component1();
+    method public float component2();
+    method public androidx.ui.graphics.MaskFilter copy(androidx.ui.graphics.BlurStyle style, float sigma);
+    method public float getSigma();
+    method public androidx.ui.graphics.BlurStyle getStyle();
+    field public static final androidx.ui.graphics.MaskFilter.Companion! Companion;
+    field public static final int TYPE_BLUR = 1; // 0x1
+    field public static final int TYPE_NONE = 0; // 0x0
+  }
+
+  public static final class MaskFilter.Companion {
+  }
+
+  public final class Paint {
+    ctor public Paint();
+    method public android.graphics.Paint asFrameworkPaint();
+    method public float getAlpha();
+    method public androidx.ui.graphics.BlendMode getBlendMode();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.graphics.ColorFilter? getColorFilter();
+    method public androidx.ui.graphics.FilterQuality getFilterQuality();
+    method public androidx.ui.graphics.MaskFilter getMaskFilter();
+    method public androidx.ui.graphics.Shader? getShader();
+    method public androidx.ui.graphics.StrokeCap getStrokeCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeJoin();
+    method public float getStrokeMiterLimit();
+    method public float getStrokeWidth();
+    method public androidx.ui.graphics.PaintingStyle getStyle();
+    method public boolean isAntiAlias();
+    method public void setAlpha(float value);
+    method public void setAntiAlias(boolean value);
+    method public void setBlendMode(androidx.ui.graphics.BlendMode value);
+    method public void setColor(androidx.ui.graphics.Color color);
+    method public void setColorFilter(androidx.ui.graphics.ColorFilter? value);
+    method public void setFilterQuality(androidx.ui.graphics.FilterQuality value);
+    method public void setMaskFilter(androidx.ui.graphics.MaskFilter value);
+    method public void setShader(androidx.ui.graphics.Shader? value);
+    method public void setStrokeCap(androidx.ui.graphics.StrokeCap value);
+    method public void setStrokeJoin(androidx.ui.graphics.StrokeJoin value);
+    method public void setStrokeMiterLimit(float value);
+    method public void setStrokeWidth(float value);
+    method public void setStyle(androidx.ui.graphics.PaintingStyle value);
+    property public final float alpha;
+    property public final androidx.ui.graphics.BlendMode blendMode;
+    property public final androidx.ui.graphics.Color color;
+    property public final androidx.ui.graphics.ColorFilter? colorFilter;
+    property public final androidx.ui.graphics.FilterQuality filterQuality;
+    property public final boolean isAntiAlias;
+    property public final androidx.ui.graphics.MaskFilter maskFilter;
+    property public final androidx.ui.graphics.Shader? shader;
+    property public final androidx.ui.graphics.StrokeCap strokeCap;
+    property public final androidx.ui.graphics.StrokeJoin strokeJoin;
+    property public final float strokeMiterLimit;
+    property public final float strokeWidth;
+    property public final androidx.ui.graphics.PaintingStyle style;
+  }
+
+  public enum PaintingStyle {
+    enum_constant public static final androidx.ui.graphics.PaintingStyle fill;
+    enum_constant public static final androidx.ui.graphics.PaintingStyle stroke;
+  }
+
+  public final class Path {
+    ctor public Path(android.graphics.Path internalPath);
+    ctor public Path();
+    method public void _addRect(float left, float top, float right, float bottom);
+    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.ui.engine.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
+    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
+    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
+    method public void addRect(androidx.ui.engine.geometry.Rect rect);
+    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void close();
+    method public void conicTo(float x1, float y1, float x2, float y2, float w);
+    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
+    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void extendWithPath(androidx.ui.graphics.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
+    method public androidx.ui.engine.geometry.Rect getBounds();
+    method public androidx.ui.graphics.PathFillType getFillType();
+    method public boolean isConvex();
+    method public boolean isEmpty();
+    method public void lineTo(float dx, float dy);
+    method public void moveTo(float dx, float dy);
+    method public boolean op(androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2, androidx.ui.graphics.PathOperation operation);
+    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
+    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
+    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
+    method public void relativeLineTo(float dx, float dy);
+    method public void relativeMoveTo(float dx, float dy);
+    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
+    method public void reset();
+    method public void setFillType(androidx.ui.graphics.PathFillType value);
+    method public void shift(androidx.ui.engine.geometry.Offset offset);
+    method public android.graphics.Path toFrameworkPath();
+    method public androidx.ui.graphics.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
+    property public final boolean isConvex;
+    property public final boolean isEmpty;
+    field public static final androidx.ui.graphics.Path.Companion! Companion;
+  }
+
+  public static final class Path.Companion {
+    method public androidx.ui.graphics.Path combine(androidx.ui.graphics.PathOperation operation, androidx.ui.graphics.Path path1, androidx.ui.graphics.Path path2);
+  }
+
+  public enum PathFillType {
+    enum_constant public static final androidx.ui.graphics.PathFillType evenOdd;
+    enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
+  }
+
+  public enum PathOperation {
+    enum_constant public static final androidx.ui.graphics.PathOperation difference;
+    enum_constant public static final androidx.ui.graphics.PathOperation intersect;
+    enum_constant public static final androidx.ui.graphics.PathOperation reverseDifference;
+    enum_constant public static final androidx.ui.graphics.PathOperation union;
+    enum_constant public static final androidx.ui.graphics.PathOperation xor;
+  }
+
+  public final class Picture {
+    ctor public Picture(android.graphics.Picture frameworkPicture);
+    method public androidx.ui.engine.geometry.Rect cullRect();
+    method public void dispose();
+    method public android.graphics.Picture getFrameworkPicture();
+  }
+
+  public final class PictureRecorder {
+    ctor public PictureRecorder();
+    method public androidx.ui.graphics.Picture endRecording();
+    method public boolean isRecording();
+    property public final boolean isRecording;
+  }
+
+  public enum PointMode {
+    enum_constant public static final androidx.ui.graphics.PointMode lines;
+    enum_constant public static final androidx.ui.graphics.PointMode points;
+    enum_constant public static final androidx.ui.graphics.PointMode polygon;
+  }
+
+  public final class RadialGradient extends androidx.ui.graphics.ShaderBrush {
+    method public androidx.ui.graphics.RadialGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, float centerX, float centerY, float radius, androidx.ui.graphics.TileMode tileMode);
+  }
+
+  public final class Shader {
+    ctor public Shader(android.graphics.Shader nativeShader);
+    method public android.graphics.Shader getNativeShader();
+  }
+
+  public class ShaderBrush implements androidx.ui.graphics.Brush {
+    ctor public ShaderBrush(androidx.ui.graphics.Shader shader);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public final androidx.ui.graphics.Shader getShader();
+  }
+
+  public final class ShaderKt {
+    ctor public ShaderKt();
+    method public static androidx.ui.graphics.Shader ImageShader(androidx.ui.graphics.Image image, androidx.ui.graphics.TileMode tileModeX = TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+    method public static androidx.ui.graphics.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = TileMode.Clamp);
+  }
+
+  public final class Shadow {
+    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    ctor public Shadow();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Offset component2();
+    method public androidx.ui.core.Px component3();
+    method public androidx.ui.graphics.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
+    method public androidx.ui.core.Px getBlurRadius();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.engine.geometry.Offset getOffset();
+  }
+
+  public final class ShadowKt {
+    ctor public ShadowKt();
+    method public static androidx.ui.graphics.Shadow lerp(androidx.ui.graphics.Shadow a, androidx.ui.graphics.Shadow b, float t);
   }
 
   public final class SolidColor implements androidx.ui.graphics.Brush {
     ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public androidx.ui.graphics.SolidColor copy(androidx.ui.graphics.Color value);
+    method public void applyTo(androidx.ui.graphics.Paint p);
+    method public androidx.ui.graphics.Color getValue();
+  }
+
+  public enum StrokeCap {
+    enum_constant public static final androidx.ui.graphics.StrokeCap butt;
+    enum_constant public static final androidx.ui.graphics.StrokeCap round;
+    enum_constant public static final androidx.ui.graphics.StrokeCap square;
+  }
+
+  public enum StrokeJoin {
+    enum_constant public static final androidx.ui.graphics.StrokeJoin bevel;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin miter;
+    enum_constant public static final androidx.ui.graphics.StrokeJoin round;
+  }
+
+  public enum TileMode {
+    method public final android.graphics.Shader.TileMode getNativeTileMode();
+    enum_constant public static final androidx.ui.graphics.TileMode Clamp;
+    enum_constant public static final androidx.ui.graphics.TileMode Mirror;
+    enum_constant public static final androidx.ui.graphics.TileMode Repeated;
+  }
+
+  public final class TileModeKt {
+    ctor public TileModeKt();
+    method public static android.graphics.Shader.TileMode NativeClampTileMode();
+    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
+    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
   }
 
 }
@@ -1468,7 +1852,7 @@
     method public void clear();
     method public androidx.ui.graphics.vector.PathParser parsePathString(String pathData);
     method public androidx.ui.graphics.vector.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = androidx.ui.painting.Path());
+    method public androidx.ui.graphics.Path toPath(androidx.ui.graphics.Path target = androidx.ui.graphics.Path());
   }
 
   public final class PathParserKt {
@@ -1477,363 +1861,6 @@
 
 }
 
-package androidx.ui.painting {
-
-  public final class AndroidCanvasKt {
-    ctor public AndroidCanvasKt();
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.Image image);
-    method public static androidx.ui.painting.Canvas Canvas(androidx.ui.painting.PictureRecorder recorder, androidx.ui.engine.geometry.Rect cullRect = Rect.largest);
-    method public static androidx.ui.painting.Canvas Canvas(android.graphics.Canvas c);
-  }
-
-  public final class AndroidImageKt {
-    ctor public AndroidImageKt();
-    method public static androidx.ui.painting.Image Image(int width, int height, androidx.ui.painting.ImageConfig config = ImageConfig.Argb8888, boolean hasAlpha = true, androidx.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method public static androidx.ui.painting.Image imageFromResource(android.content.res.Resources res, int resId);
-  }
-
-  public enum BlendMode {
-    method public final android.graphics.PorterDuff.Mode toPorterDuffMode();
-    enum_constant public static final androidx.ui.painting.BlendMode clear;
-    enum_constant public static final androidx.ui.painting.BlendMode color;
-    enum_constant public static final androidx.ui.painting.BlendMode colorBurn;
-    enum_constant public static final androidx.ui.painting.BlendMode colorDodge;
-    enum_constant public static final androidx.ui.painting.BlendMode darken;
-    enum_constant public static final androidx.ui.painting.BlendMode difference;
-    enum_constant public static final androidx.ui.painting.BlendMode dst;
-    enum_constant public static final androidx.ui.painting.BlendMode dstATop;
-    enum_constant public static final androidx.ui.painting.BlendMode dstIn;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOut;
-    enum_constant public static final androidx.ui.painting.BlendMode dstOver;
-    enum_constant public static final androidx.ui.painting.BlendMode exclusion;
-    enum_constant public static final androidx.ui.painting.BlendMode hardLight;
-    enum_constant public static final androidx.ui.painting.BlendMode hue;
-    enum_constant public static final androidx.ui.painting.BlendMode lighten;
-    enum_constant public static final androidx.ui.painting.BlendMode luminosity;
-    enum_constant public static final androidx.ui.painting.BlendMode modulate;
-    enum_constant public static final androidx.ui.painting.BlendMode multiply;
-    enum_constant public static final androidx.ui.painting.BlendMode overlay;
-    enum_constant public static final androidx.ui.painting.BlendMode plus;
-    enum_constant public static final androidx.ui.painting.BlendMode saturation;
-    enum_constant public static final androidx.ui.painting.BlendMode screen;
-    enum_constant public static final androidx.ui.painting.BlendMode softLight;
-    enum_constant public static final androidx.ui.painting.BlendMode src;
-    enum_constant public static final androidx.ui.painting.BlendMode srcATop;
-    enum_constant public static final androidx.ui.painting.BlendMode srcIn;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOut;
-    enum_constant public static final androidx.ui.painting.BlendMode srcOver;
-    enum_constant public static final androidx.ui.painting.BlendMode xor;
-  }
-
-  public enum BlurStyle {
-    enum_constant public static final androidx.ui.painting.BlurStyle inner;
-    enum_constant public static final androidx.ui.painting.BlurStyle normal;
-    enum_constant public static final androidx.ui.painting.BlurStyle outer;
-    enum_constant public static final androidx.ui.painting.BlurStyle solid;
-  }
-
-  public interface Canvas {
-    method public void clipPath(androidx.ui.painting.Path path);
-    method public void clipRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void clipRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.ClipOp clipOp = ClipOp.intersect);
-    method public void concat(androidx.ui.vectormath64.Matrix4 matrix4);
-    method public void drawArc(androidx.ui.engine.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public default void drawArcRad(androidx.ui.engine.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.painting.Paint paint);
-    method public void drawCircle(androidx.ui.engine.geometry.Offset center, float radius, androidx.ui.painting.Paint paint);
-    method public void drawDRRect(androidx.ui.engine.geometry.RRect outer, androidx.ui.engine.geometry.RRect inner, androidx.ui.painting.Paint paint);
-    method public void drawImage(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Offset topLeftOffset, androidx.ui.painting.Paint paint);
-    method public void drawImageRect(androidx.ui.painting.Image image, androidx.ui.engine.geometry.Rect src, androidx.ui.engine.geometry.Rect dst, androidx.ui.painting.Paint paint);
-    method public void drawLine(androidx.ui.engine.geometry.Offset p1, androidx.ui.engine.geometry.Offset p2, androidx.ui.painting.Paint paint);
-    method public void drawOval(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawPath(androidx.ui.painting.Path path, androidx.ui.painting.Paint paint);
-    method public void drawPicture(androidx.ui.painting.Picture picture);
-    method public void drawPoints(androidx.ui.painting.PointMode pointMode, java.util.List<androidx.ui.engine.geometry.Offset> points, androidx.ui.painting.Paint paint);
-    method public void drawRRect(androidx.ui.engine.geometry.RRect rrect, androidx.ui.painting.Paint paint);
-    method public void drawRawPoints(androidx.ui.painting.PointMode pointMode, float[] points, androidx.ui.painting.Paint paint);
-    method public void drawRect(androidx.ui.engine.geometry.Rect rect, androidx.ui.painting.Paint paint);
-    method public void drawVertices(androidx.ui.Vertices vertices, androidx.ui.painting.BlendMode blendMode, androidx.ui.painting.Paint paint);
-    method public android.graphics.Canvas getNativeCanvas();
-    method public void restore();
-    method public void rotate(float degrees);
-    method public default void rotateRad(float radians);
-    method public void save();
-    method public void saveLayer(androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint);
-    method public void scale(float sx, float sy = sx);
-    method public void skew(float sx, float sy);
-    method public default void skewRad(float sxRad, float syRad);
-    method public void translate(float dx, float dy);
-    property public abstract android.graphics.Canvas nativeCanvas;
-  }
-
-  public final class CanvasKt {
-    ctor public CanvasKt();
-    method public static inline void withSave(androidx.ui.painting.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.painting.Canvas, androidx.ui.engine.geometry.Rect bounds, androidx.ui.painting.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-  }
-
-  public enum ClipOp {
-    enum_constant public static final androidx.ui.painting.ClipOp difference;
-    enum_constant public static final androidx.ui.painting.ClipOp intersect;
-  }
-
-  public final class ColorFilter {
-    ctor public ColorFilter(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.painting.BlendMode component2();
-    method public androidx.ui.painting.ColorFilter copy(androidx.ui.graphics.Color color, androidx.ui.painting.BlendMode blendMode);
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-  }
-
-  public enum FilterQuality {
-    enum_constant public static final androidx.ui.painting.FilterQuality high;
-    enum_constant public static final androidx.ui.painting.FilterQuality low;
-    enum_constant public static final androidx.ui.painting.FilterQuality medium;
-    enum_constant public static final androidx.ui.painting.FilterQuality none;
-  }
-
-  public interface Image {
-    method public androidx.ui.graphics.colorspace.ColorSpace getColorSpace();
-    method public androidx.ui.painting.ImageConfig getConfig();
-    method public boolean getHasAlpha();
-    method public int getHeight();
-    method public android.graphics.Bitmap getNativeImage();
-    method public int getWidth();
-    method public void prepareToDraw();
-    property public abstract androidx.ui.graphics.colorspace.ColorSpace colorSpace;
-    property public abstract androidx.ui.painting.ImageConfig config;
-    property public abstract boolean hasAlpha;
-    property public abstract int height;
-    property public abstract android.graphics.Bitmap nativeImage;
-    property public abstract int width;
-  }
-
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.painting.ImageByteFormat png;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.painting.ImageByteFormat rawUnmodified;
-  }
-
-  public enum ImageConfig {
-    enum_constant public static final androidx.ui.painting.ImageConfig Alpha8;
-    enum_constant public static final androidx.ui.painting.ImageConfig Argb8888;
-    enum_constant public static final androidx.ui.painting.ImageConfig F16;
-    enum_constant public static final androidx.ui.painting.ImageConfig Gpu;
-    enum_constant public static final androidx.ui.painting.ImageConfig Rgb565;
-  }
-
-  public final class ImageKt {
-    ctor public ImageKt();
-  }
-
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.painting.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.painting.ImageRepeat repeatY;
-  }
-
-  public final class MaskFilter {
-    ctor public MaskFilter(androidx.ui.painting.BlurStyle style, float sigma);
-    method public androidx.ui.painting.BlurStyle component1();
-    method public float component2();
-    method public androidx.ui.painting.MaskFilter copy(androidx.ui.painting.BlurStyle style, float sigma);
-    method public float getSigma();
-    method public androidx.ui.painting.BlurStyle getStyle();
-    field public static final androidx.ui.painting.MaskFilter.Companion! Companion;
-    field public static final int TYPE_BLUR = 1; // 0x1
-    field public static final int TYPE_NONE = 0; // 0x0
-  }
-
-  public static final class MaskFilter.Companion {
-  }
-
-  public final class Paint {
-    ctor public Paint();
-    method public android.graphics.Paint asFrameworkPaint();
-    method public float getAlpha();
-    method public androidx.ui.painting.BlendMode getBlendMode();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.painting.ColorFilter? getColorFilter();
-    method public androidx.ui.painting.FilterQuality getFilterQuality();
-    method public androidx.ui.painting.MaskFilter getMaskFilter();
-    method public androidx.ui.painting.Shader? getShader();
-    method public androidx.ui.painting.StrokeCap getStrokeCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeJoin();
-    method public float getStrokeMiterLimit();
-    method public float getStrokeWidth();
-    method public androidx.ui.painting.PaintingStyle getStyle();
-    method public boolean isAntiAlias();
-    method public void setAlpha(float value);
-    method public void setAntiAlias(boolean value);
-    method public void setBlendMode(androidx.ui.painting.BlendMode value);
-    method public void setColor(androidx.ui.graphics.Color color);
-    method public void setColorFilter(androidx.ui.painting.ColorFilter? value);
-    method public void setFilterQuality(androidx.ui.painting.FilterQuality value);
-    method public void setMaskFilter(androidx.ui.painting.MaskFilter value);
-    method public void setShader(androidx.ui.painting.Shader? value);
-    method public void setStrokeCap(androidx.ui.painting.StrokeCap value);
-    method public void setStrokeJoin(androidx.ui.painting.StrokeJoin value);
-    method public void setStrokeMiterLimit(float value);
-    method public void setStrokeWidth(float value);
-    method public void setStyle(androidx.ui.painting.PaintingStyle value);
-    property public final float alpha;
-    property public final androidx.ui.painting.BlendMode blendMode;
-    property public final androidx.ui.graphics.Color color;
-    property public final androidx.ui.painting.ColorFilter? colorFilter;
-    property public final androidx.ui.painting.FilterQuality filterQuality;
-    property public final boolean isAntiAlias;
-    property public final androidx.ui.painting.MaskFilter maskFilter;
-    property public final androidx.ui.painting.Shader? shader;
-    property public final androidx.ui.painting.StrokeCap strokeCap;
-    property public final androidx.ui.painting.StrokeJoin strokeJoin;
-    property public final float strokeMiterLimit;
-    property public final float strokeWidth;
-    property public final androidx.ui.painting.PaintingStyle style;
-  }
-
-  public enum PaintingStyle {
-    enum_constant public static final androidx.ui.painting.PaintingStyle fill;
-    enum_constant public static final androidx.ui.painting.PaintingStyle stroke;
-  }
-
-  public final class Path {
-    ctor public Path(android.graphics.Path internalPath);
-    ctor public Path();
-    method public void _addRect(float left, float top, float right, float bottom);
-    method public void addArc(androidx.ui.engine.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.engine.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.engine.geometry.Rect oval);
-    method public void addPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset = Offset.zero, androidx.ui.vectormath64.Matrix4? matrix = null);
-    method public void addPolygon(java.util.List<androidx.ui.engine.geometry.Offset> points, boolean close);
-    method public void addRRect(androidx.ui.engine.geometry.RRect rrect);
-    method public void addRect(androidx.ui.engine.geometry.Rect rect);
-    method public void arcTo(androidx.ui.engine.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public void arcToPoint(androidx.ui.engine.geometry.Offset arcEnd, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void arcToRad(androidx.ui.engine.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
-    method public void close();
-    method public void conicTo(float x1, float y1, float x2, float y2, float w);
-    method public boolean contains(androidx.ui.engine.geometry.Offset offset);
-    method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void extendWithPath(androidx.ui.painting.Path path, androidx.ui.engine.geometry.Offset offset, androidx.ui.vectormath64.Matrix4 matrix);
-    method public androidx.ui.engine.geometry.Rect getBounds();
-    method public androidx.ui.painting.PathFillType getFillType();
-    method public boolean isConvex();
-    method public boolean isEmpty();
-    method public void lineTo(float dx, float dy);
-    method public void moveTo(float dx, float dy);
-    method public boolean op(androidx.ui.painting.Path path1, androidx.ui.painting.Path path2, androidx.ui.painting.PathOperation operation);
-    method public void quadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void relativeArcToPoint(androidx.ui.engine.geometry.Offset arcEndDelta, androidx.ui.engine.geometry.Radius radius = Radius.zero, float rotation = 0.0f, boolean largeArc = false, boolean clockwise = true);
-    method public void relativeConicTo(float x1, float y1, float x2, float y2, float w);
-    method public void relativeCubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public void relativeLineTo(float dx, float dy);
-    method public void relativeMoveTo(float dx, float dy);
-    method public void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
-    method public void reset();
-    method public void setFillType(androidx.ui.painting.PathFillType value);
-    method public void shift(androidx.ui.engine.geometry.Offset offset);
-    method public android.graphics.Path toFrameworkPath();
-    method public androidx.ui.painting.Path transform(androidx.ui.vectormath64.Matrix4 matrix);
-    property public final boolean isConvex;
-    property public final boolean isEmpty;
-    field public static final androidx.ui.painting.Path.Companion! Companion;
-  }
-
-  public static final class Path.Companion {
-    method public androidx.ui.painting.Path combine(androidx.ui.painting.PathOperation operation, androidx.ui.painting.Path path1, androidx.ui.painting.Path path2);
-  }
-
-  public enum PathFillType {
-    enum_constant public static final androidx.ui.painting.PathFillType evenOdd;
-    enum_constant public static final androidx.ui.painting.PathFillType nonZero;
-  }
-
-  public enum PathOperation {
-    enum_constant public static final androidx.ui.painting.PathOperation difference;
-    enum_constant public static final androidx.ui.painting.PathOperation intersect;
-    enum_constant public static final androidx.ui.painting.PathOperation reverseDifference;
-    enum_constant public static final androidx.ui.painting.PathOperation union;
-    enum_constant public static final androidx.ui.painting.PathOperation xor;
-  }
-
-  public final class Picture {
-    ctor public Picture(android.graphics.Picture frameworkPicture);
-    method public androidx.ui.engine.geometry.Rect cullRect();
-    method public void dispose();
-    method public android.graphics.Picture getFrameworkPicture();
-  }
-
-  public final class PictureRecorder {
-    ctor public PictureRecorder();
-    method public androidx.ui.painting.Picture endRecording();
-    method public boolean isRecording();
-    property public final boolean isRecording;
-  }
-
-  public enum PointMode {
-    enum_constant public static final androidx.ui.painting.PointMode lines;
-    enum_constant public static final androidx.ui.painting.PointMode points;
-    enum_constant public static final androidx.ui.painting.PointMode polygon;
-  }
-
-  public final class Shader {
-    ctor public Shader(android.graphics.Shader nativeShader);
-    method public android.graphics.Shader getNativeShader();
-  }
-
-  public final class ShaderKt {
-    ctor public ShaderKt();
-    method public static androidx.ui.painting.Shader ImageShader(androidx.ui.painting.Image image, androidx.ui.painting.TileMode tileModeX = TileMode.Clamp, androidx.ui.painting.TileMode tileModeY = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader LinearGradientShader(androidx.ui.engine.geometry.Offset from, androidx.ui.engine.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-    method public static androidx.ui.painting.Shader RadialGradientShader(androidx.ui.engine.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.painting.TileMode tileMode = TileMode.Clamp);
-  }
-
-  public final class Shadow {
-    ctor public Shadow(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    ctor public Shadow();
-    method public androidx.ui.graphics.Color component1();
-    method public androidx.ui.engine.geometry.Offset component2();
-    method public androidx.ui.core.Px component3();
-    method public androidx.ui.painting.Shadow copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Offset offset, androidx.ui.core.Px blurRadius);
-    method public androidx.ui.core.Px getBlurRadius();
-    method public androidx.ui.graphics.Color getColor();
-    method public androidx.ui.engine.geometry.Offset getOffset();
-  }
-
-  public final class ShadowKt {
-    ctor public ShadowKt();
-    method public static androidx.ui.painting.Shadow lerp(androidx.ui.painting.Shadow a, androidx.ui.painting.Shadow b, float t);
-  }
-
-  public enum StrokeCap {
-    enum_constant public static final androidx.ui.painting.StrokeCap butt;
-    enum_constant public static final androidx.ui.painting.StrokeCap round;
-    enum_constant public static final androidx.ui.painting.StrokeCap square;
-  }
-
-  public enum StrokeJoin {
-    enum_constant public static final androidx.ui.painting.StrokeJoin bevel;
-    enum_constant public static final androidx.ui.painting.StrokeJoin miter;
-    enum_constant public static final androidx.ui.painting.StrokeJoin round;
-  }
-
-  public enum TileMode {
-    method public final android.graphics.Shader.TileMode getNativeTileMode();
-    enum_constant public static final androidx.ui.painting.TileMode Clamp;
-    enum_constant public static final androidx.ui.painting.TileMode Mirror;
-    enum_constant public static final androidx.ui.painting.TileMode Repeated;
-  }
-
-  public final class TileModeKt {
-    ctor public TileModeKt();
-    method public static android.graphics.Shader.TileMode NativeClampTileMode();
-    method public static android.graphics.Shader.TileMode NativeMirrorTileMode();
-    method public static android.graphics.Shader.TileMode NativeRepeatedTileMode();
-  }
-
-}
-
 package androidx.ui.semantics {
 
   public final class AccessibilityAction<T extends kotlin.Function<? extends kotlin.Unit>> {
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/core/ImageTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/ImageTest.kt
index fc02dd1..8549c82 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/core/ImageTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/ImageTest.kt
@@ -18,8 +18,8 @@
 
 import androidx.test.filters.SmallTest
 import androidx.ui.graphics.colorspace.ColorSpaces
-import androidx.ui.painting.Image
-import androidx.ui.painting.ImageConfig
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.ImageConfig
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Test
diff --git a/ui/ui-core/src/androidTest/java/androidx/ui/painting/PathTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/painting/PathTest.kt
index 745c9d0..365d74c 100644
--- a/ui/ui-core/src/androidTest/java/androidx/ui/painting/PathTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/painting/PathTest.kt
@@ -18,7 +18,11 @@
 
 import androidx.test.filters.SmallTest
 import androidx.ui.engine.geometry.Rect
+import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.Path
 import androidx.ui.graphics.toArgb
 import androidx.ui.vectormath64.PI
 import androidx.ui.vectormath64.radians
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Density.kt b/ui/ui-core/src/main/java/androidx/ui/core/Density.kt
index bbfcf45..613b28d 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Density.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Density.kt
@@ -18,7 +18,7 @@
 
 import android.content.Context
 import androidx.ui.engine.geometry.Rect
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 
 /**
  * A density of the screen. Used for convert [Dp] to pixels.
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt b/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
index e7981fe..8e7c897 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
@@ -407,7 +407,57 @@
  * A two dimensional size using [Dp] for units
  */
 @Immutable
-data class Size(val width: Dp, val height: Dp)
+data class Size(val width: Dp, val height: Dp) {
+    /**
+     * Scales the Size by multiplying [width] and [height] by [other]
+     */
+    inline operator fun times(other: Int): Size =
+        Size(width = width * other, height = height * other)
+
+    /**
+     * Scales the Size by multiplying [width] and [height] by [other]
+     */
+    inline operator fun times(other: Float): Size =
+        Size(width = width * other, height = height * other)
+
+    /**
+     * Scales the Size by multiplying [width] and [height] by [other]
+     */
+    inline operator fun times(other: Double): Size = times(other.toFloat())
+
+    /**
+     * Scales the Size by dividing [width] and [height] by [other]
+     */
+    inline operator fun div(other: Int): Size =
+        Size(width = width / other, height = height / other)
+
+    /**
+
+     * Scales the Size by dividing [width] and [height] by [other]
+     */
+    inline operator fun div(other: Float): Size =
+        Size(width = width / other, height = height / other)
+
+    /**
+     * Scales the Size by dividing [width] and [height] by [other]
+     */
+    inline operator fun div(other: Double): Size = div(other.toFloat())
+}
+
+/**
+ * Returns a [Size] with [size]'s [Size.width] and [Size.height] multiplied by [this]
+ */
+inline operator fun Int.times(size: Size) = size * this
+
+/**
+ * Returns a [Size] with [size]'s [Size.width] and [Size.height] multiplied by [this]
+ */
+inline operator fun Float.times(size: Size) = size * this
+
+/**
+ * Returns a [Size] with [size]'s [Size.width] and [Size.height] multiplied by [this]
+ */
+inline operator fun Double.times(size: Size) = size * this
 
 /**
  * Returns the [Position] of the center of the rect from the point of [0, 0]
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt b/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
index a37d52e..65914b90 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
@@ -90,6 +90,12 @@
         keepInfinity(IntPx(value = value * other))
 
     /**
+     * Returns the remainder of the IntPx when dividing by an integer.
+     */
+    inline operator fun rem(other: Int): IntPx =
+        IntPx(value = value % other)
+
+    /**
      * Support comparing Dimensions with comparison operators.
      */
     inline operator fun compareTo(other: IntPx) = value.compareTo(other.value)
@@ -225,7 +231,25 @@
 /**
  * A two dimensional size using [IntPx] for units
  */
-/*inline*/ data class IntPxSize(val width: IntPx, val height: IntPx)
+/*inline*/ data class IntPxSize(val width: IntPx, val height: IntPx) {
+    /**
+     * Returns an IntPxSize scaled by multiplying [width] and [height] by [other]
+     */
+    inline operator fun times(other: Int): IntPxSize =
+        IntPxSize(width = width * other, height = height * other)
+
+    /**
+     * Returns an IntPxSize scaled by dividing [width] and [height] by [other]
+     */
+    inline operator fun div(other: Int): IntPxSize =
+        IntPxSize(width = width / other, height = height / other)
+}
+
+/**
+ * Returns an [IntPxSize] with [size]'s [IntPxSize.width] and [IntPxSize.height]
+ * multiplied by [this]
+ */
+inline operator fun Int.times(size: IntPxSize) = size * this
 
 /**
  * Returns the [IntPxPosition] of the center of the rect from the point of [0, 0]
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/LayoutCoordinates.kt b/ui/ui-core/src/main/java/androidx/ui/core/LayoutCoordinates.kt
index 7c7edfa6..34a336a 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/LayoutCoordinates.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/LayoutCoordinates.kt
@@ -33,6 +33,11 @@
     val size: PxSize
 
     /**
+     * The coordinates of the parent layout. Null if there is no parent.
+     */
+    val parentCoordinates: LayoutCoordinates?
+
+    /**
      * Converts a global position into a local position within this layout.
      */
     fun globalToLocal(global: PxPosition): PxPosition
@@ -51,15 +56,14 @@
      * Converts a child layout position into a local position within this layout.
      */
     fun childToLocal(child: LayoutCoordinates, childLocal: PxPosition): PxPosition
-
-    /**
-     * Returns a coordinates of the parent layout. If there is no parent returns null.
-     */
-    // TODO(Andrey): It could work a bit wrong right now, as we create this object at the moment
-    // of placing the current MeasureBox. Which means the parent MeasureBox is not yet placed.
-    // So x and y positions could be changed after it, so if we call getParentCoordinates
-    // right when we receive an object it could have outdated x and y values.
-    // Will work if we use it quite later, for example after a tap.
-    // We need to figure out how to solve it.
-    fun getParentCoordinates(): LayoutCoordinates?
 }
+
+/**
+ * The global position of this layout.
+ */
+inline val LayoutCoordinates.globalPosition: PxPosition get() = localToGlobal(PxPosition.Origin)
+
+/**
+ * The position of this layout inside the root widget.
+ */
+inline val LayoutCoordinates.positionInRoot: PxPosition get() = localToGlobal(PxPosition.Origin)
diff --git a/ui/ui-core/src/main/java/androidx/ui/core/Px.kt b/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
index 5295cf3..94a7616 100644
--- a/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
@@ -406,6 +406,39 @@
  * A two dimensional size using [Px] for units
  */
 data class PxSize(val width: Px, val height: Px) {
+    /**
+     * Returns a PxSize scaled by multiplying [width] and [height] by [other]
+     */
+    inline operator fun times(other: Int): PxSize =
+        PxSize(width = width * other, height = height * other)
+
+    /**
+     * Returns a PxSize scaled  by multiplying [width] and [height] by [other]
+     */
+    inline operator fun times(other: Float): PxSize =
+        PxSize(width = width * other, height = height * other)
+
+    /**
+     * Returns a PxSize scaled  by multiplying [width] and [height] by [other]
+     */
+    inline operator fun times(other: Double): PxSize = times(other.toFloat())
+
+    /**
+     * Returns a PxSize scaled  by dividing [width] and [height] by [other]
+     */
+    inline operator fun div(other: Int): PxSize =
+        PxSize(width = width / other, height = height / other)
+
+    /**
+     * Returns a PxSize scaled  by dividing [width] and [height] by [other]
+     */
+    inline operator fun div(other: Float): PxSize =
+        PxSize(width = width / other, height = height / other)
+
+    /**
+     * Returns a PxSize scaled  by dividing [width] and [height] by [other]
+     */
+    inline operator fun div(other: Double): PxSize = div(other.toFloat())
 
     companion object {
         /**
@@ -416,6 +449,21 @@
 }
 
 /**
+ * Returns a [PxSize] with [size]'s [PxSize.width] and [PxSize.height] multiplied by [this]
+ */
+inline operator fun Int.times(size: PxSize) = size * this
+
+/**
+ * Returns a [PxSize] with [size]'s [PxSize.width] and [PxSize.height] multiplied by [this]
+ */
+inline operator fun Float.times(size: PxSize) = size * this
+
+/**
+ * Returns a [PxSize] with [size]'s [PxSize.width] and [PxSize.height] multiplied by [this]
+ */
+inline operator fun Double.times(size: PxSize) = size * this
+
+/**
  * Returns the [PxPosition] of the center of the rect from the point of [0, 0]
  * with this [PxSize].
  */
diff --git a/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Outline.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Outline.kt
index 7a63885..c0fb812 100644
--- a/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Outline.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Outline.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.engine.geometry
 
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.Path
 
 /**
  * Defines a simple shape, used for bounding graphical regions.
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/AndroidCanvas.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/AndroidCanvas.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/AndroidCanvas.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/AndroidCanvas.kt
index d4edea2..1ccfb43 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/AndroidCanvas.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/AndroidCanvas.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import android.graphics.Matrix
 import androidx.ui.Vertices
@@ -48,9 +48,11 @@
     )
 }
 
-fun Canvas(c: android.graphics.Canvas): Canvas = AndroidCanvas(c)
+fun Canvas(c: android.graphics.Canvas): Canvas =
+    AndroidCanvas(c)
 
-private class AndroidCanvas(val internalCanvas: android.graphics.Canvas) : Canvas {
+private class AndroidCanvas(val internalCanvas: android.graphics.Canvas) :
+    Canvas {
 
     private val internalPath = Path()
 
@@ -199,7 +201,7 @@
     }
 
     /**
-     * @see Canvas.drawDRRect
+     * @see Canvas.drawDoubleRoundRect
      */
     override fun drawRRect(rrect: RRect, paint: Paint) {
         internalPath.reset()
@@ -208,9 +210,9 @@
     }
 
     /**
-     * @see Canvas.drawDRRect
+     * @see Canvas.drawDoubleRoundRect
      */
-    override fun drawDRRect(outer: RRect, inner: RRect, paint: Paint) {
+    override fun drawDoubleRoundRect(outer: RRect, inner: RRect, paint: Paint) {
         // TODO(Migration/njawad find better way to recreate functionality with Framework APIs
         // without creating temporary paths on each draw call
         val outerPath = Path()
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/AndroidImage.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/AndroidImage.kt
similarity index 99%
rename from ui/ui-core/src/main/java/androidx/ui/painting/AndroidImage.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/AndroidImage.kt
index 6eb4671..f159c9e 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/AndroidImage.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/AndroidImage.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import android.content.res.Resources
 import android.graphics.Bitmap
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/BlendMode.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/BlendMode.kt
similarity index 99%
rename from ui/ui-core/src/main/java/androidx/ui/painting/BlendMode.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/BlendMode.kt
index 1463058..554870b 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/BlendMode.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/BlendMode.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * Algorithms to use when painting on the canvas.
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/BlurStyle.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/BlurStyle.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/BlurStyle.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/BlurStyle.kt
index 0063e8c..86dbe78 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/BlurStyle.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/BlurStyle.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 // Styles to use for blurs in [MaskFilter] objects.
 // These enum values must be kept in sync with SkBlurStyle.
diff --git a/ui/ui-core/src/main/java/androidx/ui/graphics/Brush.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Brush.kt
index 5bcc963..25e509f 100644
--- a/ui/ui-core/src/main/java/androidx/ui/graphics/Brush.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Brush.kt
@@ -18,23 +18,13 @@
 
 import androidx.ui.core.Px
 import androidx.ui.engine.geometry.Offset
-import androidx.ui.painting.LinearGradientShader
-import androidx.ui.painting.Paint
-import androidx.ui.painting.RadialGradientShader
-import androidx.ui.painting.TileMode
-
-val EmptyBrush = object : Brush {
-    override fun applyBrush(p: Paint) {
-        // NO-OP
-    }
-}
 
 interface Brush {
-    fun applyBrush(p: Paint)
+    fun applyTo(p: Paint)
 }
 
-data class SolidColor(private val value: Color) : Brush {
-    override fun applyBrush(p: Paint) {
+class SolidColor(val value: Color) : Brush {
+    override fun applyTo(p: Paint) {
         p.color = value
     }
 }
@@ -42,29 +32,14 @@
 typealias ColorStop = Pair<Float, Color>
 
 /**
- * Obtains actual Brush instance from Union type, throws an IllegalArgumentException
- * if the type is other than Int, Color, Brush or null
- */
-fun obtainBrush(brush: Any?): Brush {
-    return when (brush) {
-        is Int -> SolidColor(Color(brush))
-        is Color -> SolidColor(brush)
-        is Brush -> brush
-        null -> EmptyBrush
-        else -> throw IllegalArgumentException(brush.javaClass.simpleName +
-                "Brush must be either a Color long, LinearGradient or RadialGradient")
-    }
-}
-
-/**
  * Creates a linear gradient with the provided colors along the given start and end coordinates.
  * The colors are
  *
  * ```
  *  LinearGradient(
- *      0.0f to Color.Aqua,
- *      0.3f to Color.Lime,
- *      1.0f to Color.Fuchsia,
+ *      0.0f to Color.Red,
+ *      0.3f to Color.Green,
+ *      1.0f to Color.Blue,
  *      startX = Px.Zero,
  *      startY = Px(50.0f),
  *      endY = Px.Zero,
@@ -97,9 +72,9 @@
  *
  * ```
  *  LinearGradient(
- *      0.0f to Color.Aqua,
- *      0.3f to Color.Lime,
- *      1.0f to Color.Fuchsia,
+ *      0.0f to Color.Red,
+ *      0.3f to Color.Green,
+ *      1.0f to Color.Blue,
  *      startX = Px.Zero,
  *      startY = Px(50.0f),
  *      endY = Px.Zero,
@@ -130,9 +105,9 @@
  * Creates a radial gradient with the given colors at the provided offset defined in the [ColorStop]
  * ```
  * RadialGradient(
- *      0.0f to Color.Navy,
- *      0.3f to Color.Olive,
- *      1.0f to Color.Teal,
+ *      0.0f to Color.Red,
+ *      0.3f to Color.Green,
+ *      1.0f to Color.Blue,
  *      centerX = side1 / 2.0f,
  *      centerY = side2 / 2.0f,
  *      radius = side1 / 2.0f,
@@ -161,9 +136,9 @@
  * Creates a radial gradient with the given colors evenly dispersed within the gradient
  * ```
  * RadialGradient(
- *      Color.Navy,
- *      Color.Olive,
- *      Color.Teal,
+ *      Color.Red,
+ *      Color.Green,
+ *      Color.Blue,
  *      centerX = side1 / 2.0f,
  *      centerY = side2 / 2.0f,
  *      radius = side1 / 2.0f,
@@ -186,9 +161,9 @@
  * Ex:
  * ```
  *  VerticalGradient(
- *      Color.Aqua,
- *      Color.Lime,
- *      Color.Fuchsia,
+ *      Color.Red,
+ *      Color.Green,
+ *      Color.Blue,
  *      startY = Px.Zero,
  *      endY = Px(100.0f)
  * )
@@ -217,9 +192,9 @@
  * Ex:
  * ```
  *  VerticalGradient(
- *      Color.Aqua,
- *      Color.Lime,
- *      Color.Fuchsia,
+ *      Color.Red,
+ *      Color.Green,
+ *      Color.Blue,
  *      startY = Px.Zero,
  *      endY = Px(100.0f)
  * )
@@ -248,9 +223,9 @@
  * Ex:
  * ```
  *  HorizontalGradient(
- *      Color.Aqua,
- *      Color.Lime,
- *      Color.Fuchsia,
+ *      Color.Red,
+ *      Color.Green,
+ *      Color.Blue,
  *      startX = Px(10.0f),
  *      endX = Px(20.0f)
  * )
@@ -279,9 +254,9 @@
  * Ex:
  * ```
  *  HorizontalGradient(
- *      0.0f to Color.Aqua,
- *      0.3f to Color.Lime,
- *      1.0f to Color.Fuchsia,
+ *      0.0f to Color.Red,
+ *      0.3f to Color.Green,
+ *      1.0f to Color.Blue,
  *      startX = Px.Zero,
  *      endX = Px(100.0f)
  * )
@@ -315,19 +290,15 @@
     private val endX: Px,
     private val endY: Px,
     private val tileMode: TileMode = TileMode.Clamp
-) : Brush {
-
-    private val shader = LinearGradientShader(
+) : ShaderBrush(
+    LinearGradientShader(
         Offset(startX.value, startY.value),
         Offset(endX.value, endY.value),
         colors,
         stops,
-        tileMode)
-
-    override fun applyBrush(p: Paint) {
-        p.shader = shader
-    }
-}
+        tileMode
+    )
+    )
 
 /**
  * Brush implementation used to apply a radial gradient on a given [Paint]
@@ -339,17 +310,21 @@
     private val centerY: Float,
     private val radius: Float,
     private val tileMode: TileMode = TileMode.Clamp
-) : Brush {
-
-    private val shader = RadialGradientShader(
+) : ShaderBrush(
+    RadialGradientShader(
         Offset(centerX, centerY),
         radius,
         colors,
         stops,
         tileMode
     )
+    )
 
-    override fun applyBrush(p: Paint) {
+/**
+ * Brush implementation that wraps and applies a the provided shader to a [Paint]
+ */
+open class ShaderBrush(val shader: Shader) : Brush {
+    override fun applyTo(p: Paint) {
         p.shader = shader
     }
 }
\ No newline at end of file
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/Canvas.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Canvas.kt
similarity index 99%
rename from ui/ui-core/src/main/java/androidx/ui/painting/Canvas.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Canvas.kt
index 07d8035..a25b0e4 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/Canvas.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Canvas.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import androidx.ui.Vertices
 import androidx.ui.engine.geometry.Offset
@@ -353,7 +353,7 @@
      *
      * This shape is almost but not quite entirely unlike an annulus.
      */
-    fun drawDRRect(outer: RRect, inner: RRect, paint: Paint)
+    fun drawDoubleRoundRect(outer: RRect, inner: RRect, paint: Paint)
 
     /**
      * Draws an axis-aligned oval that fills the given axis-aligned rectangle
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/ClipOp.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/ClipOp.kt
similarity index 96%
rename from ui/ui-core/src/main/java/androidx/ui/painting/ClipOp.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/ClipOp.kt
index 8fdfb7e..aed2ad3 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/ClipOp.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/ClipOp.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * Defines how a new clip region should be merged with the existing clip
diff --git a/ui/ui-core/src/main/java/androidx/ui/graphics/Color.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Color.kt
index e1023ad..d579b73 100644
--- a/ui/ui-core/src/main/java/androidx/ui/graphics/Color.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Color.kt
@@ -25,7 +25,7 @@
 import androidx.ui.graphics.colorspace.ColorModel
 import androidx.ui.graphics.colorspace.Rgb
 import androidx.ui.graphics.colorspace.connect
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.lerp
 import androidx.ui.util.Float16
 import kotlin.math.max
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/ColorFilter.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/ColorFilter.kt
similarity index 96%
rename from ui/ui-core/src/main/java/androidx/ui/painting/ColorFilter.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/ColorFilter.kt
index 11d5624..4beaa42 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/ColorFilter.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/ColorFilter.kt
@@ -14,9 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
-
-import androidx.ui.graphics.Color
+package androidx.ui.graphics
 
 /**
  * A description of a color filter to apply when drawing a shape or compositing
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/FilterQuality.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/FilterQuality.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/FilterQuality.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/FilterQuality.kt
index 6e7827e..649aa6e 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/FilterQuality.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/FilterQuality.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 // Quality levels for image filters.
 //
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/Image.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Image.kt
similarity index 99%
rename from ui/ui-core/src/main/java/androidx/ui/painting/Image.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Image.kt
index e228661..b646d39 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/Image.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Image.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import androidx.ui.graphics.colorspace.ColorSpace
 
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/ImageByteFormat.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/ImageByteFormat.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/ImageByteFormat.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/ImageByteFormat.kt
index a283386..47551be 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/ImageByteFormat.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/ImageByteFormat.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * The format in which image bytes should be returned when using
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/ImageRepeat.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/ImageRepeat.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/ImageRepeat.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/ImageRepeat.kt
index 64ba030..31f1f01 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/ImageRepeat.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/ImageRepeat.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /** How to paint any portions of a box not covered by an image. */
 enum class ImageRepeat {
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/MaskFilter.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/MaskFilter.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/MaskFilter.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/MaskFilter.kt
index 57b71301..4864885d 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/MaskFilter.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/MaskFilter.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 // A mask filter to apply to shapes as they are painted. A mask filter is a
 // function that takes a bitmap of color pixels, and returns another bitmap of
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/Paint.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Paint.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/Paint.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Paint.kt
index 0b8329c..c06d350 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/Paint.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Paint.kt
@@ -14,12 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import android.graphics.BlurMaskFilter
 import android.graphics.PorterDuffColorFilter
-import androidx.ui.graphics.Color
-import androidx.ui.graphics.toArgb
 
 class Paint {
 
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/PaintingStyle.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/PaintingStyle.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/PaintingStyle.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/PaintingStyle.kt
index 0ce61c0..d62c125 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/PaintingStyle.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/PaintingStyle.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * Strategies for painting shapes and paths on a canvas.
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/Path.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Path.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/Path.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Path.kt
index 029d8cb..4f31261 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/Path.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Path.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import androidx.ui.core.toFrameworkRect
 import androidx.ui.engine.geometry.Offset
@@ -137,6 +137,8 @@
      * weight w. If the weight is greater than 1, then the curve is a
      * hyperbola; if the weight equals 1, it's a parabola; and if it is
      * less than 1, it is an ellipse.
+     *
+     * Throws [UnsupportedOperationException] as Android framework does not support this API
      */
     @Suppress("UNUSED_PARAMETER")
     fun conicTo(x1: Float, y1: Float, x2: Float, y2: Float, w: Float) {
@@ -151,6 +153,8 @@
      * the weight w. If the weight is greater than 1, then the curve is
      * a hyperbola; if the weight equals 1, it's a parabola; and if it
      * is less than 1, it is an ellipse.
+     *
+     * Throws [UnsupportedOperationException] as Android framework does not support this API
      */
     @Suppress("UNUSED_PARAMETER")
     fun relativeConicTo(x1: Float, y1: Float, x2: Float, y2: Float, w: Float) {
@@ -235,6 +239,7 @@
      * point in the path is `arcEnd`. The radii are scaled to fit the last path
      * point if both are greater than zero but too small to describe an arc.
      *
+     * Throws [UnsupportedOperationException] as Android framework does not support this API
      */
     @Suppress("UNUSED_PARAMETER")
     fun arcToPoint(
@@ -627,6 +632,8 @@
          * The resulting path will be constructed from non-overlapping contours. The
          * curve order is reduced where possible so that cubics may be turned into
          * quadratics, and quadratics maybe turned into lines.
+         *
+         * Throws [IllegalArgumentException] as Android framework does not support this API
          */
         fun combine(
             operation: PathOperation,
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/PathFillType.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/PathFillType.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/PathFillType.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/PathFillType.kt
index a363e03..4bfde28 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/PathFillType.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/PathFillType.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * Determines the winding rule that decides how the interior of a [Path] is
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/PathOperation.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/PathOperation.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/PathOperation.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/PathOperation.kt
index d1f5f36..ead5f28 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/PathOperation.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/PathOperation.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * Strategies for combining paths.
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/Picture.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Picture.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/Picture.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Picture.kt
index f5c55dd..db73c189 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/Picture.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Picture.kt
@@ -1,4 +1,4 @@
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import androidx.ui.engine.geometry.Rect
 
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/PictureRecorder.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/PictureRecorder.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/PictureRecorder.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/PictureRecorder.kt
index d276e55..3819f55 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/PictureRecorder.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/PictureRecorder.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * Records a [Picture] containing a sequence of graphical operations.
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/PointMode.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/PointMode.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/PointMode.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/PointMode.kt
index 20b2631..cfeb921 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/PointMode.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/PointMode.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 /**
  * Defines how a list of points is interpreted when drawing a set of points.
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/Shader.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Shader.kt
similarity index 93%
rename from ui/ui-core/src/main/java/androidx/ui/painting/Shader.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Shader.kt
index 69e1a73..05afaa1 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/Shader.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Shader.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018 The Android Open Source Project
+ * 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.
@@ -14,11 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
+import android.graphics.BitmapShader
+import android.graphics.LinearGradient
+import android.graphics.RadialGradient
 import androidx.ui.engine.geometry.Offset
-import androidx.ui.graphics.Color
-import androidx.ui.graphics.toArgb
 
 /**
  * Class that represents the corresponding Shader implementation on a platform. This maps
@@ -51,7 +52,7 @@
 ): Shader {
     validateColorStops(colors, colorStops)
     return Shader(
-        android.graphics.LinearGradient(
+        LinearGradient(
             from.dx,
             from.dy,
             to.dx,
@@ -87,7 +88,7 @@
 ): Shader {
     validateColorStops(colors, colorStops)
     return Shader(
-        android.graphics.RadialGradient(
+        RadialGradient(
             center.dx,
             center.dy,
             radius,
@@ -104,7 +105,7 @@
     tileModeY: TileMode = TileMode.Clamp
 ): Shader {
     return Shader(
-        android.graphics.BitmapShader(
+        BitmapShader(
             image.nativeImage,
             tileModeX.nativeTileMode,
             tileModeY.nativeTileMode
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/Shadow.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Shadow.kt
similarity index 92%
rename from ui/ui-core/src/main/java/androidx/ui/painting/Shadow.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Shadow.kt
index 05acaf1..0c366b2 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/Shadow.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/Shadow.kt
@@ -14,14 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 import androidx.ui.core.Px
 import androidx.ui.core.lerp
 import androidx.ui.core.px
 import androidx.ui.engine.geometry.Offset
-import androidx.ui.graphics.Color
-import androidx.ui.graphics.lerp
 
 /**
  * A single shadow.
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/StrokeCap.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/StrokeCap.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/StrokeCap.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/StrokeCap.kt
index d855dbb..2f344c4 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/StrokeCap.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/StrokeCap.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 // Styles to use for line endings.
 //
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/StrokeJoin.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/StrokeJoin.kt
similarity index 97%
rename from ui/ui-core/src/main/java/androidx/ui/painting/StrokeJoin.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/StrokeJoin.kt
index 5053707..e7016f5 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/StrokeJoin.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/StrokeJoin.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 // Styles to use for line joins.
 //
diff --git a/ui/ui-core/src/main/java/androidx/ui/painting/TileMode.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/TileMode.kt
similarity index 98%
rename from ui/ui-core/src/main/java/androidx/ui/painting/TileMode.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/TileMode.kt
index d381956..95e144b 100644
--- a/ui/ui-core/src/main/java/androidx/ui/painting/TileMode.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/TileMode.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.painting
+package androidx.ui.graphics
 
 // Defines what happens at the edge of the gradient.
 //
diff --git a/ui/ui-core/src/main/java/androidx/ui/graphics/vector/PathParser.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/vector/PathParser.kt
index a3226a4..5ab3e99 100644
--- a/ui/ui-core/src/main/java/androidx/ui/graphics/vector/PathParser.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/graphics/vector/PathParser.kt
@@ -17,7 +17,7 @@
 package androidx.ui.graphics.vector
 
 import android.util.Log
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Path
 
 private const val LOGTAG = "PathParser"
 
diff --git a/ui/ui-core/src/test/java/androidx/ui/core/DpTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/DpTest.kt
index 94126a3..0267200 100644
--- a/ui/ui-core/src/test/java/androidx/ui/core/DpTest.kt
+++ b/ui/ui-core/src/test/java/androidx/ui/core/DpTest.kt
@@ -376,4 +376,37 @@
         val bounds = Bounds(5.dp, 5.dp, 15.dp, 30.dp)
         assertEquals(Size(10.dp, 25.dp), bounds.toSize())
     }
+
+    @Test
+    fun sizeTimesInt() {
+        assertEquals(Size(10.dp, 10.dp), Size(2.5.dp, 2.5.dp) * 4)
+        assertEquals(Size(10.dp, 10.dp), 4 * Size(2.5.dp, 2.5.dp))
+    }
+
+    @Test
+    fun sizeDivInt() {
+        assertEquals(Size(10.dp, 10.dp), Size(40.dp, 40.dp) / 4)
+    }
+
+    @Test
+    fun sizeTimesFloat() {
+        assertEquals(Size(10.dp, 10.dp), Size(4.dp, 4.dp) * 2.5f)
+        assertEquals(Size(10.dp, 10.dp), 2.5f * Size(4.dp, 4.dp))
+    }
+
+    @Test
+    fun sizeDivFloat() {
+        assertEquals(Size(10.dp, 10.dp), Size(40.dp, 40.dp) / 4f)
+    }
+
+    @Test
+    fun sizeTimesDouble() {
+        assertEquals(Size(10.dp, 10.dp), Size(4.dp, 4.dp) * 2.5)
+        assertEquals(Size(10.dp, 10.dp), 2.5 * Size(4.dp, 4.dp))
+    }
+
+    @Test
+    fun sizeDivDouble() {
+        assertEquals(Size(10.dp, 10.dp), Size(40.dp, 40.dp) / 4.0)
+    }
 }
\ No newline at end of file
diff --git a/ui/ui-core/src/test/java/androidx/ui/core/IntPxTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/IntPxTest.kt
index f95c1a0..0073c93 100644
--- a/ui/ui-core/src/test/java/androidx/ui/core/IntPxTest.kt
+++ b/ui/ui-core/src/test/java/androidx/ui/core/IntPxTest.kt
@@ -231,4 +231,20 @@
     fun createPosition() {
         assertEquals(PxPosition(10.px, 20.px), PxPosition(10.ipx, 20.ipx))
     }
+
+    @Test
+    fun remainder() {
+        assertEquals(2.ipx, 10.ipx % 4)
+    }
+
+    @Test
+    fun sizeTimesInt() {
+        assertEquals(IntPxSize(10.ipx, 10.ipx), IntPxSize(2.ipx, 2.ipx) * 5)
+        assertEquals(IntPxSize(10.ipx, 10.ipx), 5 * IntPxSize(2.ipx, 2.ipx))
+    }
+
+    @Test
+    fun sizeDivInt() {
+        assertEquals(IntPxSize(10.ipx, 10.ipx), IntPxSize(40.ipx, 40.ipx) / 4)
+    }
 }
\ No newline at end of file
diff --git a/ui/ui-core/src/test/java/androidx/ui/core/PxTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/PxTest.kt
index 3a852f2..fe773b6 100644
--- a/ui/ui-core/src/test/java/androidx/ui/core/PxTest.kt
+++ b/ui/ui-core/src/test/java/androidx/ui/core/PxTest.kt
@@ -413,4 +413,37 @@
         val rect = Rect(0f, 0f, 10f, 5f)
         assertEquals(rect, size.toRect())
     }
+
+    @Test
+    fun sizeTimesInt() {
+        assertEquals(PxSize(10.px, 10.px), PxSize(2.5.px, 2.5.px) * 4)
+        assertEquals(PxSize(10.px, 10.px), 4 * PxSize(2.5.px, 2.5.px))
+    }
+
+    @Test
+    fun sizeDivInt() {
+        assertEquals(PxSize(10.px, 10.px), PxSize(40.px, 40.px) / 4)
+    }
+
+    @Test
+    fun sizeTimesFloat() {
+        assertEquals(PxSize(10.px, 10.px), PxSize(4.px, 4.px) * 2.5f)
+        assertEquals(PxSize(10.px, 10.px), 2.5f * PxSize(4.px, 4.px))
+    }
+
+    @Test
+    fun sizeDivFloat() {
+        assertEquals(PxSize(10.px, 10.px), PxSize(40.px, 40.px) / 4f)
+    }
+
+    @Test
+    fun sizeTimesDouble() {
+        assertEquals(PxSize(10.px, 10.px), PxSize(4.px, 4.px) * 2.5)
+        assertEquals(PxSize(10.px, 10.px), 2.5 * PxSize(4.px, 4.px))
+    }
+
+    @Test
+    fun sizeDivDouble() {
+        assertEquals(PxSize(10.px, 10.px), PxSize(40.px, 40.px) / 4.0)
+    }
 }
\ No newline at end of file
diff --git a/ui/ui-core/src/test/java/androidx/ui/painting/ShadowTest.kt b/ui/ui-core/src/test/java/androidx/ui/painting/ShadowTest.kt
index 78bd672..6d5971b 100644
--- a/ui/ui-core/src/test/java/androidx/ui/painting/ShadowTest.kt
+++ b/ui/ui-core/src/test/java/androidx/ui/painting/ShadowTest.kt
@@ -20,6 +20,7 @@
 import androidx.ui.core.px
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.graphics.Color
+import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.lerp
 import org.hamcrest.CoreMatchers.equalTo
 import org.junit.Assert.assertThat
diff --git a/ui/ui-foundation/api/0.1.0-dev01.txt b/ui/ui-foundation/api/0.1.0-dev01.txt
index 04f36d8..6c423c8 100644
--- a/ui/ui-foundation/api/0.1.0-dev01.txt
+++ b/ui/ui-foundation/api/0.1.0-dev01.txt
@@ -81,7 +81,7 @@
 
   public final class SimpleImageKt {
     ctor public SimpleImageKt();
-    method public static void SimpleImage(androidx.ui.painting.Image image, androidx.ui.graphics.Color? tint = null);
+    method public static void SimpleImage(androidx.ui.graphics.Image image, androidx.ui.graphics.Color? tint = null);
   }
 
   public final class Strings {
@@ -239,8 +239,8 @@
   }
 
   public final class GenericShape implements androidx.ui.engine.geometry.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
-    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
     method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
   }
 
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index 04f36d8..6c423c8 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -81,7 +81,7 @@
 
   public final class SimpleImageKt {
     ctor public SimpleImageKt();
-    method public static void SimpleImage(androidx.ui.painting.Image image, androidx.ui.graphics.Color? tint = null);
+    method public static void SimpleImage(androidx.ui.graphics.Image image, androidx.ui.graphics.Color? tint = null);
   }
 
   public final class Strings {
@@ -239,8 +239,8 @@
   }
 
   public final class GenericShape implements androidx.ui.engine.geometry.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
-    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
     method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
   }
 
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev01.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev01.txt
index 04f36d8..6c423c8 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev01.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev01.txt
@@ -81,7 +81,7 @@
 
   public final class SimpleImageKt {
     ctor public SimpleImageKt();
-    method public static void SimpleImage(androidx.ui.painting.Image image, androidx.ui.graphics.Color? tint = null);
+    method public static void SimpleImage(androidx.ui.graphics.Image image, androidx.ui.graphics.Color? tint = null);
   }
 
   public final class Strings {
@@ -239,8 +239,8 @@
   }
 
   public final class GenericShape implements androidx.ui.engine.geometry.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
-    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
     method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
   }
 
diff --git a/ui/ui-foundation/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-foundation/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..ed753f6
--- /dev/null
+++ b/ui/ui-foundation/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,325 @@
+// Signature format: 3.0
+package androidx.ui.foundation {
+
+  public final class ClickableKt {
+    ctor public ClickableKt();
+    method public static void Clickable(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, boolean consumeDownOnStart = false, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class ColoredRectKt {
+    ctor public ColoredRectKt();
+    method public static void ColoredRect(androidx.ui.graphics.Brush brush, androidx.ui.core.Dp? width = null, androidx.ui.core.Dp? height = null);
+    method public static void ColoredRect(androidx.ui.graphics.Color color, androidx.ui.core.Dp? width = null, androidx.ui.core.Dp? height = null);
+  }
+
+  public final class DarkThemeKt {
+    ctor public DarkThemeKt();
+    method public static androidx.compose.Effect<java.lang.Boolean> isSystemInDarkTheme();
+  }
+
+  public final class DeterminateProgressIndicatorKt {
+    ctor public DeterminateProgressIndicatorKt();
+    method public static void DeterminateProgressIndicator(@FloatRange(from=0.0, to=1.0) float progress, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class DialogKt {
+    ctor public DialogKt();
+    method public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class DrawBordersReceiver {
+    method public void all(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void allHorizontal(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void allVertical(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void bottom(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public int getColumnCount();
+    method public int getRowCount();
+    method public void horizontal(int row, kotlin.ranges.IntRange columns = 0 <other> columnCount, androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void left(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void outer(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void right(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void top(androidx.ui.foundation.shape.border.Border border = defaultBorder);
+    method public void vertical(int column, kotlin.ranges.IntRange rows = 0 <other> rowCount, androidx.ui.foundation.shape.border.Border border = defaultBorder);
+  }
+
+  public final class PopupKt {
+    ctor public PopupKt();
+    method public static void Popup(androidx.ui.layout.Alignment alignment, androidx.ui.core.IntPxPosition offset = IntPxPosition(IntPx.Zero, IntPx.Zero), androidx.ui.foundation.PopupProperties popupProperties = androidx.ui.foundation.PopupProperties(), kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void disposeActivityComposition(android.app.Activity activity);
+  }
+
+  public final class PopupProperties {
+    ctor public PopupProperties(boolean isFocusable, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest);
+    ctor public PopupProperties();
+    method public boolean component1();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit>? component2();
+    method public androidx.ui.foundation.PopupProperties copy(boolean isFocusable, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest);
+    method public kotlin.jvm.functions.Function0<kotlin.Unit>? getOnDismissRequest();
+    method public boolean isFocusable();
+  }
+
+  public final class ScrollerKt {
+    ctor public ScrollerKt();
+    method public static void HorizontalScroller(androidx.ui.foundation.ScrollerPosition scrollerPosition = +memo({ 
+    <init>()
+}), kotlin.jvm.functions.Function2<? super androidx.ui.core.Px,? super androidx.ui.core.Px,kotlin.Unit> onScrollPositionChanged = { position, _ -> scrollerPosition.value = position }, boolean isScrollable = true, kotlin.jvm.functions.Function0<kotlin.Unit> child);
+    method public static void VerticalScroller(androidx.ui.foundation.ScrollerPosition scrollerPosition = +memo({ 
+    <init>()
+}), kotlin.jvm.functions.Function2<? super androidx.ui.core.Px,? super androidx.ui.core.Px,kotlin.Unit> onScrollPositionChanged = { position, _ -> scrollerPosition.value = position }, boolean isScrollable = true, kotlin.jvm.functions.Function0<kotlin.Unit> child);
+  }
+
+  public final class ScrollerPosition {
+    ctor public ScrollerPosition();
+    method public androidx.ui.core.Px getValue();
+    method public void scrollBy(androidx.ui.core.Px value);
+    method public void scrollTo(androidx.ui.core.Px value);
+    method public void setValue(androidx.ui.core.Px p);
+    method public void smoothScrollBy(androidx.ui.core.Px value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFinished = {});
+    method public void smoothScrollTo(androidx.ui.core.Px value, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFinished = {});
+    property public final androidx.ui.core.Px value;
+  }
+
+  public final class SimpleImageKt {
+    ctor public SimpleImageKt();
+    method public static void SimpleImage(androidx.ui.graphics.Image image, androidx.ui.graphics.Color? tint = null);
+  }
+
+  public final class Strings {
+    method public String getChecked();
+    method public String getIndeterminate();
+    method public String getNotSelected();
+    method public String getSelected();
+    method public String getUnchecked();
+    property public final String Checked;
+    property public final String Indeterminate;
+    property public final String NotSelected;
+    property public final String Selected;
+    property public final String Unchecked;
+    field public static final androidx.ui.foundation.Strings! INSTANCE;
+  }
+
+  public final class TableBordersKt {
+    ctor public TableBordersKt();
+    method public static void drawBorders(androidx.ui.layout.TableChildren, androidx.ui.foundation.shape.border.Border defaultBorder = Border(Color.Black, Dp.Hairline), kotlin.jvm.functions.Function1<? super androidx.ui.foundation.DrawBordersReceiver,kotlin.Unit> block);
+  }
+
+}
+
+package androidx.ui.foundation.animation {
+
+  public final class AnimatedFloatDragController implements androidx.ui.foundation.gestures.DragValueController {
+    ctor public AnimatedFloatDragController(androidx.animation.AnimatedFloat animatedFloat, androidx.ui.foundation.animation.FlingConfig? flingConfig);
+    ctor public AnimatedFloatDragController(float initialValue, androidx.ui.foundation.animation.FlingConfig? flingConfig);
+    method public androidx.animation.AnimatedFloat getAnimatedFloat();
+    method public float getCurrentValue();
+    method public boolean getEnabled();
+    method public void onDrag(float target);
+    method public void onDragEnd(float velocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueSettled);
+    method public void setBounds(float min, float max);
+    method public void setEnabled(boolean p);
+    property public float currentValue;
+    property public final boolean enabled;
+  }
+
+  public final class FlingConfig {
+    ctor public FlingConfig(androidx.animation.DecayAnimation decayAnimation, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Boolean,kotlin.Unit>? onAnimationFinished, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.animation.TargetAnimation> adjustTarget);
+    ctor public FlingConfig();
+    method public androidx.animation.DecayAnimation component1();
+    method public kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Boolean,kotlin.Unit>? component2();
+    method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.animation.TargetAnimation> component3();
+    method public androidx.ui.foundation.animation.FlingConfig copy(androidx.animation.DecayAnimation decayAnimation, kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Boolean,kotlin.Unit>? onAnimationFinished, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.animation.TargetAnimation> adjustTarget);
+    method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.animation.TargetAnimation> getAdjustTarget();
+    method public androidx.animation.DecayAnimation getDecayAnimation();
+    method public kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Boolean,kotlin.Unit>? getOnAnimationFinished();
+  }
+
+  public final class FlingConfigKt {
+    ctor public FlingConfigKt();
+    method public static androidx.ui.foundation.animation.FlingConfig AnchorsFlingConfig(java.util.List<java.lang.Float> anchors, androidx.animation.AnimationBuilder<java.lang.Float> animationBuilder = PhysicsBuilder(), kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Boolean,kotlin.Unit>? onAnimationFinished = null, androidx.animation.DecayAnimation decayAnimation = ExponentialDecay());
+    method public static void fling(androidx.animation.AnimatedFloat, androidx.ui.foundation.animation.FlingConfig config, float startVelocity);
+  }
+
+}
+
+package androidx.ui.foundation.gestures {
+
+  public abstract sealed class DragDirection {
+  }
+
+  public static final class DragDirection.Horizontal extends androidx.ui.foundation.gestures.DragDirection {
+    field public static final androidx.ui.foundation.gestures.DragDirection.Horizontal! INSTANCE;
+  }
+
+  public static final class DragDirection.Vertical extends androidx.ui.foundation.gestures.DragDirection {
+    field public static final androidx.ui.foundation.gestures.DragDirection.Vertical! INSTANCE;
+  }
+
+  public interface DragValueController {
+    method public float getCurrentValue();
+    method public void onDrag(float target);
+    method public void onDragEnd(float velocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueSettled);
+    method public void setBounds(float min, float max);
+    property public abstract float currentValue;
+  }
+
+  public final class DraggableCallback {
+    ctor public DraggableCallback(kotlin.jvm.functions.Function0<kotlin.Unit> onDragStarted, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragSettled);
+    ctor public DraggableCallback();
+  }
+
+  public final class DraggableKt {
+    ctor public DraggableKt();
+    method public static void Draggable(androidx.ui.foundation.gestures.DragDirection dragDirection, float minValue = Float.MIN_VALUE, float maxValue = Float.MAX_VALUE, androidx.ui.foundation.gestures.DragValueController valueController = +memo(minValue, { 
+    <init>(minValue)
+}), androidx.ui.foundation.gestures.DraggableCallback? callback = null, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> children);
+  }
+
+  public final class FloatDragValueController implements androidx.ui.foundation.gestures.DragValueController {
+    ctor public FloatDragValueController(float initialValue);
+    method public float getCurrentValue();
+    method public void onDrag(float target);
+    method public void onDragEnd(float velocity, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueSettled);
+    method public void setBounds(float min, float max);
+    property public float currentValue;
+  }
+
+}
+
+package androidx.ui.foundation.selection {
+
+  public final class MutuallyExclusiveSetItemKt {
+    ctor public MutuallyExclusiveSetItemKt();
+    method public static void MutuallyExclusiveSetItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class ToggleableKt {
+    ctor public ToggleableKt();
+    method public static void Toggleable(androidx.ui.foundation.selection.ToggleableState value = ToggleableState.Checked, kotlin.jvm.functions.Function0<kotlin.Unit>? onToggle = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.foundation.selection.ToggleableState ToggleableState(boolean checked);
+  }
+
+  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;
+  }
+
+}
+
+package androidx.ui.foundation.semantics {
+
+  public final class FoundationSemanticsProperties {
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getInMutuallyExclusiveGroup();
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getSelected();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.foundation.selection.ToggleableState> getToggleableState();
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> InMutuallyExclusiveGroup;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Selected;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.foundation.selection.ToggleableState> ToggleableState;
+    field public static final androidx.ui.foundation.semantics.FoundationSemanticsProperties! INSTANCE;
+  }
+
+  public final class FoundationSemanticsPropertiesKt {
+    ctor public FoundationSemanticsPropertiesKt();
+    method public static boolean getInMutuallyExclusiveGroup(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static boolean getSelected(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.ui.foundation.selection.ToggleableState getToggleableState(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void setInMutuallyExclusiveGroup(androidx.ui.semantics.SemanticsPropertyReceiver, boolean p);
+    method public static void setSelected(androidx.ui.semantics.SemanticsPropertyReceiver, boolean p);
+    method public static void setToggleableState(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.foundation.selection.ToggleableState p);
+  }
+
+}
+
+package androidx.ui.foundation.shape {
+
+  public final class DrawShapeKt {
+    ctor public DrawShapeKt();
+    method public static void DrawShape(androidx.ui.engine.geometry.Shape shape, androidx.ui.graphics.Color color);
+    method public static void DrawShape(androidx.ui.engine.geometry.Shape shape, androidx.ui.graphics.Brush brush);
+  }
+
+  public final class GenericShape implements androidx.ui.engine.geometry.Shape {
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
+  }
+
+  public final class RectangleShapeKt {
+    ctor public RectangleShapeKt();
+    method public static androidx.ui.engine.geometry.Shape getRectangleShape();
+  }
+
+}
+
+package androidx.ui.foundation.shape.border {
+
+  public final class Border {
+    ctor public Border(androidx.ui.graphics.Brush brush, androidx.ui.core.Dp width);
+    method public androidx.ui.graphics.Brush component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.foundation.shape.border.Border copy(androidx.ui.graphics.Brush brush, androidx.ui.core.Dp width);
+    method public androidx.ui.graphics.Brush getBrush();
+    method public androidx.ui.core.Dp getWidth();
+  }
+
+  public final class BorderKt {
+    ctor public BorderKt();
+    method public static androidx.ui.foundation.shape.border.Border Border(androidx.ui.graphics.Color color, androidx.ui.core.Dp width);
+  }
+
+  public final class DrawBorderKt {
+    ctor public DrawBorderKt();
+    method public static void DrawBorder(androidx.ui.engine.geometry.Shape shape, androidx.ui.foundation.shape.border.Border border);
+  }
+
+}
+
+package androidx.ui.foundation.shape.corner {
+
+  public abstract class CornerBasedShape implements androidx.ui.engine.geometry.Shape {
+    ctor public CornerBasedShape(androidx.ui.foundation.shape.corner.CornerSize topLeft, androidx.ui.foundation.shape.corner.CornerSize topRight, androidx.ui.foundation.shape.corner.CornerSize bottomRight, androidx.ui.foundation.shape.corner.CornerSize bottomLeft);
+    method public final androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
+    method public abstract androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Px topLeft, androidx.ui.core.Px topRight, androidx.ui.core.Px bottomRight, androidx.ui.core.Px bottomLeft);
+  }
+
+  public interface CornerSize {
+    method public androidx.ui.core.Px toPx(androidx.ui.core.PxSize shapeSize, androidx.ui.core.Density density);
+  }
+
+  public final class CornerSizeKt {
+    ctor public CornerSizeKt();
+    method public static androidx.ui.foundation.shape.corner.CornerSize CornerSize(androidx.ui.core.Dp size);
+    method public static androidx.ui.foundation.shape.corner.CornerSize CornerSize(androidx.ui.core.Px size);
+    method public static androidx.ui.foundation.shape.corner.CornerSize CornerSize(@IntRange(from=0, to=50) int percent);
+    method public static androidx.ui.foundation.shape.corner.CornerSize CornerSize(@FloatRange(from=0.0, to=50.0) float percent);
+    method public static androidx.ui.foundation.shape.corner.CornerSize getZeroCornerSize();
+  }
+
+  public final class RoundedCornerShape extends androidx.ui.foundation.shape.corner.CornerBasedShape {
+    ctor public RoundedCornerShape(androidx.ui.foundation.shape.corner.CornerSize topLeft, androidx.ui.foundation.shape.corner.CornerSize topRight, androidx.ui.foundation.shape.corner.CornerSize bottomRight, androidx.ui.foundation.shape.corner.CornerSize bottomLeft);
+    method public androidx.ui.foundation.shape.corner.CornerSize component1();
+    method public androidx.ui.foundation.shape.corner.CornerSize component2();
+    method public androidx.ui.foundation.shape.corner.CornerSize component3();
+    method public androidx.ui.foundation.shape.corner.CornerSize component4();
+    method public androidx.ui.foundation.shape.corner.RoundedCornerShape copy(androidx.ui.foundation.shape.corner.CornerSize topLeft, androidx.ui.foundation.shape.corner.CornerSize topRight, androidx.ui.foundation.shape.corner.CornerSize bottomRight, androidx.ui.foundation.shape.corner.CornerSize bottomLeft);
+    method public androidx.ui.engine.geometry.Outline.Rounded createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Px topLeft, androidx.ui.core.Px topRight, androidx.ui.core.Px bottomRight, androidx.ui.core.Px bottomLeft);
+    method public androidx.ui.foundation.shape.corner.CornerSize getBottomLeft();
+    method public androidx.ui.foundation.shape.corner.CornerSize getBottomRight();
+    method public androidx.ui.foundation.shape.corner.CornerSize getTopLeft();
+    method public androidx.ui.foundation.shape.corner.CornerSize getTopRight();
+  }
+
+  public final class RoundedCornerShapeKt {
+    ctor public RoundedCornerShapeKt();
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(androidx.ui.foundation.shape.corner.CornerSize corner);
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(androidx.ui.core.Dp size);
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(androidx.ui.core.Px size);
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(int percent);
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(androidx.ui.core.Dp topLeft = 0.dp, androidx.ui.core.Dp topRight = 0.dp, androidx.ui.core.Dp bottomRight = 0.dp, androidx.ui.core.Dp bottomLeft = 0.dp);
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(androidx.ui.core.Px topLeft = 0.px, androidx.ui.core.Px topRight = 0.px, androidx.ui.core.Px bottomRight = 0.px, androidx.ui.core.Px bottomLeft = 0.px);
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(@IntRange(from=0, to=50) int topLeftPercent = 0, @IntRange(from=0, to=50) int topRightPercent = 0, @IntRange(from=0, to=50) int bottomRightPercent = 0, @IntRange(from=0, to=50) int bottomLeftPercent = 0);
+    method public static androidx.ui.foundation.shape.corner.RoundedCornerShape getCircleShape();
+  }
+
+}
+
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index 04f36d8..6c423c8 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -81,7 +81,7 @@
 
   public final class SimpleImageKt {
     ctor public SimpleImageKt();
-    method public static void SimpleImage(androidx.ui.painting.Image image, androidx.ui.graphics.Color? tint = null);
+    method public static void SimpleImage(androidx.ui.graphics.Image image, androidx.ui.graphics.Color? tint = null);
   }
 
   public final class Strings {
@@ -239,8 +239,8 @@
   }
 
   public final class GenericShape implements androidx.ui.engine.geometry.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
-    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
     method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
   }
 
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev01.txt b/ui/ui-foundation/api/restricted_0.1.0-dev01.txt
index 04f36d8..6c423c8 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev01.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev01.txt
@@ -81,7 +81,7 @@
 
   public final class SimpleImageKt {
     ctor public SimpleImageKt();
-    method public static void SimpleImage(androidx.ui.painting.Image image, androidx.ui.graphics.Color? tint = null);
+    method public static void SimpleImage(androidx.ui.graphics.Image image, androidx.ui.graphics.Color? tint = null);
   }
 
   public final class Strings {
@@ -239,8 +239,8 @@
   }
 
   public final class GenericShape implements androidx.ui.engine.geometry.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
-    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
     method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
   }
 
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index 04f36d8..6c423c8 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -81,7 +81,7 @@
 
   public final class SimpleImageKt {
     ctor public SimpleImageKt();
-    method public static void SimpleImage(androidx.ui.painting.Image image, androidx.ui.graphics.Color? tint = null);
+    method public static void SimpleImage(androidx.ui.graphics.Image image, androidx.ui.graphics.Color? tint = null);
   }
 
   public final class Strings {
@@ -239,8 +239,8 @@
   }
 
   public final class GenericShape implements androidx.ui.engine.geometry.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
-    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.painting.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
+    method public androidx.ui.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.core.PxSize,kotlin.Unit> builder);
     method public androidx.ui.engine.geometry.Outline createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
   }
 
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 f211bf0..6db3e07 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
@@ -52,7 +52,7 @@
 import androidx.ui.layout.HeightSpacer
 import androidx.ui.layout.MainAxisAlignment
 import androidx.ui.layout.Wrap
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.ui.text.ParagraphStyle
 import androidx.ui.text.TextStyle
 import androidx.ui.text.style.TextAlign
diff --git a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
index 30d8e63..efba175 100644
--- a/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
+++ b/ui/ui-foundation/integration-tests/samples/src/main/java/androidx/ui/foundation/samples/ScrollerSamples.kt
@@ -51,8 +51,8 @@
 import androidx.ui.layout.Stack
 import androidx.ui.layout.Table
 import androidx.ui.layout.Wrap
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
 import androidx.ui.text.ParagraphStyle
 import androidx.ui.text.TextStyle
 
diff --git a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ScrollerTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ScrollerTest.kt
index 184ab33..b26641a 100644
--- a/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ScrollerTest.kt
+++ b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/ScrollerTest.kt
@@ -38,8 +38,8 @@
 import androidx.ui.layout.CrossAxisAlignment
 import androidx.ui.layout.DpConstraints
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
-import androidx.ui.painting.PaintingStyle
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.PaintingStyle
 import androidx.compose.composer
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.AndroidComposeView
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt
index 0998b05..2329e5e 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt
@@ -25,10 +25,10 @@
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Container
-import androidx.ui.painting.BlendMode
-import androidx.ui.painting.ColorFilter
-import androidx.ui.painting.Image
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.BlendMode
+import androidx.ui.graphics.ColorFilter
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.Paint
 
 // TODO(Andrey) Temporary. Should be replaced with our proper Image component when it available
 @Composable
@@ -40,7 +40,12 @@
     WithDensity(block = {
         Container(width = image.width.toDp(), height = image.height.toDp()) {
             val paint = +memo { Paint() }
-            paint.colorFilter = tint?.let { ColorFilter(tint, BlendMode.srcIn) }
+            paint.colorFilter = tint?.let {
+                ColorFilter(
+                    tint,
+                    BlendMode.srcIn
+                )
+            }
             Draw { canvas, _ ->
                 canvas.drawImage(image, Offset.zero, paint)
             }
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/TableBorders.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/TableBorders.kt
index ceeeed5..76dde50 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/TableBorders.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/TableBorders.kt
@@ -26,7 +26,7 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Table
 import androidx.ui.layout.TableChildren
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 
 /**
  * Adds border drawing for a [Table] layout, when placed inside the [TableChildren] block.
@@ -63,7 +63,7 @@
                     )
                 }
                 // TODO(calintat): Reset paint when that operation is available.
-                border.brush.applyBrush(paint)
+                border.brush.applyTo(paint)
                 paint.strokeWidth = border.width.toPx().value
                 canvas.drawLine(p1, p2, paint)
             }
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt
index f404358..45dae21 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt
@@ -28,7 +28,7 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.SolidColor
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 
 /**
  * Draw the [shape] with the provided [color].
@@ -52,7 +52,7 @@
     with(+memo { DrawShapeCacheHolder() }) {
         lastShape = shape
         Draw { canvas, parentSize ->
-            brush.applyBrush(paint)
+            brush.applyTo(paint)
             lastParentSize = parentSize
             val outline =
                 lastOutline ?: shape.createOutline(parentSize, density).also { lastOutline = it }
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt
index aa263ef..d1070a3 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt
@@ -20,7 +20,7 @@
 import androidx.ui.core.PxSize
 import androidx.ui.engine.geometry.Outline
 import androidx.ui.engine.geometry.Shape
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Path
 
 /**
  * Creates [Shape] defined by applying the provided [builder] on a [Path].
diff --git a/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt
index a28be90..cce9c3a 100644
--- a/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt
+++ b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt
@@ -27,9 +27,9 @@
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.engine.geometry.Shape
 import androidx.ui.engine.geometry.addOutline
-import androidx.ui.painting.Paint
-import androidx.ui.painting.Path
-import androidx.ui.painting.PathOperation
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.Path
+import androidx.ui.graphics.PathOperation
 
 /**
  * Draw the [Border] as an inner stroke for the provided [shape].
@@ -67,7 +67,7 @@
                 diffPathIsCached = true
             }
 
-            border.brush.applyBrush(paint)
+            border.brush.applyTo(paint)
             canvas.drawPath(diffPath, paint)
         }
     }
diff --git a/ui/ui-framework/api/0.1.0-dev01.txt b/ui/ui-framework/api/0.1.0-dev01.txt
index b35afd5..c0f9971 100644
--- a/ui/ui-framework/api/0.1.0-dev01.txt
+++ b/ui/ui-framework/api/0.1.0-dev01.txt
@@ -16,8 +16,8 @@
 
   public final class DrawKt {
     ctor public DrawKt();
-    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
   }
 
   public final class DrawShadowKt {
@@ -310,7 +310,7 @@
 
   public final class VectorAssetBuilder {
     ctor public VectorAssetBuilder(String name, androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth, float viewportHeight);
-    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
     method public androidx.ui.graphics.vector.VectorAsset build();
     method public void ensureNotConsumed();
     method public androidx.ui.core.Px getDefaultHeight();
@@ -319,7 +319,7 @@
     method public float getViewportHeight();
     method public float getViewportWidth();
     method public androidx.ui.graphics.vector.VectorAssetBuilder popGroup();
-    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath);
   }
 
   public final class VectorAssetKt {
@@ -331,15 +331,15 @@
     ctor public VectorComposeKt();
     method public static void DrawVector(androidx.ui.core.Dp defaultWidth, androidx.ui.core.Dp defaultHeight, float viewportWidth = -1.0f, float viewportHeight = -1.0f, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     method public static void DrawVector(androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth = defaultWidth.value, float viewportHeight = defaultHeight.value, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
-    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
-    method public static void Path(androidx.ui.graphics.vector.VectorScope, Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
+    method public static void Path(androidx.ui.graphics.vector.VectorScope, androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, Object? clipPathData);
+    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, androidx.ui.graphics.vector.PathNode![] clipPathData);
     ctor public VectorGroup();
     method public operator androidx.ui.graphics.vector.VectorNode get(int index);
-    method public Object? getClipPathData();
+    method public androidx.ui.graphics.vector.PathNode![] getClipPathData();
     method public String getName();
     method public float getPivotX();
     method public float getPivotY();
@@ -357,15 +357,15 @@
   }
 
   public final class VectorPath extends androidx.ui.graphics.vector.VectorNode {
-    ctor public VectorPath(String name, Object? pathData, Object fill, float fillAlpha, Object stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.painting.StrokeCap strokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin, float strokeLineMiter);
-    method public Object getFill();
+    ctor public VectorPath(String name, androidx.ui.graphics.vector.PathNode![] pathData, androidx.ui.graphics.Brush? fill, float fillAlpha, androidx.ui.graphics.Brush? stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.graphics.StrokeCap strokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin, float strokeLineMiter);
+    method public androidx.ui.graphics.Brush? getFill();
     method public float getFillAlpha();
     method public String getName();
-    method public Object? getPathData();
-    method public Object getStroke();
+    method public androidx.ui.graphics.vector.PathNode![] getPathData();
+    method public androidx.ui.graphics.Brush? getStroke();
     method public float getStrokeAlpha();
-    method public androidx.ui.painting.StrokeCap getStrokeLineCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeLineJoin();
+    method public androidx.ui.graphics.StrokeCap getStrokeLineCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeLineJoin();
     method public float getStrokeLineMiter();
     method public float getStrokeLineWidth();
   }
diff --git a/ui/ui-framework/api/current.txt b/ui/ui-framework/api/current.txt
index b35afd5..c0f9971 100644
--- a/ui/ui-framework/api/current.txt
+++ b/ui/ui-framework/api/current.txt
@@ -16,8 +16,8 @@
 
   public final class DrawKt {
     ctor public DrawKt();
-    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
   }
 
   public final class DrawShadowKt {
@@ -310,7 +310,7 @@
 
   public final class VectorAssetBuilder {
     ctor public VectorAssetBuilder(String name, androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth, float viewportHeight);
-    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
     method public androidx.ui.graphics.vector.VectorAsset build();
     method public void ensureNotConsumed();
     method public androidx.ui.core.Px getDefaultHeight();
@@ -319,7 +319,7 @@
     method public float getViewportHeight();
     method public float getViewportWidth();
     method public androidx.ui.graphics.vector.VectorAssetBuilder popGroup();
-    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath);
   }
 
   public final class VectorAssetKt {
@@ -331,15 +331,15 @@
     ctor public VectorComposeKt();
     method public static void DrawVector(androidx.ui.core.Dp defaultWidth, androidx.ui.core.Dp defaultHeight, float viewportWidth = -1.0f, float viewportHeight = -1.0f, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     method public static void DrawVector(androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth = defaultWidth.value, float viewportHeight = defaultHeight.value, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
-    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
-    method public static void Path(androidx.ui.graphics.vector.VectorScope, Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
+    method public static void Path(androidx.ui.graphics.vector.VectorScope, androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, Object? clipPathData);
+    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, androidx.ui.graphics.vector.PathNode![] clipPathData);
     ctor public VectorGroup();
     method public operator androidx.ui.graphics.vector.VectorNode get(int index);
-    method public Object? getClipPathData();
+    method public androidx.ui.graphics.vector.PathNode![] getClipPathData();
     method public String getName();
     method public float getPivotX();
     method public float getPivotY();
@@ -357,15 +357,15 @@
   }
 
   public final class VectorPath extends androidx.ui.graphics.vector.VectorNode {
-    ctor public VectorPath(String name, Object? pathData, Object fill, float fillAlpha, Object stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.painting.StrokeCap strokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin, float strokeLineMiter);
-    method public Object getFill();
+    ctor public VectorPath(String name, androidx.ui.graphics.vector.PathNode![] pathData, androidx.ui.graphics.Brush? fill, float fillAlpha, androidx.ui.graphics.Brush? stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.graphics.StrokeCap strokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin, float strokeLineMiter);
+    method public androidx.ui.graphics.Brush? getFill();
     method public float getFillAlpha();
     method public String getName();
-    method public Object? getPathData();
-    method public Object getStroke();
+    method public androidx.ui.graphics.vector.PathNode![] getPathData();
+    method public androidx.ui.graphics.Brush? getStroke();
     method public float getStrokeAlpha();
-    method public androidx.ui.painting.StrokeCap getStrokeLineCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeLineJoin();
+    method public androidx.ui.graphics.StrokeCap getStrokeLineCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeLineJoin();
     method public float getStrokeLineMiter();
     method public float getStrokeLineWidth();
   }
diff --git a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev01.txt b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev01.txt
index b35afd5..c0f9971 100644
--- a/ui/ui-framework/api/public_plus_experimental_0.1.0-dev01.txt
+++ b/ui/ui-framework/api/public_plus_experimental_0.1.0-dev01.txt
@@ -16,8 +16,8 @@
 
   public final class DrawKt {
     ctor public DrawKt();
-    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
   }
 
   public final class DrawShadowKt {
@@ -310,7 +310,7 @@
 
   public final class VectorAssetBuilder {
     ctor public VectorAssetBuilder(String name, androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth, float viewportHeight);
-    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
     method public androidx.ui.graphics.vector.VectorAsset build();
     method public void ensureNotConsumed();
     method public androidx.ui.core.Px getDefaultHeight();
@@ -319,7 +319,7 @@
     method public float getViewportHeight();
     method public float getViewportWidth();
     method public androidx.ui.graphics.vector.VectorAssetBuilder popGroup();
-    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath);
   }
 
   public final class VectorAssetKt {
@@ -331,15 +331,15 @@
     ctor public VectorComposeKt();
     method public static void DrawVector(androidx.ui.core.Dp defaultWidth, androidx.ui.core.Dp defaultHeight, float viewportWidth = -1.0f, float viewportHeight = -1.0f, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     method public static void DrawVector(androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth = defaultWidth.value, float viewportHeight = defaultHeight.value, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
-    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
-    method public static void Path(androidx.ui.graphics.vector.VectorScope, Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
+    method public static void Path(androidx.ui.graphics.vector.VectorScope, androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, Object? clipPathData);
+    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, androidx.ui.graphics.vector.PathNode![] clipPathData);
     ctor public VectorGroup();
     method public operator androidx.ui.graphics.vector.VectorNode get(int index);
-    method public Object? getClipPathData();
+    method public androidx.ui.graphics.vector.PathNode![] getClipPathData();
     method public String getName();
     method public float getPivotX();
     method public float getPivotY();
@@ -357,15 +357,15 @@
   }
 
   public final class VectorPath extends androidx.ui.graphics.vector.VectorNode {
-    ctor public VectorPath(String name, Object? pathData, Object fill, float fillAlpha, Object stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.painting.StrokeCap strokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin, float strokeLineMiter);
-    method public Object getFill();
+    ctor public VectorPath(String name, androidx.ui.graphics.vector.PathNode![] pathData, androidx.ui.graphics.Brush? fill, float fillAlpha, androidx.ui.graphics.Brush? stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.graphics.StrokeCap strokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin, float strokeLineMiter);
+    method public androidx.ui.graphics.Brush? getFill();
     method public float getFillAlpha();
     method public String getName();
-    method public Object? getPathData();
-    method public Object getStroke();
+    method public androidx.ui.graphics.vector.PathNode![] getPathData();
+    method public androidx.ui.graphics.Brush? getStroke();
     method public float getStrokeAlpha();
-    method public androidx.ui.painting.StrokeCap getStrokeLineCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeLineJoin();
+    method public androidx.ui.graphics.StrokeCap getStrokeLineCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeLineJoin();
     method public float getStrokeLineMiter();
     method public float getStrokeLineWidth();
   }
diff --git a/ui/ui-framework/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-framework/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..45de10d
--- /dev/null
+++ b/ui/ui-framework/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,448 @@
+// Signature format: 3.0
+package androidx.ui.core {
+
+  public final class ClipKt {
+    ctor public ClipKt();
+    method public static void Clip(androidx.ui.engine.geometry.Shape shape, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class ComplexLayoutScope {
+    method public void maxIntrinsicHeight(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicHeightBlock);
+    method public void maxIntrinsicWidth(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicWidthBlock);
+    method public void measure(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureBlockScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,androidx.ui.core.LayoutResult> measureBlock);
+    method public void minIntrinsicHeight(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> minIntrinsicHeightBlock);
+    method public void minIntrinsicWidth(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> minIntrinsicWidthBlock);
+  }
+
+  public final class DrawKt {
+    ctor public DrawKt();
+    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+  }
+
+  public final class DrawShadowKt {
+    ctor public DrawShadowKt();
+    method public static void DrawShadow(androidx.ui.engine.geometry.Shape shape, androidx.ui.core.Dp elevation);
+  }
+
+  public final class LayoutKt {
+    ctor public LayoutKt();
+    method public static void ComplexLayout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function1<? super androidx.ui.core.ComplexLayoutScope,kotlin.Unit> block);
+    method public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureBlockScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,androidx.ui.core.LayoutResult> measureBlock);
+    method public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit>![] childrenArray, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureBlockScope,? super androidx.ui.core.MultiComposableMeasurables,? super androidx.ui.core.Constraints,androidx.ui.core.LayoutResult> measureBlock);
+    method public static void OnChildPositioned(kotlin.jvm.functions.Function1<? super androidx.ui.core.LayoutCoordinates,kotlin.Unit> onPositioned, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void OnPositioned(kotlin.jvm.functions.Function1<? super androidx.ui.core.LayoutCoordinates,kotlin.Unit> onPositioned);
+    method public static void WithConstraints(kotlin.jvm.functions.Function1<? super androidx.ui.core.Constraints,kotlin.Unit> children);
+  }
+
+  public final class MultiComposableMeasurables implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.core.Measurable> {
+    method public boolean contains(androidx.ui.core.Measurable element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public operator java.util.List<androidx.ui.core.Measurable> get(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.ui.core.Measurable get(int index);
+    method public int getSize();
+    method public int indexOf(androidx.ui.core.Measurable element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.ui.core.Measurable> iterator();
+    method public int lastIndexOf(androidx.ui.core.Measurable element);
+    method public java.util.ListIterator<androidx.ui.core.Measurable> listIterator();
+    method public java.util.ListIterator<androidx.ui.core.Measurable> listIterator(int index);
+    method public java.util.List<androidx.ui.core.Measurable> subList(int fromIndex, int toIndex);
+  }
+
+  public final class OpacityKt {
+    ctor public OpacityKt();
+    method public static void Opacity(@FloatRange(from=0.0, to=1.0) float opacity, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class ParentDataKt {
+    ctor public ParentDataKt();
+    method public static void ParentData(Object data, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class PointerInputWrapperKt {
+    ctor public PointerInputWrapperKt();
+    method public static void PointerInputWrapper(kotlin.jvm.functions.Function2<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? extends java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler = { event, _ -> event }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class RepaintBoundaryKt {
+    ctor public RepaintBoundaryKt();
+    method public static void RepaintBoundary(String? name = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class TestTagProviderKt {
+    ctor public TestTagProviderKt();
+    method public static void TestTag(String tag, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static String getDefaultTestTag();
+    method public static androidx.compose.Ambient<java.lang.String> getTestTagAmbient();
+  }
+
+  public final class TextFieldDelegateKt {
+    ctor public TextFieldDelegateKt();
+  }
+
+  public final class TextFieldKt {
+    ctor public TextFieldKt();
+    method public static void TextField(androidx.ui.input.EditorModel value, androidx.ui.input.EditorStyle? editorStyle = null, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorModel,kotlin.Unit> onValueChange = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onFocus = {}, kotlin.jvm.functions.Function0<kotlin.Unit> onBlur = {}, 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(String? text = null, 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 = androidx.ui.core.TextKt.DefaultSelectionColor, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Text(String text, 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 = androidx.ui.core.TextKt.DefaultSelectionColor);
+    method public static void Text(androidx.ui.text.AnnotatedString text, 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 = androidx.ui.core.TextKt.DefaultSelectionColor);
+    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();
+  }
+
+  public final class TextSpanComposeKt {
+    ctor public TextSpanComposeKt();
+    method public static void Span(androidx.ui.core.TextSpanScope, String? text = null, androidx.ui.text.TextStyle? style = null, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> child);
+    method public static void Span(androidx.ui.core.TextSpanScope, String? text = null, androidx.ui.text.TextStyle? style = null);
+    method public static void compose(androidx.ui.text.TextSpan container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function1<? super androidx.ui.core.TextSpanScope,kotlin.Unit> composable);
+    method public static void disposeComposition(androidx.ui.text.TextSpan container, androidx.compose.CompositionReference? parent = null);
+  }
+
+  public final class TextSpanComposer extends androidx.compose.Composer<androidx.ui.text.TextSpan> {
+  }
+
+  public final class TextSpanComposition {
+    ctor public TextSpanComposition(androidx.ui.core.TextSpanComposer composer);
+    method public inline void call(Object key, kotlin.jvm.functions.Function1<? super androidx.compose.ViewValidator,java.lang.Boolean> invalid, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public inline <T> void call(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function2<? super androidx.compose.ViewValidator,? super T,java.lang.Boolean> invalid, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update);
+    method public inline void emit(Object key, kotlin.jvm.functions.Function0<androidx.ui.text.TextSpan> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<androidx.ui.text.TextSpan,androidx.ui.text.TextSpan>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.ui.core.TextSpanComposer getComposer();
+    method public inline Object joinKey(Object left, Object? right);
+    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+  }
+
+  public final class TextSpanScope {
+    method public androidx.ui.core.TextSpanComposition getComposer();
+  }
+
+  public final class WrapperKt {
+    ctor public WrapperKt();
+    method public static void ComposeView(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void WithDensity(kotlin.jvm.functions.Function1<? super androidx.ui.core.DensityReceiver,kotlin.Unit> block);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<androidx.ui.core.Density> ambientDensity();
+    method public static androidx.compose.Ambient<androidx.ui.core.AndroidCraneView> getAndroidCraneViewAmbient();
+    method public static androidx.compose.Ambient<androidx.ui.autofill.Autofill> getAutofillAmbient();
+    method public static androidx.compose.Ambient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
+    method public static androidx.compose.Ambient<android.content.res.Configuration> getConfigurationAmbient();
+    method public static androidx.compose.Ambient<android.content.Context> getContextAmbient();
+    method public static androidx.compose.Ambient<kotlin.coroutines.CoroutineContext> getCoroutineContextAmbient();
+    method public static androidx.compose.Ambient<androidx.ui.core.Density> getDensityAmbient();
+    method public static androidx.compose.Ambient<androidx.ui.core.LayoutDirection> getLayoutDirectionAmbient();
+    method public static androidx.compose.CompositionContext? setContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.CompositionContext? setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @CheckResult(suggest="+") public static <R> androidx.compose.Effect<R> withDensity(kotlin.jvm.functions.Function1<? super androidx.ui.core.DensityReceiver,? extends R> block);
+  }
+
+}
+
+package androidx.ui.core.gesture {
+
+  public final class ConstantsKt {
+    ctor public ConstantsKt();
+    method public static androidx.ui.core.Duration getDoubleTapMinTime();
+    method public static androidx.ui.core.Dp getDoubleTapSlop();
+    method public static androidx.ui.core.Duration getDoubleTapTimeout();
+    method public static androidx.ui.core.Dp getDoubleTapTouchSlop();
+    method public static androidx.ui.core.Dp getHoverTapSlop();
+    method public static androidx.ui.core.Duration getHoverTapTimeout();
+    method public static androidx.ui.core.Duration getJumpTapTimeout();
+    method public static androidx.ui.core.Duration getLongPressTimeout();
+    method public static androidx.ui.core.Dp getMaxFlingVelocity();
+    method public static androidx.ui.core.Dp getMinFlingVelocity();
+    method public static float getPagingTouchSlop();
+    method public static float getPanSlop();
+    method public static androidx.ui.core.Duration getPressTimeout();
+    method public static androidx.ui.core.Dp getScaleSlop();
+    method public static androidx.ui.core.Dp getTouchSlop();
+    method public static androidx.ui.core.Dp getWindowTouchSlop();
+    method public static androidx.ui.core.Duration getZoomControlsTimeout();
+  }
+
+  public final class DoubleTapGestureDetectorKt {
+    ctor public DoubleTapGestureDetectorKt();
+    method public static void DoubleTapGestureDetector(kotlin.jvm.functions.Function1<? super androidx.ui.core.PxPosition,kotlin.Unit> onDoubleTap, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public interface DragObserver {
+    method public default androidx.ui.core.PxPosition onDrag(androidx.ui.core.PxPosition dragDistance);
+    method public default void onStart();
+    method public default void onStop(androidx.ui.core.PxPosition velocity);
+  }
+
+  public final class LongPressDragGestureDetectorKt {
+    ctor public LongPressDragGestureDetectorKt();
+    method public static void LongPressDragGestureDetector(androidx.ui.core.gesture.LongPressDragObserver longPressDragObserver, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public interface LongPressDragObserver {
+    method public default androidx.ui.core.PxPosition onDrag(androidx.ui.core.PxPosition dragDistance);
+    method public default void onDragStart();
+    method public default void onLongPress(androidx.ui.core.PxPosition pxPosition);
+    method public default void onStop(androidx.ui.core.PxPosition velocity);
+  }
+
+  public final class LongPressGestureDetectorKt {
+    ctor public LongPressGestureDetectorKt();
+    method public static void LongPressGestureDetector(kotlin.jvm.functions.Function1<? super androidx.ui.core.PxPosition,kotlin.Unit> onLongPress, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class PressGestureDetectorKt {
+    ctor public PressGestureDetectorKt();
+    method public static void PressGestureDetector(kotlin.jvm.functions.Function1<? super androidx.ui.core.PxPosition,kotlin.Unit>? onPress = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onRelease = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class PressIndicatorGestureDetectorKt {
+    ctor public PressIndicatorGestureDetectorKt();
+    method public static void PressIndicatorGestureDetector(kotlin.jvm.functions.Function1<? super androidx.ui.core.PxPosition,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class PressReleasedGestureDetectorKt {
+    ctor public PressReleasedGestureDetectorKt();
+    method public static void PressReleasedGestureDetector(kotlin.jvm.functions.Function0<kotlin.Unit>? onRelease = null, boolean consumeDownOnStart = true, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class RawDragGestureDetectorKt {
+    ctor public RawDragGestureDetectorKt();
+    method public static void RawDragGestureDetector(androidx.ui.core.gesture.DragObserver dragObserver, kotlin.jvm.functions.Function0<java.lang.Boolean>? canStartDragging = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class TouchSlopDragGestureDetectorKt {
+    ctor public TouchSlopDragGestureDetectorKt();
+    method public static void TouchSlopDragGestureDetector(androidx.ui.core.gesture.DragObserver dragObserver, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean>? canDrag = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class TouchSlopExceededGestureDetectorKt {
+    ctor public TouchSlopExceededGestureDetectorKt();
+    method public static void TouchSlopExceededGestureDetector(kotlin.jvm.functions.Function0<kotlin.Unit> onTouchSlopExceeded, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean>? canDrag = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+}
+
+package androidx.ui.core.gesture.util {
+
+  public final class PolyFitLeastSquaresKt {
+    ctor public PolyFitLeastSquaresKt();
+  }
+
+  public final class VelocityTracker {
+    ctor public VelocityTracker();
+    method public void addPosition(androidx.ui.core.Timestamp time, androidx.ui.core.PxPosition position);
+    method public androidx.ui.core.Velocity calculateVelocity();
+    method public void resetTracking();
+  }
+
+  public final class VelocityTrackerKt {
+    ctor public VelocityTrackerKt();
+  }
+
+}
+
+package androidx.ui.core.selection {
+
+  public final class Selection {
+    ctor public Selection(androidx.ui.core.PxPosition startCoordinates, androidx.ui.core.PxPosition endCoordinates, androidx.ui.text.style.TextDirection startDirection, androidx.ui.text.style.TextDirection endDirection, androidx.ui.core.LayoutCoordinates? startLayoutCoordinates, androidx.ui.core.LayoutCoordinates? endLayoutCoordinates);
+    method public androidx.ui.core.PxPosition component1();
+    method public androidx.ui.core.PxPosition component2();
+    method public androidx.ui.text.style.TextDirection component3();
+    method public androidx.ui.text.style.TextDirection component4();
+    method public androidx.ui.core.LayoutCoordinates? component5();
+    method public androidx.ui.core.LayoutCoordinates? component6();
+    method public androidx.ui.core.selection.Selection copy(androidx.ui.core.PxPosition startCoordinates, androidx.ui.core.PxPosition endCoordinates, androidx.ui.text.style.TextDirection startDirection, androidx.ui.text.style.TextDirection endDirection, androidx.ui.core.LayoutCoordinates? startLayoutCoordinates, androidx.ui.core.LayoutCoordinates? endLayoutCoordinates);
+    method public androidx.ui.core.PxPosition getEndCoordinates();
+    method public androidx.ui.text.style.TextDirection getEndDirection();
+    method public androidx.ui.core.LayoutCoordinates? getEndLayoutCoordinates();
+    method public androidx.ui.core.PxPosition getStartCoordinates();
+    method public androidx.ui.text.style.TextDirection getStartDirection();
+    method public androidx.ui.core.LayoutCoordinates? getStartLayoutCoordinates();
+  }
+
+  public final class SelectionContainerKt {
+    ctor public SelectionContainerKt();
+    method public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, androidx.ui.core.selection.SelectionMode mode = SelectionMode.Vertical, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class SelectionHandlesKt {
+    ctor public SelectionHandlesKt();
+  }
+
+  public final class SelectionKt {
+    ctor public SelectionKt();
+  }
+
+  public final class SelectionManagerKt {
+    ctor public SelectionManagerKt();
+  }
+
+  public enum SelectionMode {
+    enum_constant public static final androidx.ui.core.selection.SelectionMode Horizontal;
+    enum_constant public static final androidx.ui.core.selection.SelectionMode Vertical;
+  }
+
+}
+
+package androidx.ui.graphics.vector {
+
+  public final class VectorAsset {
+    method public androidx.ui.core.Px getDefaultHeight();
+    method public androidx.ui.core.Px getDefaultWidth();
+    method public String getName();
+    method public androidx.ui.graphics.vector.VectorGroup getRoot();
+    method public float getViewportHeight();
+    method public float getViewportWidth();
+  }
+
+  public final class VectorAssetBuilder {
+    ctor public VectorAssetBuilder(String name, androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth, float viewportHeight);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public androidx.ui.graphics.vector.VectorAsset build();
+    method public void ensureNotConsumed();
+    method public androidx.ui.core.Px getDefaultHeight();
+    method public androidx.ui.core.Px getDefaultWidth();
+    method public String getName();
+    method public float getViewportHeight();
+    method public float getViewportWidth();
+    method public androidx.ui.graphics.vector.VectorAssetBuilder popGroup();
+    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath);
+  }
+
+  public final class VectorAssetKt {
+    ctor public VectorAssetKt();
+    method public static void DrawVector(androidx.ui.graphics.vector.VectorAsset vectorImage);
+  }
+
+  public final class VectorComposeKt {
+    ctor public VectorComposeKt();
+    method public static void DrawVector(androidx.ui.core.Dp defaultWidth, androidx.ui.core.Dp defaultHeight, float viewportWidth = -1.0f, float viewportHeight = -1.0f, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method public static void DrawVector(androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth = defaultWidth.value, float viewportHeight = defaultHeight.value, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
+    method public static void Path(androidx.ui.graphics.vector.VectorScope, androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+  }
+
+  public final class VectorGroup extends androidx.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
+    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, androidx.ui.graphics.vector.PathNode![] clipPathData);
+    ctor public VectorGroup();
+    method public operator androidx.ui.graphics.vector.VectorNode get(int index);
+    method public androidx.ui.graphics.vector.PathNode![] getClipPathData();
+    method public String getName();
+    method public float getPivotX();
+    method public float getPivotY();
+    method public float getRotation();
+    method public float getScaleX();
+    method public float getScaleY();
+    method public int getSize();
+    method public float getTranslationX();
+    method public float getTranslationY();
+    method public java.util.Iterator<androidx.ui.graphics.vector.VectorNode> iterator();
+    property public final int size;
+  }
+
+  public abstract sealed class VectorNode {
+  }
+
+  public final class VectorPath extends androidx.ui.graphics.vector.VectorNode {
+    ctor public VectorPath(String name, androidx.ui.graphics.vector.PathNode![] pathData, androidx.ui.graphics.Brush? fill, float fillAlpha, androidx.ui.graphics.Brush? stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.graphics.StrokeCap strokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin, float strokeLineMiter);
+    method public androidx.ui.graphics.Brush? getFill();
+    method public float getFillAlpha();
+    method public String getName();
+    method public androidx.ui.graphics.vector.PathNode![] getPathData();
+    method public androidx.ui.graphics.Brush? getStroke();
+    method public float getStrokeAlpha();
+    method public androidx.ui.graphics.StrokeCap getStrokeLineCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeLineJoin();
+    method public float getStrokeLineMiter();
+    method public float getStrokeLineWidth();
+  }
+
+}
+
+package androidx.ui.graphics.vector.compat {
+
+  public final class VectorResourceKt {
+    ctor public VectorResourceKt();
+    method public static void DrawVectorResource(int resId);
+    method public static androidx.ui.graphics.vector.VectorAsset loadVectorResource(android.content.res.Resources.Theme? theme = null, android.content.res.Resources res, int resId) throws org.xmlpull.v1.XmlPullParserException;
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<androidx.ui.graphics.vector.VectorAsset> vectorResource(int resId);
+  }
+
+  public final class XmlVectorParserKt {
+    ctor public XmlVectorParserKt();
+  }
+
+}
+
+package androidx.ui.res {
+
+  public final class ResourcesKt {
+    ctor public ResourcesKt();
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<java.lang.String> stringResource(@StringRes int id);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<java.lang.String> stringResource(@StringRes int id, java.lang.Object... formatArgs);
+  }
+
+}
+
+package androidx.ui.semantics {
+
+  public final class SemanticsActions {
+    ctor public SemanticsActions();
+    field public static final androidx.ui.semantics.SemanticsActions.Companion! Companion;
+  }
+
+  public static final class SemanticsActions.Companion {
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>>>> getCustomActions();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>>> getOnClick();
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>>>> CustomActions;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>>> OnClick;
+  }
+
+  public final class SemanticsKt {
+    ctor public SemanticsKt();
+    method public static void Semantics(boolean container = false, boolean explicitChildNodes = false, kotlin.jvm.functions.Function1<? super androidx.ui.semantics.SemanticsPropertyReceiver,kotlin.Unit>? properties = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class SemanticsProperties {
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getAccessibilityLabel();
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getAccessibilityValue();
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getEnabled();
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> getHidden();
+    method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.style.TextDirection> getTextDirection();
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityLabel;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityValue;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Enabled;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.Boolean> Hidden;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.style.TextDirection> TextDirection;
+    field public static final androidx.ui.semantics.SemanticsProperties! INSTANCE;
+  }
+
+  public final class SemanticsPropertiesKt {
+    ctor public SemanticsPropertiesKt();
+    method public static String getAccessibilityLabel(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static String getAccessibilityValue(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static java.util.List<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>>> getCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static boolean getEnabled(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static boolean getHidden(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>> getOnClick(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.ui.text.style.TextDirection getTextDirection(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<kotlin.Unit> action);
+    method public static void setAccessibilityLabel(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
+    method public static void setAccessibilityValue(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
+    method public static void setCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver, java.util.List<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>>> p);
+    method public static void setEnabled(androidx.ui.semantics.SemanticsPropertyReceiver, boolean p);
+    method public static void setHidden(androidx.ui.semantics.SemanticsPropertyReceiver, boolean p);
+    method public static void setOnClick(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<kotlin.Unit>> p);
+    method public static void setTestTag(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
+    method public static void setTextDirection(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.style.TextDirection p);
+  }
+
+}
+
diff --git a/ui/ui-framework/api/public_plus_experimental_current.txt b/ui/ui-framework/api/public_plus_experimental_current.txt
index b35afd5..c0f9971 100644
--- a/ui/ui-framework/api/public_plus_experimental_current.txt
+++ b/ui/ui-framework/api/public_plus_experimental_current.txt
@@ -16,8 +16,8 @@
 
   public final class DrawKt {
     ctor public DrawKt();
-    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
   }
 
   public final class DrawShadowKt {
@@ -310,7 +310,7 @@
 
   public final class VectorAssetBuilder {
     ctor public VectorAssetBuilder(String name, androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth, float viewportHeight);
-    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
     method public androidx.ui.graphics.vector.VectorAsset build();
     method public void ensureNotConsumed();
     method public androidx.ui.core.Px getDefaultHeight();
@@ -319,7 +319,7 @@
     method public float getViewportHeight();
     method public float getViewportWidth();
     method public androidx.ui.graphics.vector.VectorAssetBuilder popGroup();
-    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath);
   }
 
   public final class VectorAssetKt {
@@ -331,15 +331,15 @@
     ctor public VectorComposeKt();
     method public static void DrawVector(androidx.ui.core.Dp defaultWidth, androidx.ui.core.Dp defaultHeight, float viewportWidth = -1.0f, float viewportHeight = -1.0f, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     method public static void DrawVector(androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth = defaultWidth.value, float viewportHeight = defaultHeight.value, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
-    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
-    method public static void Path(androidx.ui.graphics.vector.VectorScope, Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
+    method public static void Path(androidx.ui.graphics.vector.VectorScope, androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, Object? clipPathData);
+    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, androidx.ui.graphics.vector.PathNode![] clipPathData);
     ctor public VectorGroup();
     method public operator androidx.ui.graphics.vector.VectorNode get(int index);
-    method public Object? getClipPathData();
+    method public androidx.ui.graphics.vector.PathNode![] getClipPathData();
     method public String getName();
     method public float getPivotX();
     method public float getPivotY();
@@ -357,15 +357,15 @@
   }
 
   public final class VectorPath extends androidx.ui.graphics.vector.VectorNode {
-    ctor public VectorPath(String name, Object? pathData, Object fill, float fillAlpha, Object stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.painting.StrokeCap strokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin, float strokeLineMiter);
-    method public Object getFill();
+    ctor public VectorPath(String name, androidx.ui.graphics.vector.PathNode![] pathData, androidx.ui.graphics.Brush? fill, float fillAlpha, androidx.ui.graphics.Brush? stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.graphics.StrokeCap strokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin, float strokeLineMiter);
+    method public androidx.ui.graphics.Brush? getFill();
     method public float getFillAlpha();
     method public String getName();
-    method public Object? getPathData();
-    method public Object getStroke();
+    method public androidx.ui.graphics.vector.PathNode![] getPathData();
+    method public androidx.ui.graphics.Brush? getStroke();
     method public float getStrokeAlpha();
-    method public androidx.ui.painting.StrokeCap getStrokeLineCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeLineJoin();
+    method public androidx.ui.graphics.StrokeCap getStrokeLineCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeLineJoin();
     method public float getStrokeLineMiter();
     method public float getStrokeLineWidth();
   }
diff --git a/ui/ui-framework/api/restricted_0.1.0-dev01.txt b/ui/ui-framework/api/restricted_0.1.0-dev01.txt
index b35afd5..c0f9971 100644
--- a/ui/ui-framework/api/restricted_0.1.0-dev01.txt
+++ b/ui/ui-framework/api/restricted_0.1.0-dev01.txt
@@ -16,8 +16,8 @@
 
   public final class DrawKt {
     ctor public DrawKt();
-    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
   }
 
   public final class DrawShadowKt {
@@ -310,7 +310,7 @@
 
   public final class VectorAssetBuilder {
     ctor public VectorAssetBuilder(String name, androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth, float viewportHeight);
-    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
     method public androidx.ui.graphics.vector.VectorAsset build();
     method public void ensureNotConsumed();
     method public androidx.ui.core.Px getDefaultHeight();
@@ -319,7 +319,7 @@
     method public float getViewportHeight();
     method public float getViewportWidth();
     method public androidx.ui.graphics.vector.VectorAssetBuilder popGroup();
-    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath);
   }
 
   public final class VectorAssetKt {
@@ -331,15 +331,15 @@
     ctor public VectorComposeKt();
     method public static void DrawVector(androidx.ui.core.Dp defaultWidth, androidx.ui.core.Dp defaultHeight, float viewportWidth = -1.0f, float viewportHeight = -1.0f, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     method public static void DrawVector(androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth = defaultWidth.value, float viewportHeight = defaultHeight.value, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
-    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
-    method public static void Path(androidx.ui.graphics.vector.VectorScope, Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
+    method public static void Path(androidx.ui.graphics.vector.VectorScope, androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, Object? clipPathData);
+    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, androidx.ui.graphics.vector.PathNode![] clipPathData);
     ctor public VectorGroup();
     method public operator androidx.ui.graphics.vector.VectorNode get(int index);
-    method public Object? getClipPathData();
+    method public androidx.ui.graphics.vector.PathNode![] getClipPathData();
     method public String getName();
     method public float getPivotX();
     method public float getPivotY();
@@ -357,15 +357,15 @@
   }
 
   public final class VectorPath extends androidx.ui.graphics.vector.VectorNode {
-    ctor public VectorPath(String name, Object? pathData, Object fill, float fillAlpha, Object stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.painting.StrokeCap strokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin, float strokeLineMiter);
-    method public Object getFill();
+    ctor public VectorPath(String name, androidx.ui.graphics.vector.PathNode![] pathData, androidx.ui.graphics.Brush? fill, float fillAlpha, androidx.ui.graphics.Brush? stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.graphics.StrokeCap strokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin, float strokeLineMiter);
+    method public androidx.ui.graphics.Brush? getFill();
     method public float getFillAlpha();
     method public String getName();
-    method public Object? getPathData();
-    method public Object getStroke();
+    method public androidx.ui.graphics.vector.PathNode![] getPathData();
+    method public androidx.ui.graphics.Brush? getStroke();
     method public float getStrokeAlpha();
-    method public androidx.ui.painting.StrokeCap getStrokeLineCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeLineJoin();
+    method public androidx.ui.graphics.StrokeCap getStrokeLineCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeLineJoin();
     method public float getStrokeLineMiter();
     method public float getStrokeLineWidth();
   }
diff --git a/ui/ui-framework/api/restricted_current.txt b/ui/ui-framework/api/restricted_current.txt
index b35afd5..c0f9971 100644
--- a/ui/ui-framework/api/restricted_current.txt
+++ b/ui/ui-framework/api/restricted_current.txt
@@ -16,8 +16,8 @@
 
   public final class DrawKt {
     ctor public DrawKt();
-    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
+    method public static void Draw(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
   }
 
   public final class DrawShadowKt {
@@ -310,7 +310,7 @@
 
   public final class VectorAssetBuilder {
     ctor public VectorAssetBuilder(String name, androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth, float viewportHeight);
-    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder addPath(androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
     method public androidx.ui.graphics.vector.VectorAsset build();
     method public void ensureNotConsumed();
     method public androidx.ui.core.Px getDefaultHeight();
@@ -319,7 +319,7 @@
     method public float getViewportHeight();
     method public float getViewportWidth();
     method public androidx.ui.graphics.vector.VectorAssetBuilder popGroup();
-    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath);
+    method public androidx.ui.graphics.vector.VectorAssetBuilder pushGroup(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath);
   }
 
   public final class VectorAssetKt {
@@ -331,15 +331,15 @@
     ctor public VectorComposeKt();
     method public static void DrawVector(androidx.ui.core.Dp defaultWidth, androidx.ui.core.Dp defaultHeight, float viewportWidth = -1.0f, float viewportHeight = -1.0f, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     method public static void DrawVector(androidx.ui.core.Px defaultWidth, androidx.ui.core.Px defaultHeight, float viewportWidth = defaultWidth.value, float viewportHeight = defaultHeight.value, String name = "", kotlin.jvm.functions.Function3<? super androidx.ui.graphics.vector.VectorScope,? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
-    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
-    method public static void Path(androidx.ui.graphics.vector.VectorScope, Object? pathData, String name = "", Object fill = EmptyBrush, float fillAlpha = 1.0f, Object stroke = EmptyBrush, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.painting.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method public static void Group(androidx.ui.graphics.vector.VectorScope, String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, androidx.ui.graphics.vector.PathNode![] clipPathData = EmptyPath, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.vector.VectorScope,kotlin.Unit> children);
+    method public static void Path(androidx.ui.graphics.vector.VectorScope, androidx.ui.graphics.vector.PathNode![] pathData, String name = "", androidx.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, Object? clipPathData);
+    ctor public VectorGroup(String name, float rotation, float pivotX, float pivotY, float scaleX, float scaleY, float translationX, float translationY, androidx.ui.graphics.vector.PathNode![] clipPathData);
     ctor public VectorGroup();
     method public operator androidx.ui.graphics.vector.VectorNode get(int index);
-    method public Object? getClipPathData();
+    method public androidx.ui.graphics.vector.PathNode![] getClipPathData();
     method public String getName();
     method public float getPivotX();
     method public float getPivotY();
@@ -357,15 +357,15 @@
   }
 
   public final class VectorPath extends androidx.ui.graphics.vector.VectorNode {
-    ctor public VectorPath(String name, Object? pathData, Object fill, float fillAlpha, Object stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.painting.StrokeCap strokeLineCap, androidx.ui.painting.StrokeJoin strokeLineJoin, float strokeLineMiter);
-    method public Object getFill();
+    ctor public VectorPath(String name, androidx.ui.graphics.vector.PathNode![] pathData, androidx.ui.graphics.Brush? fill, float fillAlpha, androidx.ui.graphics.Brush? stroke, float strokeAlpha, float strokeLineWidth, androidx.ui.graphics.StrokeCap strokeLineCap, androidx.ui.graphics.StrokeJoin strokeLineJoin, float strokeLineMiter);
+    method public androidx.ui.graphics.Brush? getFill();
     method public float getFillAlpha();
     method public String getName();
-    method public Object? getPathData();
-    method public Object getStroke();
+    method public androidx.ui.graphics.vector.PathNode![] getPathData();
+    method public androidx.ui.graphics.Brush? getStroke();
     method public float getStrokeAlpha();
-    method public androidx.ui.painting.StrokeCap getStrokeLineCap();
-    method public androidx.ui.painting.StrokeJoin getStrokeLineJoin();
+    method public androidx.ui.graphics.StrokeCap getStrokeLineCap();
+    method public androidx.ui.graphics.StrokeJoin getStrokeLineJoin();
     method public float getStrokeLineMiter();
     method public float getStrokeLineWidth();
   }
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt
index 5fde1f2..ccc0ca1 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt
@@ -29,7 +29,7 @@
 import androidx.ui.core.min
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.composer
 import androidx.compose.state
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt
index f1b1249..35d211a 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.ipx
 import androidx.ui.core.toRect
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.composer
 import androidx.ui.graphics.Brush
@@ -53,7 +53,7 @@
 private fun DrawFillRect(brush: Brush) {
     Draw { canvas, parentSize ->
         val paint = Paint()
-        brush.applyBrush(paint)
+        brush.applyTo(paint)
         canvas.drawRect(parentSize.toRect(), paint)
     }
 }
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt
index b6e47d7..8c2eae5 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt
@@ -34,13 +34,14 @@
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
 import androidx.ui.layout.Container
-import androidx.ui.painting.TileMode
+import androidx.ui.graphics.TileMode
 import androidx.ui.core.setContent
+import androidx.ui.graphics.SolidColor
 import androidx.ui.graphics.vector.DrawVector
 import androidx.ui.graphics.vector.Group
 import androidx.ui.graphics.vector.Path
+import androidx.ui.graphics.vector.PathData
 import androidx.ui.graphics.vector.compat.vectorResource
-import androidx.ui.graphics.vector.PathDelegate
 import androidx.ui.graphics.vector.VectorScope
 
 class VectorGraphicsActivity : Activity() {
@@ -93,7 +94,7 @@
                     pivotY = (viewportHeight / 2),
                     rotation = 25.0f
                 ) {
-                    val pathData = PathDelegate {
+                    val pathData = PathData {
                         moveTo(viewportWidth / 2 - 100, viewportHeight / 2 - 100)
                         horizontalLineToRelative(200.0f)
                         verticalLineToRelative(200.0f)
@@ -120,7 +121,7 @@
 
     @Composable
     fun VectorScope.BackgroundPath(vectorWidth: Float, vectorHeight: Float) {
-        val background = PathDelegate {
+        val background = PathData {
             horizontalLineTo(vectorWidth)
             verticalLineTo(vectorHeight)
             horizontalLineTo(0.0f)
@@ -154,7 +155,7 @@
                 radius = length / 2.0f,
                 tileMode = TileMode.Repeated
             ),
-            pathData = PathDelegate {
+            pathData = PathData {
                 verticalLineTo(length)
                 horizontalLineTo(length)
                 close()
@@ -176,7 +177,7 @@
                 centerY = side2 / 2.0f,
                 radius = side1 / 2.0f
             ),
-            pathData = PathDelegate {
+            pathData = PathData {
                 horizontalLineToRelative(side1)
                 verticalLineToRelative(side2)
                 close()
@@ -186,11 +187,11 @@
 
     @Composable
     fun VectorScope.StripePath(vectorWidth: Float, vectorHeight: Float) {
-        val stripeDelegate = PathDelegate {
+        val stripeDelegate = PathData {
             stripe(vectorWidth, vectorHeight, 10)
         }
 
-        Path(stroke = Color.Blue, pathData = stripeDelegate)
+        Path(stroke = SolidColor(Color.Blue), pathData = stripeDelegate)
     }
 
     private fun PathBuilder.stripe(vectorWidth: Float, vectorHeight: Float, numLines: Int) {
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
index 93e3407..83db2c3 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
@@ -35,7 +35,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.ui.core.gesture.LongPressGestureDetector
 import androidx.compose.composer
 import androidx.ui.core.Draw
diff --git a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt
index 4cc8df7..65520df 100644
--- a/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt
+++ b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt
@@ -26,10 +26,11 @@
 import androidx.ui.core.dp
 import androidx.ui.core.ipx
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.composer
 import androidx.ui.core.Draw
 import androidx.ui.core.IntPx
+import androidx.ui.graphics.PaintingStyle
 
 /**
  * A simple layout composable that matches the size of it's parent layout.
@@ -115,7 +116,7 @@
 
                 val backgroundPaint = Paint().apply {
                     this.color = color
-                    style = androidx.ui.painting.PaintingStyle.stroke
+                    style = PaintingStyle.stroke
                     strokeWidth = floatWidth
                 }
                 canvas.drawRect(
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
index 813781a..061a385 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
@@ -56,7 +56,7 @@
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.toArgb
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNull
 import org.junit.Assert.assertSame
@@ -477,7 +477,7 @@
                 Layout(header, footer) { measurables, _ ->
                     assertEquals(0, measurables[0].parentData)
                     assertEquals(1, measurables[1].parentData)
-                    layout(0.ipx, 0.ipx) {}
+                    layout(0.ipx, 0.ipx) { }
                 }
             }
         }
@@ -812,25 +812,25 @@
             activity.setContent {
                 val child1 = @Composable {
                     Wrap {
-                        Layout({}) { _, _ ->
+                        Layout({ }) { _, _ ->
                             layout(
                                 0.ipx,
                                 0.ipx,
                                 TestVerticalLine to 10.ipx,
                                 TestHorizontalLine to 20.ipx
-                            ) {}
+                            ) { }
                         }
                     }
                 }
                 val child2 = @Composable {
                     Wrap {
-                        Layout({}) { _, _ ->
+                        Layout({ }) { _, _ ->
                             layout(
                                 0.ipx,
                                 0.ipx,
                                 TestVerticalLine to 20.ipx,
                                 TestHorizontalLine to 10.ipx
-                            ) {}
+                            ) { }
                         }
                     }
                 }
@@ -873,7 +873,7 @@
                     Layout({}) { _, _ -> layout(0.ipx, 0.ipx, TestLine1 to 10.ipx) {} }
                 }
                 val child2 = @Composable {
-                    Layout({}) { _, _ -> layout(0.ipx, 0.ipx, TestLine2 to 20.ipx) {} }
+                    Layout({ }) { _, _ -> layout(0.ipx, 0.ipx, TestLine2 to 20.ipx) { } }
                 }
                 val inner = @Composable {
                     Layout({ child1(); child2() }) { measurables, constraints ->
@@ -911,7 +911,7 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val child1 = @Composable {
-                    Layout({}) { _, _ ->
+                    Layout({ }) { _, _ ->
                         ++child1Measures
                         layout(0.ipx, 0.ipx, TestLine1 to 10.ipx) {
                             ++child1Layouts
@@ -919,7 +919,7 @@
                     }
                 }
                 val child2 = @Composable {
-                    Layout({}) { _, _ ->
+                    Layout({ }) { _, _ ->
                         ++child2Measures
                         layout(0.ipx, 0.ipx, TestLine2 to 20.ipx) {
                             ++child2Layouts
@@ -966,7 +966,7 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val child1 = @Composable {
-                    Layout({}) { _, _ ->
+                    Layout({ }) { _, _ ->
                         ++child1Measures
                         layout(0.ipx, 0.ipx, TestLine1 to 10.ipx) {
                             ++child1Layouts
@@ -974,7 +974,7 @@
                     }
                 }
                 val child2 = @Composable {
-                    Layout({}) { _, _ ->
+                    Layout({ }) { _, _ ->
                         ++child2Measures
                         layout(0.ipx, 0.ipx, TestLine2 to 20.ipx) {
                             ++child2Layouts
@@ -1017,7 +1017,7 @@
                     Layout({}) { _, _ -> layout(0.ipx, 0.ipx, TestLine to 10.ipx) { } }
                 }
                 val child2 = @Composable {
-                    Layout({}) { _, _ -> layout(0.ipx, 0.ipx, TestLine to 20.ipx) { } }
+                    Layout({ }) { _, _ -> layout(0.ipx, 0.ipx, TestLine to 20.ipx) { } }
                 }
                 val inner = @Composable {
                     Layout({ child1(); child2() }) { measurables, constraints ->
@@ -1062,6 +1062,7 @@
                     Layout({ child() }) { measurables, constraints ->
                         val placeable = measurables[0].measure(constraints)
                         layout(0.ipx, 0.ipx) {
+                            assertEquals(10.ipx, placeable[TestLine])
                             placeable.place(0.ipx, 0.ipx)
                             assertEquals(10.ipx, placeable[TestLine])
                         }
@@ -1091,7 +1092,7 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val child = @Composable {
-                    Layout({}) { _, _ -> layout(0.ipx, 0.ipx, TestLine to model.offset) {} }
+                    Layout({ }) { _, _ -> layout(0.ipx, 0.ipx, TestLine to model.offset) { } }
                 }
                 Layout(child) { measurables, constraints ->
                     val placeable = measurables.first().measure(constraints)
@@ -1130,7 +1131,7 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val child = @Composable {
-                    Layout({}) { _, _ -> layout(0.ipx, 0.ipx, TestLine to model.offset) {} }
+                    Layout({ }) { _, _ -> layout(0.ipx, 0.ipx, TestLine to model.offset) { } }
                 }
                 Layout(child) { measurables, constraints ->
                     val placeable = measurables.first().measure(constraints)
@@ -1167,7 +1168,7 @@
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
                 val child = @Composable {
-                    Layout({}) { _, _ -> layout(0.ipx, 0.ipx, TestLine to model.offset) {} }
+                    Layout({ }) { _, _ -> layout(0.ipx, 0.ipx, TestLine to model.offset) { } }
                 }
                 Layout(child) { measurables, constraints ->
                     ++measure
@@ -1206,7 +1207,7 @@
             activity.setContent {
                 val innerChild = @Composable {
                     model.offset // Artificial remeasure.
-                    Layout({}) { _, _ ->
+                    Layout({ }) { _, _ ->
                         layout(0.ipx, 0.ipx, TestLine to 10.ipx) { }
                     }
                 }
@@ -1247,6 +1248,92 @@
         assertEquals(2, alignmentLinesCalculations)
     }
 
+    @Test
+    fun testAlignmentLines_providedLinesOverrideInherited() {
+        val layoutLatch = CountDownLatch(1)
+        val TestLine = VerticalAlignmentLine(::min)
+        activityTestRule.runOnUiThreadIR {
+            activity.setContent {
+                val innerChild = @Composable {
+                    Layout({}) { _, _ ->
+                        layout(0.ipx, 0.ipx, TestLine to 10.ipx) { }
+                    }
+                }
+                val child = @Composable {
+                    Layout({ innerChild() }) { measurables, constraints ->
+                        val placeable = measurables.first().measure(constraints)
+                        layout(0.ipx, 0.ipx, TestLine to 20.ipx) {
+                            placeable.place(0.ipx, 0.ipx)
+                        }
+                    }
+                }
+                Layout(child) { measurables, constraints ->
+                    val placeable = measurables.first().measure(constraints)
+                    assertEquals(20.ipx, placeable[TestLine])
+                    layout(0.ipx, 0.ipx) {
+                        placeable.place(0.ipx, 0.ipx)
+                        layoutLatch.countDown()
+                    }
+                }
+            }
+        }
+        assertTrue(layoutLatch.await(1, TimeUnit.SECONDS))
+    }
+
+    @Test
+    fun testAlignmentLines_areRecalculatedCorrectlyOnRelayout_withNoRemeasure() {
+        val TestLine = VerticalAlignmentLine(::min)
+        var layoutLatch = CountDownLatch(1)
+        var innerChildMeasures = 0
+        var innerChildLayouts = 0
+        var outerChildMeasures = 0
+        var outerChildLayouts = 0
+        val model = OffsetModel(0.ipx)
+        activityTestRule.runOnUiThreadIR {
+            activity.setContent {
+                val child = @Composable {
+                    Layout({}) { _, _ ->
+                        ++innerChildMeasures
+                        layout(0.ipx, 0.ipx,TestLine to 10.ipx) { ++innerChildLayouts }
+                    }
+                }
+                val inner = @Composable {
+                    Layout({ Wrap { Wrap { child() } } }) { measurables, constraints ->
+                        ++outerChildMeasures
+                        val placeable = measurables[0].measure(constraints)
+                        layout(0.ipx, 0.ipx) {
+                            ++outerChildLayouts
+                            placeable.place(model.offset, 0.ipx)
+                        }
+                    }
+                }
+                Layout(inner) { measurables, constraints ->
+                    val placeable = measurables.first().measure(constraints)
+                    layout(placeable.width, placeable.height) {
+                        assertEquals(model.offset + 10.ipx, placeable[TestLine])
+                        placeable.place(0.ipx, 0.ipx)
+                        layoutLatch.countDown()
+                    }
+                }
+            }
+        }
+        assertTrue(layoutLatch.await(1, TimeUnit.SECONDS))
+        assertEquals(1, innerChildMeasures)
+        assertEquals(1, innerChildLayouts)
+        assertEquals(1, outerChildMeasures)
+        assertEquals(1, outerChildLayouts)
+
+        layoutLatch = CountDownLatch(1)
+        activityTestRule.runOnUiThreadIR {
+            model.offset = 10.ipx
+        }
+        assertTrue(layoutLatch.await(1, TimeUnit.SECONDS))
+        assertEquals(1, innerChildMeasures)
+        assertEquals(1, innerChildLayouts)
+        assertEquals(1, outerChildMeasures)
+        assertEquals(2, outerChildLayouts)
+    }
+
     private fun composeSquares(model: SquareModel) {
         activityTestRule.runOnUiThreadIR {
             activity.setContent {
@@ -1494,7 +1581,7 @@
             // expected
             latch.countDown()
         }
-        layout(0.ipx, 0.ipx){}
+        layout(0.ipx, 0.ipx){ }
     }
 }
 
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
index 6d94cfb..0ece621 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
@@ -39,9 +39,9 @@
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.toArgb
-import androidx.ui.painting.Paint
-import androidx.ui.painting.Path
-import androidx.ui.painting.PathOperation
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.Path
+import androidx.ui.graphics.PathOperation
 import org.junit.Assert
 import org.junit.Before
 import org.junit.Rule
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt
index a90c43cf..38f0a54 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/DrawShadowTest.kt
@@ -38,7 +38,7 @@
 import androidx.ui.engine.geometry.Shape
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OpacityTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OpacityTest.kt
index 2265cc2..0b42c23 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OpacityTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OpacityTest.kt
@@ -33,7 +33,7 @@
 import androidx.ui.core.toRect
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Before
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt
index 5f10596..d4f5735 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.toRect
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.composer
 import androidx.ui.core.setContent
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/graphics/vector/compat/XmlVectorParserTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/graphics/vector/compat/XmlVectorParserTest.kt
index dc6ef6d..ef014fd 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/graphics/vector/compat/XmlVectorParserTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/graphics/vector/compat/XmlVectorParserTest.kt
@@ -22,6 +22,8 @@
 
 import androidx.ui.graphics.vector.VectorPath
 import androidx.ui.framework.test.R
+import androidx.ui.graphics.Color
+import androidx.ui.graphics.SolidColor
 import androidx.ui.graphics.vector.PathCommand
 import androidx.ui.graphics.vector.PathNode
 import org.junit.Assert.assertEquals
@@ -50,10 +52,9 @@
         assertEquals(1, asset.root.size)
 
         val node = asset.root.iterator().next() as VectorPath
-        assertEquals(0xFFFF0000.toInt(), node.fill as Int)
+        assertEquals(Color(0xFFFF0000), (node.fill as SolidColor).value)
 
-        @Suppress("UNCHECKED_CAST")
-        val path = node.pathData as Array<PathNode>
+        val path = node.pathData
         assertEquals(3, path.size)
         assertEquals(PathCommand.MoveTo, path.get(0).command)
         assertEquals(20.0f, path.get(0).args[0])
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/Draw.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Draw.kt
index 46f1705..15bb406 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/Draw.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Draw.kt
@@ -15,7 +15,7 @@
  */
 package androidx.ui.core
 
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.compose.Children
 import androidx.compose.Composable
 import androidx.compose.composer
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 aeec55d..84a2007 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
@@ -31,7 +31,7 @@
 import androidx.ui.input.TransformedText
 import androidx.ui.input.VisualTransformation
 import androidx.ui.input.identityOffsetMap
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.text.AnnotatedString
 import androidx.ui.text.Paragraph
 import androidx.ui.text.ParagraphConstraints
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionHandles.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionHandles.kt
index 54aaca9..30b32d7 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionHandles.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionHandles.kt
@@ -24,8 +24,8 @@
 import androidx.ui.core.px
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.Path
 import androidx.ui.text.style.TextDirection
 
 internal val HANDLE_WIDTH = 80.px
diff --git a/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorAsset.kt b/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorAsset.kt
index 0bae907..e05dfd1 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorAsset.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorAsset.kt
@@ -19,9 +19,9 @@
 import androidx.compose.Composable
 import androidx.compose.composer
 import androidx.ui.core.Px
-import androidx.ui.graphics.EmptyBrush
-import androidx.ui.painting.StrokeCap
-import androidx.ui.painting.StrokeJoin
+import androidx.ui.graphics.Brush
+import androidx.ui.graphics.StrokeCap
+import androidx.ui.graphics.StrokeJoin
 import java.util.Stack
 
 /**
@@ -89,7 +89,7 @@
         scaleY: Float = DefaultScaleY,
         translationX: Float = DefaultTranslationX,
         translationY: Float = DefaultTranslationY,
-        clipPathData: PathData = EmptyPath
+        clipPathData: Array<PathNode> = EmptyPath
     ): VectorAssetBuilder {
         ensureNotConsumed()
         val group = VectorGroup(
@@ -125,11 +125,11 @@
      * @return This VectorAssetBuilder instance as a convenience for chaining calls
      */
     fun addPath(
-        pathData: PathData,
+        pathData: Array<PathNode>,
         name: String = DefaultPathName,
-        fill: BrushType = EmptyBrush,
+        fill: Brush? = null,
         fillAlpha: Float = DefaultAlpha,
-        stroke: BrushType = EmptyBrush,
+        stroke: Brush? = null,
         strokeAlpha: Float = DefaultAlpha,
         strokeLineWidth: Float = DefaultStrokeLineWidth,
         strokeLineCap: StrokeCap = DefaultStrokeLineCap,
@@ -281,7 +281,7 @@
     /**
      * Path information used to clip the content within the group
      */
-    val clipPathData: PathData = EmptyPath
+    val clipPathData: Array<PathNode> = EmptyPath
 
 ) : VectorNode(), Iterable<VectorNode> {
 
@@ -323,12 +323,12 @@
     /**
      * Path information to render the shape of the path
      */
-    val pathData: PathData,
+    val pathData: Array<PathNode>,
 
     /**
      *  Specifies the color or gradient used to fill the path
      */
-    val fill: BrushType = EmptyBrush,
+    val fill: Brush? = null,
 
     /**
      * Opacity to fill the path
@@ -338,7 +338,7 @@
     /**
      * Specifies the color or gradient used to fill the stroke
      */
-    val stroke: BrushType = EmptyBrush,
+    val stroke: Brush? = null,
 
     /**
      * Opacity to stroke the path
diff --git a/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt b/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt
index 5ece2cf..9fb9fdf 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/VectorCompose.kt
@@ -28,10 +28,8 @@
 import androidx.ui.core.Px
 import androidx.ui.core.withDensity
 import androidx.ui.graphics.Brush
-import androidx.ui.graphics.EmptyBrush
-import androidx.ui.graphics.obtainBrush
-import androidx.ui.painting.StrokeCap
-import androidx.ui.painting.StrokeJoin
+import androidx.ui.graphics.StrokeCap
+import androidx.ui.graphics.StrokeJoin
 
 /**
  * Sentinel value used to indicate that a dimension is not provided
@@ -116,13 +114,9 @@
     scaleY: Float = DefaultScaleY,
     translationX: Float = DefaultTranslationX,
     translationY: Float = DefaultTranslationY,
-    clipPathData: PathData = EmptyPath,
+    clipPathData: Array<PathNode> = EmptyPath,
     children: @Composable() VectorScope.() -> Unit
 ) {
-
-    val clipPathNodes = +memo(clipPathData) {
-        createPath(clipPathData)
-    }
     <GroupComponent
         name = name
         rotation = rotation
@@ -132,7 +126,7 @@
         scaleY = scaleY
         translationX = translationX
         translationY = translationY
-        clipPathNodes = clipPathNodes
+        clipPathData = clipPathData
     >
         children()
     </GroupComponent>
@@ -140,27 +134,23 @@
 
 @Composable
 fun VectorScope.Path(
-    pathData: PathData,
+    pathData: Array<PathNode>,
     name: String = DefaultPathName,
-    fill: BrushType = EmptyBrush,
+    fill: Brush? = null,
     fillAlpha: Float = DefaultAlpha,
-    stroke: BrushType = EmptyBrush,
+    stroke: Brush? = null,
     strokeAlpha: Float = DefaultAlpha,
     strokeLineWidth: Float = DefaultStrokeLineWidth,
     strokeLineCap: StrokeCap = DefaultStrokeLineCap,
     strokeLineJoin: StrokeJoin = DefaultStrokeLineJoin,
     strokeLineMiter: Float = DefaultStrokeLineMiter
 ) {
-    val pathNodes = createPath(pathData)
-    val fillBrush: Brush = obtainBrush(fill)
-    val strokeBrush: Brush = obtainBrush(stroke)
-
     <PathComponent
         name
-        pathNodes
-        fill = fillBrush
+        pathData
+        fill
         fillAlpha
-        stroke = strokeBrush
+        stroke
         strokeAlpha
         strokeLineWidth
         strokeLineJoin
diff --git a/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/compat/XmlVectorParser.kt b/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/compat/XmlVectorParser.kt
index de69a18..5cef7ab 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/compat/XmlVectorParser.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/graphics/vector/compat/XmlVectorParser.kt
@@ -18,13 +18,18 @@
 
 import android.content.res.Resources
 import android.util.AttributeSet
+import androidx.core.content.res.ComplexColorCompat
 import androidx.core.content.res.TypedArrayUtils
 import androidx.ui.core.Px
 import androidx.ui.graphics.vector.VectorAssetBuilder
+import androidx.ui.graphics.Brush
+import androidx.ui.graphics.Color
+import androidx.ui.graphics.ShaderBrush
+import androidx.ui.graphics.SolidColor
 
-import androidx.ui.graphics.EmptyBrush
-import androidx.ui.painting.StrokeCap
-import androidx.ui.painting.StrokeJoin
+import androidx.ui.graphics.Shader
+import androidx.ui.graphics.StrokeCap
+import androidx.ui.graphics.StrokeJoin
 import androidx.ui.graphics.vector.addPathNodes
 import androidx.ui.graphics.vector.DefaultPivotX
 import androidx.ui.graphics.vector.DefaultPivotY
@@ -284,11 +289,8 @@
 
     a.recycle()
 
-    @Suppress("IMPLICIT_CAST_TO_ANY")
-    val fillBrush = if (fillColor.willDraw()) fillColor.color else EmptyBrush
-
-    @Suppress("IMPLICIT_CAST_TO_ANY")
-    val strokeBrush = if (strokeColor.willDraw()) strokeColor.color else EmptyBrush
+    val fillBrush = obtainBrushFromComplexColor(fillColor)
+    val strokeBrush = obtainBrushFromComplexColor(strokeColor)
 
     builder.addPath(
         pathData,
@@ -304,6 +306,19 @@
 }
 
 @SuppressWarnings("RestrictedApi")
+private fun obtainBrushFromComplexColor(complexColor: ComplexColorCompat): Brush? =
+   if (complexColor.willDraw()) {
+       val shader = complexColor.shader
+       if (shader != null) {
+           ShaderBrush(Shader(shader))
+       } else {
+           SolidColor(Color(complexColor.color))
+       }
+   } else {
+       null
+   }
+
+@SuppressWarnings("RestrictedApi")
 internal fun XmlPullParser.parseGroup(
     res: Resources,
     theme: Resources.Theme?,
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 fbe2bde..6c657b2 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
@@ -28,7 +28,7 @@
 import androidx.ui.input.OffsetMap
 import androidx.ui.input.SetSelectionEditOp
 import androidx.ui.input.TextInputService
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.text.AnnotatedString
 import androidx.ui.text.TextDelegate
 import androidx.ui.text.TextRange
diff --git a/ui/ui-layout/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-layout/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..6144392
--- /dev/null
+++ b/ui/ui-layout/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,260 @@
+// Signature format: 3.0
+package androidx.ui.layout {
+
+  public final class AlignKt {
+    ctor public AlignKt();
+    method public static void Align(androidx.ui.layout.Alignment alignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Center(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public enum Alignment {
+    method public final androidx.ui.core.IntPxPosition align(androidx.ui.core.IntPxSize size);
+    enum_constant public static final androidx.ui.layout.Alignment BottomCenter;
+    enum_constant public static final androidx.ui.layout.Alignment BottomLeft;
+    enum_constant public static final androidx.ui.layout.Alignment BottomRight;
+    enum_constant public static final androidx.ui.layout.Alignment Center;
+    enum_constant public static final androidx.ui.layout.Alignment CenterLeft;
+    enum_constant public static final androidx.ui.layout.Alignment CenterRight;
+    enum_constant public static final androidx.ui.layout.Alignment TopCenter;
+    enum_constant public static final androidx.ui.layout.Alignment TopLeft;
+    enum_constant public static final androidx.ui.layout.Alignment TopRight;
+  }
+
+  public final class AlignmentLineKt {
+    ctor public AlignmentLineKt();
+    method public static void AlignmentLineOffset(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Dp before = 0.dp, androidx.ui.core.Dp after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void CenterAlignmentLine(androidx.ui.core.AlignmentLine alignmentLine, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class AspectRatioKt {
+    ctor public AspectRatioKt();
+    method public static void AspectRatio(float aspectRatio, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class ConstrainedBoxKt {
+    ctor public ConstrainedBoxKt();
+    method public static void ConstrainedBox(androidx.ui.layout.DpConstraints constraints, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class ContainerKt {
+    ctor public ContainerKt();
+    method public static void Container(androidx.ui.layout.EdgeInsets padding = androidx.ui.layout.EdgeInsets(0.dp), androidx.ui.layout.Alignment alignment = Alignment.Center, boolean expanded = false, androidx.ui.layout.DpConstraints constraints = androidx.ui.layout.DpConstraints(), androidx.ui.core.Dp? width = null, androidx.ui.core.Dp? height = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class CrossAxisAlignment {
+    field public static final androidx.ui.layout.CrossAxisAlignment.Companion! Companion;
+  }
+
+  public static final class CrossAxisAlignment.Companion {
+    method public androidx.ui.layout.CrossAxisAlignment AlignmentLine(androidx.ui.core.AlignmentLine alignmentLine);
+    method public androidx.ui.layout.CrossAxisAlignment getCenter();
+    method public androidx.ui.layout.CrossAxisAlignment getEnd();
+    method public androidx.ui.layout.CrossAxisAlignment getStart();
+    method public androidx.ui.layout.CrossAxisAlignment getStretch();
+    property public final androidx.ui.layout.CrossAxisAlignment Center;
+    property public final androidx.ui.layout.CrossAxisAlignment End;
+    property public final androidx.ui.layout.CrossAxisAlignment Start;
+    property public final androidx.ui.layout.CrossAxisAlignment Stretch;
+  }
+
+  public final class DpConstraints {
+    ctor public DpConstraints(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp minHeight, androidx.ui.core.Dp maxHeight);
+    ctor public DpConstraints();
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.DpConstraints copy(androidx.ui.core.Dp minWidth, androidx.ui.core.Dp maxWidth, androidx.ui.core.Dp minHeight, androidx.ui.core.Dp maxHeight);
+    method public androidx.ui.core.Dp getMaxHeight();
+    method public androidx.ui.core.Dp getMaxWidth();
+    method public androidx.ui.core.Dp getMinHeight();
+    method public androidx.ui.core.Dp getMinWidth();
+    field public static final androidx.ui.layout.DpConstraints.Companion! Companion;
+  }
+
+  public static final class DpConstraints.Companion {
+    method public androidx.ui.layout.DpConstraints tightConstraints(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public androidx.ui.layout.DpConstraints tightConstraintsForHeight(androidx.ui.core.Dp height);
+    method public androidx.ui.layout.DpConstraints tightConstraintsForWidth(androidx.ui.core.Dp width);
+  }
+
+  public final class DpConstraintsKt {
+    ctor public DpConstraintsKt();
+    method public static androidx.ui.core.Constraints Constraints(androidx.ui.core.DensityReceiver, androidx.ui.layout.DpConstraints dpConstraints);
+    method public static androidx.ui.layout.DpConstraints DpConstraints(androidx.ui.core.DensityReceiver, androidx.ui.core.Constraints constraints);
+    method public static androidx.ui.layout.DpConstraints enforce(androidx.ui.layout.DpConstraints, androidx.ui.layout.DpConstraints otherConstraints);
+    method public static boolean getHasBoundedHeight(androidx.ui.layout.DpConstraints);
+    method public static boolean getHasBoundedWidth(androidx.ui.layout.DpConstraints);
+    method public static boolean getHasTightHeight(androidx.ui.layout.DpConstraints);
+    method public static boolean getHasTightWidth(androidx.ui.layout.DpConstraints);
+    method public static boolean getSatisfiable(androidx.ui.layout.DpConstraints);
+    method public static boolean isTight(androidx.ui.layout.DpConstraints);
+    method public static boolean isZero(androidx.ui.layout.DpConstraints);
+    method public static androidx.ui.layout.DpConstraints looseMax(androidx.ui.layout.DpConstraints);
+    method public static androidx.ui.layout.DpConstraints looseMin(androidx.ui.layout.DpConstraints);
+    method public static androidx.ui.layout.DpConstraints offset(androidx.ui.layout.DpConstraints, androidx.ui.core.Dp horizontal = 0.dp, androidx.ui.core.Dp vertical = 0.dp);
+    method public static androidx.ui.layout.DpConstraints tightMax(androidx.ui.layout.DpConstraints);
+    method public static androidx.ui.layout.DpConstraints tightMin(androidx.ui.layout.DpConstraints);
+    method public static androidx.ui.layout.DpConstraints withTight(androidx.ui.layout.DpConstraints, androidx.ui.core.Dp? width = null, androidx.ui.core.Dp? height = null);
+  }
+
+  public final class EdgeInsets {
+    ctor public EdgeInsets(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    ctor public EdgeInsets();
+    ctor public EdgeInsets(androidx.ui.core.Dp all);
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.EdgeInsets copy(androidx.ui.core.Dp left, androidx.ui.core.Dp top, androidx.ui.core.Dp right, androidx.ui.core.Dp bottom);
+    method public androidx.ui.core.Dp getBottom();
+    method public androidx.ui.core.Dp getLeft();
+    method public androidx.ui.core.Dp getRight();
+    method public androidx.ui.core.Dp getTop();
+  }
+
+  public final class FlexChildren {
+    method public void expanded(@FloatRange(from=0.0) float flex, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public void flexible(@FloatRange(from=0.0) float flex, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public void inflexible(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class FlexKt {
+    ctor public FlexKt();
+    method public static void Column(androidx.ui.layout.MainAxisAlignment mainAxisAlignment = MainAxisAlignment.Start, androidx.ui.layout.FlexSize mainAxisSize = FlexSize.Expand, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Center, androidx.ui.layout.FlexSize crossAxisSize = FlexSize.Wrap, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static void FlexColumn(androidx.ui.layout.MainAxisAlignment mainAxisAlignment = MainAxisAlignment.Start, androidx.ui.layout.FlexSize mainAxisSize = FlexSize.Expand, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Center, androidx.ui.layout.FlexSize crossAxisSize = FlexSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
+    method public static void FlexRow(androidx.ui.layout.MainAxisAlignment mainAxisAlignment = MainAxisAlignment.Start, androidx.ui.layout.FlexSize mainAxisSize = FlexSize.Expand, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Center, androidx.ui.layout.FlexSize crossAxisSize = FlexSize.Wrap, kotlin.jvm.functions.Function1<? super androidx.ui.layout.FlexChildren,kotlin.Unit> block);
+    method public static void Row(androidx.ui.layout.MainAxisAlignment mainAxisAlignment = MainAxisAlignment.Start, androidx.ui.layout.FlexSize mainAxisSize = FlexSize.Expand, androidx.ui.layout.CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.Center, androidx.ui.layout.FlexSize crossAxisSize = FlexSize.Wrap, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public enum FlexSize {
+    enum_constant public static final androidx.ui.layout.FlexSize Expand;
+    enum_constant public static final androidx.ui.layout.FlexSize Wrap;
+  }
+
+  public final class IntrinsicKt {
+    ctor public IntrinsicKt();
+    method public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public enum MainAxisAlignment {
+    enum_constant public static final androidx.ui.layout.MainAxisAlignment Center;
+    enum_constant public static final androidx.ui.layout.MainAxisAlignment End;
+    enum_constant public static final androidx.ui.layout.MainAxisAlignment SpaceAround;
+    enum_constant public static final androidx.ui.layout.MainAxisAlignment SpaceBetween;
+    enum_constant public static final androidx.ui.layout.MainAxisAlignment SpaceEvenly;
+    enum_constant public static final androidx.ui.layout.MainAxisAlignment Start;
+  }
+
+  public final class PaddingKt {
+    ctor public PaddingKt();
+    method public static void Padding(androidx.ui.layout.EdgeInsets padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp left = 0.dp, androidx.ui.core.Dp top = 0.dp, androidx.ui.core.Dp right = 0.dp, androidx.ui.core.Dp bottom = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Padding(androidx.ui.core.Dp padding, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class SpacerKt {
+    ctor public SpacerKt();
+    method public static void FixedSpacer(androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public static void HeightSpacer(androidx.ui.core.Dp height);
+    method public static void WidthSpacer(androidx.ui.core.Dp width);
+  }
+
+  public final class StackChildren {
+    ctor public StackChildren();
+    method public void aligned(androidx.ui.layout.Alignment alignment, boolean loose = true, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public void expanded(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public void positioned(androidx.ui.core.Dp? leftInset = null, androidx.ui.core.Dp? topInset = null, androidx.ui.core.Dp? rightInset = null, androidx.ui.core.Dp? bottomInset = null, androidx.ui.layout.Alignment fallbackAlignment = Alignment.Center, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class StackKt {
+    ctor public StackKt();
+    method public static void Stack(kotlin.jvm.functions.Function1<? super androidx.ui.layout.StackChildren,kotlin.Unit> block);
+  }
+
+  public final class TableChildren {
+    method public void addDecoration(kotlin.jvm.functions.Function2<? super androidx.ui.core.IntPx[],? super androidx.ui.core.IntPx[],kotlin.Unit> decoration);
+    method public void tableRow(kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> children);
+  }
+
+  public abstract class TableColumnWidth {
+    method public androidx.ui.core.IntPx maxIntrinsicWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density, androidx.ui.core.IntPx availableHeight);
+    method public androidx.ui.core.IntPx minIntrinsicWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density, androidx.ui.core.IntPx availableHeight);
+    method public abstract androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+  }
+
+  public static final class TableColumnWidth.Fixed extends androidx.ui.layout.TableColumnWidth.Inflexible {
+    ctor public TableColumnWidth.Fixed(androidx.ui.core.Dp width);
+    method public androidx.ui.layout.TableColumnWidth.Fixed copy(androidx.ui.core.Dp width);
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+  }
+
+  public static final class TableColumnWidth.Flex extends androidx.ui.layout.TableColumnWidth {
+    ctor public TableColumnWidth.Flex(@FloatRange(from=null) float flex);
+    method public androidx.ui.layout.TableColumnWidth.Flex copy(float flex);
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+  }
+
+  public static final class TableColumnWidth.Fraction extends androidx.ui.layout.TableColumnWidth.Inflexible {
+    ctor public TableColumnWidth.Fraction(@FloatRange(from=null, to=null) float fraction);
+    method public androidx.ui.layout.TableColumnWidth.Fraction copy(float fraction);
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+  }
+
+  public abstract static class TableColumnWidth.Inflexible extends androidx.ui.layout.TableColumnWidth {
+    ctor public TableColumnWidth.Inflexible();
+    method public final androidx.ui.layout.TableColumnWidth flexible(float flex);
+  }
+
+  public static final class TableColumnWidth.Max extends androidx.ui.layout.TableColumnWidth.Inflexible {
+    ctor public TableColumnWidth.Max(androidx.ui.layout.TableColumnWidth.Inflexible a, androidx.ui.layout.TableColumnWidth.Inflexible b);
+    method public androidx.ui.layout.TableColumnWidth.Max copy(androidx.ui.layout.TableColumnWidth.Inflexible a, androidx.ui.layout.TableColumnWidth.Inflexible b);
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+  }
+
+  public static final class TableColumnWidth.MaxIntrinsic extends androidx.ui.layout.TableColumnWidth.Inflexible {
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+    field public static final androidx.ui.layout.TableColumnWidth.MaxIntrinsic! INSTANCE;
+  }
+
+  public static final class TableColumnWidth.Min extends androidx.ui.layout.TableColumnWidth.Inflexible {
+    ctor public TableColumnWidth.Min(androidx.ui.layout.TableColumnWidth.Inflexible a, androidx.ui.layout.TableColumnWidth.Inflexible b);
+    method public androidx.ui.layout.TableColumnWidth.Min copy(androidx.ui.layout.TableColumnWidth.Inflexible a, androidx.ui.layout.TableColumnWidth.Inflexible b);
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+  }
+
+  public static final class TableColumnWidth.MinIntrinsic extends androidx.ui.layout.TableColumnWidth.Inflexible {
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+    field public static final androidx.ui.layout.TableColumnWidth.MinIntrinsic! INSTANCE;
+  }
+
+  public static final class TableColumnWidth.Wrap extends androidx.ui.layout.TableColumnWidth.Inflexible {
+    method public androidx.ui.core.IntPx preferredWidth(java.util.List<androidx.ui.layout.TableMeasurable> cells, androidx.ui.core.IntPx containerWidth, androidx.ui.core.Density density);
+    field public static final androidx.ui.layout.TableColumnWidth.Wrap! INSTANCE;
+  }
+
+  public final class TableKt {
+    ctor public TableKt();
+    method public static void Table(int columns, androidx.ui.layout.Alignment childAlignment = Alignment.TopLeft, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends androidx.ui.layout.TableColumnWidth> columnWidth = { TableColumnWidth.<init>(1.0) }, kotlin.jvm.functions.Function1<? super androidx.ui.layout.TableChildren,kotlin.Unit> block);
+  }
+
+  public final class TableMeasurable {
+    method public kotlin.jvm.functions.Function0<androidx.ui.core.IntPx> component1();
+    method public kotlin.jvm.functions.Function1<androidx.ui.core.IntPx,androidx.ui.core.IntPx> component2();
+    method public kotlin.jvm.functions.Function1<androidx.ui.core.IntPx,androidx.ui.core.IntPx> component3();
+    method public androidx.ui.layout.TableMeasurable copy(kotlin.jvm.functions.Function0<androidx.ui.core.IntPx> preferredWidth, kotlin.jvm.functions.Function1<? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> minIntrinsicWidth, kotlin.jvm.functions.Function1<? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicWidth);
+    method public kotlin.jvm.functions.Function1<androidx.ui.core.IntPx,androidx.ui.core.IntPx> getMaxIntrinsicWidth();
+    method public kotlin.jvm.functions.Function1<androidx.ui.core.IntPx,androidx.ui.core.IntPx> getMinIntrinsicWidth();
+    method public kotlin.jvm.functions.Function0<androidx.ui.core.IntPx> getPreferredWidth();
+  }
+
+  public final class WrapKt {
+    ctor public WrapKt();
+    method public static void Wrap(androidx.ui.layout.Alignment alignment = Alignment.TopLeft, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+}
+
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
index 8637067..f6cace2 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
@@ -41,7 +41,7 @@
 import androidx.ui.layout.Row
 import androidx.ui.layout.Stack
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.compose.Composable
 import androidx.compose.Model
 import androidx.compose.composer
diff --git a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSamples.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSamples.kt
index 828f5e6..bb7e8cc 100644
--- a/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSamples.kt
+++ b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/StackSamples.kt
@@ -27,7 +27,7 @@
 import androidx.ui.graphics.Color
 import androidx.ui.layout.Alignment
 import androidx.ui.layout.Stack
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 
 /**
  * Draws a rectangle of a specified dimension, or to its max incoming constraints if dimensions are
diff --git a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt
index deca623..002d2c6 100644
--- a/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt
@@ -17,18 +17,25 @@
 package androidx.ui.layout.test
 
 import android.widget.FrameLayout
+import androidx.compose.Composable
 import androidx.compose.Model
 import androidx.test.filters.SmallTest
 import androidx.compose.composer
+import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.OnChildPositioned
 import androidx.ui.core.OnPositioned
 import androidx.ui.core.Px
 import androidx.ui.core.PxPosition
+import androidx.ui.core.dp
 import androidx.ui.core.ipx
+import androidx.ui.core.positionInRoot
 import androidx.ui.core.px
 import androidx.ui.core.setContent
 import androidx.ui.core.withDensity
+import androidx.ui.layout.Align
+import androidx.ui.layout.Alignment
+import androidx.ui.layout.Center
 import androidx.ui.layout.Container
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Row
@@ -50,19 +57,19 @@
         var realLeft: Px? = null
         var realTop: Px? = null
 
-        val drawLatch = CountDownLatch(1)
+        val positionedLatch = CountDownLatch(1)
         show {
             Padding(left = paddingLeftPx.toDp(), top = paddingTopPx.toDp()) {
                 Container(expanded = true) {
                     OnPositioned(onPositioned = {
                         realLeft = it.position.x
                         realTop = it.position.y
-                        drawLatch.countDown()
+                        positionedLatch.countDown()
                     })
                 }
             }
         }
-        drawLatch.await(1, TimeUnit.SECONDS)
+        positionedLatch.await(1, TimeUnit.SECONDS)
 
         assertThat(paddingLeftPx).isEqualTo(realLeft)
         assertThat(paddingTopPx).isEqualTo(realTop)
@@ -75,19 +82,19 @@
         var realLeft: Px? = null
         var realTop: Px? = null
 
-        val drawLatch = CountDownLatch(1)
+        val positionedLatch = CountDownLatch(1)
         show {
             Padding(left = paddingLeftPx.toDp(), top = paddingTopPx.toDp()) {
                 OnChildPositioned(onPositioned = {
                     realLeft = it.position.x
                     realTop = it.position.y
-                    drawLatch.countDown()
+                    positionedLatch.countDown()
                 }) {
                     Container(expanded = true) {}
                 }
             }
         }
-        drawLatch.await(1, TimeUnit.SECONDS)
+        positionedLatch.await(1, TimeUnit.SECONDS)
 
         assertThat(realLeft).isEqualTo(paddingLeftPx)
         assertThat(realTop).isEqualTo(paddingTopPx)
@@ -101,26 +108,26 @@
         var gpCoordinates: LayoutCoordinates? = null
         var childCoordinates: LayoutCoordinates? = null
 
-        val drawLatch = CountDownLatch(2)
+        val positionedLatch = CountDownLatch(2)
         show {
             Padding(left = firstPaddingPx.toDp()) {
                 Padding(left = secondPaddingPx.toDp()) {
                     OnPositioned(onPositioned = {
                         gpCoordinates = it
-                        drawLatch.countDown()
+                        positionedLatch.countDown()
                     })
                     Padding(left = thirdPaddingPx.toDp()) {
                         Container(expanded = true) {
                             OnPositioned(onPositioned = {
                                 childCoordinates = it
-                                drawLatch.countDown()
+                                positionedLatch.countDown()
                             })
                         }
                     }
                 }
             }
         }
-        drawLatch.await(1, TimeUnit.SECONDS)
+        positionedLatch.await(1, TimeUnit.SECONDS)
 
         // global position
         val gPos = childCoordinates!!.localToGlobal(PxPosition.Origin).x
@@ -139,24 +146,24 @@
         var firstCoordinates: LayoutCoordinates? = null
         var secondCoordinates: LayoutCoordinates? = null
 
-        val drawLatch = CountDownLatch(2)
+        val positionedLatch = CountDownLatch(2)
         show {
             Row {
                 OnChildPositioned(onPositioned = {
                     firstCoordinates = it
-                    drawLatch.countDown()
+                    positionedLatch.countDown()
                 }) {
                     Container(width = sizeDp, height = sizeDp) {}
                 }
                 OnChildPositioned(onPositioned = {
                     secondCoordinates = it
-                    drawLatch.countDown()
+                    positionedLatch.countDown()
                 }) {
                     Container(width = sizeDp, height = sizeDp) {}
                 }
             }
         }
-        drawLatch.await(1, TimeUnit.SECONDS)
+        positionedLatch.await(1, TimeUnit.SECONDS)
 
         assertThat(0.px).isEqualTo(firstCoordinates!!.position.x)
         assertThat(size).isEqualTo(secondCoordinates!!.position.x)
@@ -170,7 +177,7 @@
         var realGlobalPosition: PxPosition? = null
         var realLocalPosition: PxPosition? = null
 
-        val drawLatch = CountDownLatch(1)
+        val positionedLatch = CountDownLatch(1)
         activityTestRule.runOnUiThread(object : Runnable {
             override fun run() {
                 val frameLayout = FrameLayout(activity)
@@ -181,14 +188,14 @@
                     OnChildPositioned(onPositioned = {
                         realGlobalPosition = it.localToGlobal(localPosition)
                         realLocalPosition = it.globalToLocal(globalPosition)
-                        drawLatch.countDown()
+                        positionedLatch.countDown()
                     }) {
                         Container(expanded = true) {}
                     }
                 }
             }
         })
-        drawLatch.await(1, TimeUnit.SECONDS)
+        positionedLatch.await(1, TimeUnit.SECONDS)
 
         assertThat(realGlobalPosition).isEqualTo(globalPosition)
         assertThat(realLocalPosition).isEqualTo(localPosition)
@@ -198,26 +205,96 @@
     fun justAddedOnPositionedCallbackFiredWithoutLayoutChanges() = withDensity(density) {
         val needCallback = NeedCallback(false)
 
-        val callbackLatch = CountDownLatch(1)
+        val positionedLatch = CountDownLatch(1)
         show {
             Container(expanded = true) {
                 if (needCallback.value) {
                     OnPositioned(onPositioned = {
-                        callbackLatch.countDown()
+                        positionedLatch.countDown()
                     })
                 }
             }
         }
 
-        activityTestRule.runOnUiThread(object : Runnable {
-            override fun run() {
-                needCallback.value = true
-            }
-        })
+        activityTestRule.runOnUiThread { needCallback.value = true }
 
-        assertThat(callbackLatch.await(1000, TimeUnit.SECONDS)).isEqualTo(true)
+        assertThat(positionedLatch.await(1, TimeUnit.SECONDS)).isEqualTo(true)
+    }
+
+    @Test
+    fun testRepositionTriggersCallback() {
+        val modelLeft = SizeModel(30.dp)
+        var realLeft: Px? = null
+
+        var positionedLatch = CountDownLatch(1)
+        show {
+            Center {
+                Padding(left = modelLeft.size) {
+                    OnChildPositioned(onPositioned = {
+                        realLeft = it.position.x
+                        positionedLatch.countDown()
+                    }) {
+                        Container(expanded = true) {}
+                    }
+                }
+            }
+        }
+        positionedLatch.await(1, TimeUnit.SECONDS)
+
+        positionedLatch = CountDownLatch(1)
+        activityTestRule.runOnUiThread { modelLeft.size = 40.dp }
+
+        positionedLatch.await(1, TimeUnit.SECONDS)
+        withDensity(density) {
+            assertThat(realLeft).isEqualTo(40.dp.toPx())
+        }
+    }
+
+    @Test
+    fun testGrandParentRepositionTriggersChildrenCallback() {
+        // when we reposition any parent layout is causes the change in global
+        // position of all the children down the tree(for example during the scrolling).
+        // children should be able to react on this change.
+        val modelLeft = SizeModel(20.dp)
+        var realLeft: Px? = null
+        var positionedLatch = CountDownLatch(1)
+        show {
+            Align(Alignment.TopLeft) {
+                Offset(modelLeft) {
+                    Container(width = 10.dp, height = 10.dp) {
+                        Container(width = 10.dp, height = 10.dp) {
+                            Container(width = 10.dp, height = 10.dp) {
+                                OnPositioned(onPositioned = {
+                                    realLeft = it.positionInRoot.x
+                                    positionedLatch.countDown()
+                                })
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        positionedLatch.await(1, TimeUnit.SECONDS)
+
+        positionedLatch = CountDownLatch(1)
+        activityTestRule.runOnUiThread { modelLeft.size = 40.dp }
+
+        positionedLatch.await(1, TimeUnit.SECONDS)
+        withDensity(density) {
+            assertThat(realLeft).isEqualTo(40.dp.toPx())
+        }
+    }
+
+    @Composable
+    private fun Offset(sizeModel: SizeModel, children: @Composable() () -> Unit) {
+        // simple copy of Padding which doesn't recompose when the size changes
+        Layout(children) { measurables, constraints ->
+            layout(constraints.maxWidth, constraints.maxHeight) {
+                measurables.first().measure(constraints).place(sizeModel.size.toPx(), 0.px)
+            }
+        }
     }
 }
 
 @Model
-private data class NeedCallback(var value: Boolean)
\ No newline at end of file
+private data class NeedCallback(var value: Boolean)
diff --git a/ui/ui-material/api/0.1.0-dev01.txt b/ui/ui-material/api/0.1.0-dev01.txt
index 3ec19a0..6621eaf 100644
--- a/ui/ui-material/api/0.1.0-dev01.txt
+++ b/ui/ui-material/api/0.1.0-dev01.txt
@@ -13,7 +13,7 @@
 
   public final class AppBarKt {
     ctor public AppBarKt();
-    method public static void AppBarIcon(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+    method public static void AppBarIcon(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
     method public static <T> void BottomAppBar(androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.BottomAppBar.FabConfiguration? fabConfiguration = null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
@@ -113,10 +113,10 @@
     method public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.core.Dp minSize = FabSize, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void FloatingActionButton(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
-    method public static void FloatingActionButton(String text, androidx.ui.painting.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(String text, androidx.ui.graphics.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
     method public static androidx.ui.core.Dp getExtendedFabHeight();
@@ -249,7 +249,7 @@
 
   public final class TabKt {
     ctor public TabKt();
-    method public static void Tab(String? text = null, androidx.ui.painting.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
+    method public static void Tab(String? text = null, androidx.ui.graphics.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
     method public static <T> void TabRow(java.util.List<? extends T> items, int selectedIndex, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
@@ -301,7 +301,7 @@
   public abstract class RippleEffect {
     ctor public RippleEffect(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.graphics.Color color, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw);
     method public abstract void dispose();
-    method protected abstract void drawEffect(androidx.ui.painting.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
+    method protected abstract void drawEffect(androidx.ui.graphics.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
     method public void finish(boolean canceled);
     method public final androidx.ui.graphics.Color getColor();
     method public final void setColor(androidx.ui.graphics.Color value);
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index 3ec19a0..6621eaf 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -13,7 +13,7 @@
 
   public final class AppBarKt {
     ctor public AppBarKt();
-    method public static void AppBarIcon(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+    method public static void AppBarIcon(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
     method public static <T> void BottomAppBar(androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.BottomAppBar.FabConfiguration? fabConfiguration = null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
@@ -113,10 +113,10 @@
     method public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.core.Dp minSize = FabSize, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void FloatingActionButton(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
-    method public static void FloatingActionButton(String text, androidx.ui.painting.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(String text, androidx.ui.graphics.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
     method public static androidx.ui.core.Dp getExtendedFabHeight();
@@ -249,7 +249,7 @@
 
   public final class TabKt {
     ctor public TabKt();
-    method public static void Tab(String? text = null, androidx.ui.painting.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
+    method public static void Tab(String? text = null, androidx.ui.graphics.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
     method public static <T> void TabRow(java.util.List<? extends T> items, int selectedIndex, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
@@ -301,7 +301,7 @@
   public abstract class RippleEffect {
     ctor public RippleEffect(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.graphics.Color color, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw);
     method public abstract void dispose();
-    method protected abstract void drawEffect(androidx.ui.painting.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
+    method protected abstract void drawEffect(androidx.ui.graphics.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
     method public void finish(boolean canceled);
     method public final androidx.ui.graphics.Color getColor();
     method public final void setColor(androidx.ui.graphics.Color value);
diff --git a/ui/ui-material/api/public_plus_experimental_0.1.0-dev01.txt b/ui/ui-material/api/public_plus_experimental_0.1.0-dev01.txt
index 3ec19a0..6621eaf 100644
--- a/ui/ui-material/api/public_plus_experimental_0.1.0-dev01.txt
+++ b/ui/ui-material/api/public_plus_experimental_0.1.0-dev01.txt
@@ -13,7 +13,7 @@
 
   public final class AppBarKt {
     ctor public AppBarKt();
-    method public static void AppBarIcon(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+    method public static void AppBarIcon(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
     method public static <T> void BottomAppBar(androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.BottomAppBar.FabConfiguration? fabConfiguration = null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
@@ -113,10 +113,10 @@
     method public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.core.Dp minSize = FabSize, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void FloatingActionButton(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
-    method public static void FloatingActionButton(String text, androidx.ui.painting.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(String text, androidx.ui.graphics.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
     method public static androidx.ui.core.Dp getExtendedFabHeight();
@@ -249,7 +249,7 @@
 
   public final class TabKt {
     ctor public TabKt();
-    method public static void Tab(String? text = null, androidx.ui.painting.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
+    method public static void Tab(String? text = null, androidx.ui.graphics.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
     method public static <T> void TabRow(java.util.List<? extends T> items, int selectedIndex, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
@@ -301,7 +301,7 @@
   public abstract class RippleEffect {
     ctor public RippleEffect(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.graphics.Color color, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw);
     method public abstract void dispose();
-    method protected abstract void drawEffect(androidx.ui.painting.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
+    method protected abstract void drawEffect(androidx.ui.graphics.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
     method public void finish(boolean canceled);
     method public final androidx.ui.graphics.Color getColor();
     method public final void setColor(androidx.ui.graphics.Color value);
diff --git a/ui/ui-material/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-material/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..6621eaf
--- /dev/null
+++ b/ui/ui-material/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,403 @@
+// Signature format: 3.0
+package androidx.ui.material {
+
+  public enum AlertDialogButtonLayout {
+    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout SideBySide;
+    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout Stacked;
+  }
+
+  public final class AlertDialogKt {
+    ctor public AlertDialogKt();
+    method public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.AlertDialogButtonLayout buttonLayout = AlertDialogButtonLayout.SideBySide);
+  }
+
+  public final class AppBarKt {
+    ctor public AppBarKt();
+    method public static void AppBarIcon(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+    method public static <T> void BottomAppBar(androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.BottomAppBar.FabConfiguration? fabConfiguration = null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
+    method public static <T> void TopAppBar(kotlin.jvm.functions.Function0<kotlin.Unit> title = {}, androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
+  }
+
+  public final class BottomAppBar {
+    field public static final androidx.ui.material.BottomAppBar! INSTANCE;
+  }
+
+  public static final class BottomAppBar.FabConfiguration {
+    ctor public BottomAppBar.FabConfiguration(internal androidx.ui.material.BottomAppBar.FabPosition fabPosition, internal androidx.ui.engine.geometry.Shape? cutoutShape, internal kotlin.jvm.functions.Function0<kotlin.Unit> fab);
+    method public androidx.ui.material.BottomAppBar.FabConfiguration copy(androidx.ui.material.BottomAppBar.FabPosition fabPosition, androidx.ui.engine.geometry.Shape? cutoutShape, kotlin.jvm.functions.Function0<kotlin.Unit> fab);
+  }
+
+  public enum BottomAppBar.FabPosition {
+    enum_constant public static final androidx.ui.material.BottomAppBar.FabPosition Center;
+    enum_constant public static final androidx.ui.material.BottomAppBar.FabPosition End;
+  }
+
+  public final class ButtonKt {
+    ctor public ButtonKt();
+    method public static void BaseButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}), androidx.ui.engine.geometry.Shape shape = RectangleShape, androidx.ui.foundation.shape.border.Border? border = null, androidx.ui.core.Dp elevation = 0.dp, androidx.ui.text.TextStyle textStyle = +themeTextStyle({ 
+    button
+}), kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Button(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.material.ButtonStyle style = ContainedButtonStyle(), kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void Button(String text, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.material.ButtonStyle style = ContainedButtonStyle());
+    method public static androidx.ui.material.ButtonStyle ContainedButtonStyle(androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}), androidx.ui.engine.geometry.Shape shape = +themeShape({ 
+    button
+}), androidx.ui.core.Dp elevation = 2.dp);
+    method public static androidx.ui.material.ButtonStyle OutlinedButtonStyle(androidx.ui.foundation.shape.border.Border border = Border(+themeColor({ 
+    onSurface.copy(OutlinedStrokeOpacity)
+}), 1.dp), androidx.ui.graphics.Color color = +themeColor({ 
+    surface
+}), androidx.ui.engine.geometry.Shape shape = +themeShape({ 
+    button
+}), androidx.ui.core.Dp elevation = 0.dp);
+    method public static androidx.ui.material.ButtonStyle TextButtonStyle(androidx.ui.engine.geometry.Shape shape = +themeShape({ 
+    button
+}));
+  }
+
+  public final class ButtonStyle {
+    ctor public ButtonStyle(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Shape shape, androidx.ui.foundation.shape.border.Border? border, androidx.ui.core.Dp elevation, androidx.ui.layout.EdgeInsets paddings, androidx.ui.text.TextStyle? textStyle);
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.engine.geometry.Shape component2();
+    method public androidx.ui.foundation.shape.border.Border? component3();
+    method public androidx.ui.core.Dp component4();
+    method public androidx.ui.layout.EdgeInsets component5();
+    method public androidx.ui.text.TextStyle? component6();
+    method public androidx.ui.material.ButtonStyle copy(androidx.ui.graphics.Color color, androidx.ui.engine.geometry.Shape shape, androidx.ui.foundation.shape.border.Border? border, androidx.ui.core.Dp elevation, androidx.ui.layout.EdgeInsets paddings, androidx.ui.text.TextStyle? textStyle);
+    method public androidx.ui.foundation.shape.border.Border? getBorder();
+    method public androidx.ui.graphics.Color getColor();
+    method public androidx.ui.core.Dp getElevation();
+    method public androidx.ui.layout.EdgeInsets getPaddings();
+    method public androidx.ui.engine.geometry.Shape getShape();
+    method public androidx.ui.text.TextStyle? getTextStyle();
+  }
+
+  public final class CheckboxKt {
+    ctor public CheckboxKt();
+    method public static void Checkbox(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, androidx.ui.graphics.Color color = +themeColor({ 
+    secondary
+}));
+    method public static void TriStateCheckbox(androidx.ui.foundation.selection.ToggleableState value, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick, androidx.ui.graphics.Color color = +themeColor({ 
+    secondary
+}));
+  }
+
+  public final class DividerKt {
+    ctor public DividerKt();
+    method public static void Divider(androidx.ui.graphics.Color color = +themeColor({ 
+    onSurface
+}), androidx.ui.core.Dp height = 1.dp, androidx.ui.core.Dp indent = 0.dp);
+  }
+
+  public final class DrawerKt {
+    ctor public DrawerKt();
+    method public static void BottomDrawerLayout(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method public static void ModalDrawerLayout(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method public static void StaticDrawer(kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent);
+  }
+
+  public enum DrawerState {
+    enum_constant public static final androidx.ui.material.DrawerState Closed;
+    enum_constant public static final androidx.ui.material.DrawerState Opened;
+  }
+
+  public final class FloatingActionButtonKt {
+    ctor public FloatingActionButtonKt();
+    method public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.core.Dp minSize = FabSize, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}), androidx.ui.core.Dp elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void FloatingActionButton(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}), androidx.ui.core.Dp elevation = 6.dp);
+    method public static void FloatingActionButton(String text, androidx.ui.graphics.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}), androidx.ui.core.Dp elevation = 6.dp);
+    method public static androidx.ui.core.Dp getExtendedFabHeight();
+    method public static androidx.ui.core.Dp getExtendedFabIconPadding();
+    method public static androidx.ui.core.Dp getExtendedFabTextPadding();
+    method public static androidx.ui.core.Dp getFabSize();
+  }
+
+  public final class MaterialColors {
+    ctor public MaterialColors(androidx.ui.graphics.Color primary, androidx.ui.graphics.Color primaryVariant, androidx.ui.graphics.Color secondary, androidx.ui.graphics.Color secondaryVariant, androidx.ui.graphics.Color background, androidx.ui.graphics.Color surface, androidx.ui.graphics.Color error, androidx.ui.graphics.Color onPrimary, androidx.ui.graphics.Color onSecondary, androidx.ui.graphics.Color onBackground, androidx.ui.graphics.Color onSurface, androidx.ui.graphics.Color onError);
+    ctor public MaterialColors();
+    method public androidx.ui.graphics.Color component1();
+    method public androidx.ui.graphics.Color component10();
+    method public androidx.ui.graphics.Color component11();
+    method public androidx.ui.graphics.Color component12();
+    method public androidx.ui.graphics.Color component2();
+    method public androidx.ui.graphics.Color component3();
+    method public androidx.ui.graphics.Color component4();
+    method public androidx.ui.graphics.Color component5();
+    method public androidx.ui.graphics.Color component6();
+    method public androidx.ui.graphics.Color component7();
+    method public androidx.ui.graphics.Color component8();
+    method public androidx.ui.graphics.Color component9();
+    method public androidx.ui.material.MaterialColors copy(androidx.ui.graphics.Color primary, androidx.ui.graphics.Color primaryVariant, androidx.ui.graphics.Color secondary, androidx.ui.graphics.Color secondaryVariant, androidx.ui.graphics.Color background, androidx.ui.graphics.Color surface, androidx.ui.graphics.Color error, androidx.ui.graphics.Color onPrimary, androidx.ui.graphics.Color onSecondary, androidx.ui.graphics.Color onBackground, androidx.ui.graphics.Color onSurface, androidx.ui.graphics.Color onError);
+    method public androidx.ui.graphics.Color getBackground();
+    method public androidx.ui.graphics.Color getError();
+    method public androidx.ui.graphics.Color getOnBackground();
+    method public androidx.ui.graphics.Color getOnError();
+    method public androidx.ui.graphics.Color getOnPrimary();
+    method public androidx.ui.graphics.Color getOnSecondary();
+    method public androidx.ui.graphics.Color getOnSurface();
+    method public androidx.ui.graphics.Color getPrimary();
+    method public androidx.ui.graphics.Color getPrimaryVariant();
+    method public androidx.ui.graphics.Color getSecondary();
+    method public androidx.ui.graphics.Color getSecondaryVariant();
+    method public androidx.ui.graphics.Color getSurface();
+  }
+
+  public final class MaterialThemeKt {
+    ctor public MaterialThemeKt();
+    method public static void MaterialButtonShapeTheme(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static void MaterialTheme(androidx.ui.material.MaterialColors colors = androidx.ui.material.MaterialColors(), androidx.ui.material.MaterialTypography typography = androidx.ui.material.MaterialTypography(), kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.compose.Ambient<androidx.ui.material.MaterialColors> getColors();
+    method public static androidx.compose.Ambient<androidx.ui.material.Shapes> getCurrentShapeAmbient();
+    method public static androidx.compose.Ambient<androidx.ui.material.MaterialTypography> getTypography();
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<androidx.ui.graphics.Color> themeColor(kotlin.jvm.functions.Function1<? super androidx.ui.material.MaterialColors,androidx.ui.graphics.Color> choosingBlock);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<androidx.ui.engine.geometry.Shape> themeShape(kotlin.jvm.functions.Function1<? super androidx.ui.material.Shapes,? extends androidx.ui.engine.geometry.Shape> choosingBlock);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<androidx.ui.text.TextStyle> themeTextStyle(kotlin.jvm.functions.Function1<? super androidx.ui.material.MaterialTypography,androidx.ui.text.TextStyle> choosingBlock);
+  }
+
+  public final class MaterialTypography {
+    ctor public MaterialTypography(androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
+    ctor public MaterialTypography();
+    method public androidx.ui.text.TextStyle component1();
+    method public androidx.ui.text.TextStyle component10();
+    method public androidx.ui.text.TextStyle component11();
+    method public androidx.ui.text.TextStyle component12();
+    method public androidx.ui.text.TextStyle component13();
+    method public androidx.ui.text.TextStyle component2();
+    method public androidx.ui.text.TextStyle component3();
+    method public androidx.ui.text.TextStyle component4();
+    method public androidx.ui.text.TextStyle component5();
+    method public androidx.ui.text.TextStyle component6();
+    method public androidx.ui.text.TextStyle component7();
+    method public androidx.ui.text.TextStyle component8();
+    method public androidx.ui.text.TextStyle component9();
+    method public androidx.ui.material.MaterialTypography copy(androidx.ui.text.TextStyle h1, androidx.ui.text.TextStyle h2, androidx.ui.text.TextStyle h3, androidx.ui.text.TextStyle h4, androidx.ui.text.TextStyle h5, androidx.ui.text.TextStyle h6, androidx.ui.text.TextStyle subtitle1, androidx.ui.text.TextStyle subtitle2, androidx.ui.text.TextStyle body1, androidx.ui.text.TextStyle body2, androidx.ui.text.TextStyle button, androidx.ui.text.TextStyle caption, androidx.ui.text.TextStyle overline);
+    method public androidx.ui.text.TextStyle getBody1();
+    method public androidx.ui.text.TextStyle getBody2();
+    method public androidx.ui.text.TextStyle getButton();
+    method public androidx.ui.text.TextStyle getCaption();
+    method public androidx.ui.text.TextStyle getH1();
+    method public androidx.ui.text.TextStyle getH2();
+    method public androidx.ui.text.TextStyle getH3();
+    method public androidx.ui.text.TextStyle getH4();
+    method public androidx.ui.text.TextStyle getH5();
+    method public androidx.ui.text.TextStyle getH6();
+    method public androidx.ui.text.TextStyle getOverline();
+    method public androidx.ui.text.TextStyle getSubtitle1();
+    method public androidx.ui.text.TextStyle getSubtitle2();
+  }
+
+  public final class ProgressIndicatorKt {
+    ctor public ProgressIndicatorKt();
+    method public static void CircularProgressIndicator(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}));
+    method public static void CircularProgressIndicator(androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}));
+    method public static void LinearProgressIndicator(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}));
+    method public static void LinearProgressIndicator(androidx.ui.graphics.Color color = +themeColor({ 
+    primary
+}));
+  }
+
+  public final class RadioButtonKt {
+    ctor public RadioButtonKt();
+    method public static void RadioButton(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit>? onSelect, androidx.ui.graphics.Color color = +themeColor({ 
+    secondary
+}));
+    method public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.ui.material.RadioGroupScope,kotlin.Unit> children);
+    method public static void RadioGroup(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.graphics.Color radioColor = +themeColor({ 
+    secondary
+}), androidx.ui.text.TextStyle? textStyle = null);
+  }
+
+  public final class RadioGroupScope {
+    method public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public void RadioGroupTextItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.graphics.Color radioColor = +themeColor({ 
+    secondary
+}), androidx.ui.text.TextStyle? textStyle = null);
+  }
+
+  public final class Shapes {
+    ctor public Shapes(androidx.ui.engine.geometry.Shape button);
+    method public androidx.ui.engine.geometry.Shape component1();
+    method public androidx.ui.material.Shapes copy(androidx.ui.engine.geometry.Shape button);
+    method public androidx.ui.engine.geometry.Shape getButton();
+  }
+
+  public final class SwitchKt {
+    ctor public SwitchKt();
+    method public static void Switch(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>? onCheckedChange, androidx.ui.graphics.Color color = +themeColor({ 
+    secondaryVariant
+}));
+  }
+
+  public final class TabKt {
+    ctor public TabKt();
+    method public static void Tab(String? text = null, androidx.ui.graphics.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
+    method public static <T> void TabRow(java.util.List<? extends T> items, int selectedIndex, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    TabRow.Indicator()
+}) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
+  }
+
+  public final class TabRow {
+    method public void Indicator();
+    method public void IndicatorContainer(java.util.List<androidx.ui.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
+    field public static final androidx.ui.material.TabRow! INSTANCE;
+  }
+
+  public static final class TabRow.TabPosition {
+    ctor public TabRow.TabPosition(androidx.ui.core.Dp xOffset, androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public androidx.ui.core.Dp component1();
+    method public androidx.ui.core.Dp component2();
+    method public androidx.ui.core.Dp component3();
+    method public androidx.ui.material.TabRow.TabPosition copy(androidx.ui.core.Dp xOffset, androidx.ui.core.Dp width, androidx.ui.core.Dp height);
+    method public androidx.ui.core.Dp getHeight();
+    method public androidx.ui.core.Dp getWidth();
+    method public androidx.ui.core.Dp getXOffset();
+  }
+
+  public final class TextKt {
+    ctor public TextKt();
+    method public static androidx.compose.Effect<androidx.ui.graphics.Color> textColorForBackground(androidx.ui.graphics.Color background);
+  }
+
+}
+
+package androidx.ui.material.internal {
+
+  public final class AnchoredControllerByStateKt {
+    ctor public AnchoredControllerByStateKt();
+  }
+
+}
+
+package androidx.ui.material.ripple {
+
+  public final class DefaultRippleEffectFactory implements androidx.ui.material.ripple.RippleEffectFactory {
+    method public androidx.ui.material.ripple.RippleEffect create(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.core.PxPosition touchPosition, androidx.ui.graphics.Color color, androidx.ui.core.Density density, androidx.ui.core.Dp? radius, boolean bounded, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw, kotlin.jvm.functions.Function1<? super androidx.ui.material.ripple.RippleEffect,kotlin.Unit> onAnimationFinished);
+    field public static final androidx.ui.material.ripple.DefaultRippleEffectFactory! INSTANCE;
+  }
+
+  public final class DefaultRippleEffectKt {
+    ctor public DefaultRippleEffectKt();
+  }
+
+  public abstract class RippleEffect {
+    ctor public RippleEffect(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.graphics.Color color, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw);
+    method public abstract void dispose();
+    method protected abstract void drawEffect(androidx.ui.graphics.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
+    method public void finish(boolean canceled);
+    method public final androidx.ui.graphics.Color getColor();
+    method public final void setColor(androidx.ui.graphics.Color value);
+    property public final androidx.ui.graphics.Color color;
+  }
+
+  public interface RippleEffectFactory {
+    method public androidx.ui.material.ripple.RippleEffect create(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.core.PxPosition touchPosition, androidx.ui.graphics.Color color, androidx.ui.core.Density density, androidx.ui.core.Dp? radius, boolean bounded, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw, kotlin.jvm.functions.Function1<? super androidx.ui.material.ripple.RippleEffect,kotlin.Unit> onAnimationFinished);
+  }
+
+  public final class RippleKt {
+    ctor public RippleKt();
+    method public static void Ripple(boolean bounded, androidx.ui.core.Dp? radius = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class RippleSurfaceKt {
+    ctor public RippleSurfaceKt();
+    method public static void RippleSurface(androidx.ui.graphics.Color? color, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<androidx.ui.material.ripple.RippleSurfaceOwner> ambientRippleSurface();
+  }
+
+  public interface RippleSurfaceOwner {
+    method public void addEffect(androidx.ui.material.ripple.RippleEffect effect);
+    method public androidx.ui.graphics.Color? getBackgroundColor();
+    method public androidx.ui.core.LayoutCoordinates getLayoutCoordinates();
+    method public void removeEffect(androidx.ui.material.ripple.RippleEffect effect);
+    method public void requestRedraw();
+    property public abstract androidx.ui.graphics.Color? backgroundColor;
+    property public abstract androidx.ui.core.LayoutCoordinates layoutCoordinates;
+  }
+
+  public final class RippleTheme {
+    ctor public RippleTheme(androidx.ui.material.ripple.RippleEffectFactory factory, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,androidx.ui.graphics.Color> colorCallback);
+    method public androidx.ui.material.ripple.RippleEffectFactory component1();
+    method public kotlin.jvm.functions.Function1<androidx.ui.graphics.Color,androidx.ui.graphics.Color> component2();
+    method public androidx.ui.material.ripple.RippleTheme copy(androidx.ui.material.ripple.RippleEffectFactory factory, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,androidx.ui.graphics.Color> colorCallback);
+    method public kotlin.jvm.functions.Function1<androidx.ui.graphics.Color,androidx.ui.graphics.Color> getColorCallback();
+    method public androidx.ui.material.ripple.RippleEffectFactory getFactory();
+  }
+
+  public final class RippleThemeKt {
+    ctor public RippleThemeKt();
+    method public static androidx.compose.Ambient<androidx.ui.material.ripple.RippleTheme> getCurrentRippleTheme();
+  }
+
+}
+
+package androidx.ui.material.shape {
+
+  public final class CutCornerShape extends androidx.ui.foundation.shape.corner.CornerBasedShape {
+    ctor public CutCornerShape(androidx.ui.foundation.shape.corner.CornerSize topLeft, androidx.ui.foundation.shape.corner.CornerSize topRight, androidx.ui.foundation.shape.corner.CornerSize bottomRight, androidx.ui.foundation.shape.corner.CornerSize bottomLeft);
+    method public androidx.ui.foundation.shape.corner.CornerSize component1();
+    method public androidx.ui.foundation.shape.corner.CornerSize component2();
+    method public androidx.ui.foundation.shape.corner.CornerSize component3();
+    method public androidx.ui.foundation.shape.corner.CornerSize component4();
+    method public androidx.ui.material.shape.CutCornerShape copy(androidx.ui.foundation.shape.corner.CornerSize topLeft, androidx.ui.foundation.shape.corner.CornerSize topRight, androidx.ui.foundation.shape.corner.CornerSize bottomRight, androidx.ui.foundation.shape.corner.CornerSize bottomLeft);
+    method public androidx.ui.engine.geometry.Outline.Generic createOutline(androidx.ui.core.PxSize size, androidx.ui.core.Px topLeft, androidx.ui.core.Px topRight, androidx.ui.core.Px bottomRight, androidx.ui.core.Px bottomLeft);
+    method public androidx.ui.foundation.shape.corner.CornerSize getBottomLeft();
+    method public androidx.ui.foundation.shape.corner.CornerSize getBottomRight();
+    method public androidx.ui.foundation.shape.corner.CornerSize getTopLeft();
+    method public androidx.ui.foundation.shape.corner.CornerSize getTopRight();
+  }
+
+  public final class CutCornerShapeKt {
+    ctor public CutCornerShapeKt();
+    method public static androidx.ui.material.shape.CutCornerShape CutCornerShape(androidx.ui.foundation.shape.corner.CornerSize corner);
+    method public static androidx.ui.material.shape.CutCornerShape CutCornerShape(androidx.ui.core.Dp size);
+    method public static androidx.ui.material.shape.CutCornerShape CutCornerShape(androidx.ui.core.Px size);
+    method public static androidx.ui.material.shape.CutCornerShape CutCornerShape(int percent);
+    method public static androidx.ui.material.shape.CutCornerShape CutCornerShape(androidx.ui.core.Dp topLeft = 0.dp, androidx.ui.core.Dp topRight = 0.dp, androidx.ui.core.Dp bottomRight = 0.dp, androidx.ui.core.Dp bottomLeft = 0.dp);
+    method public static androidx.ui.material.shape.CutCornerShape CutCornerShape(androidx.ui.core.Px topLeft = 0.px, androidx.ui.core.Px topRight = 0.px, androidx.ui.core.Px bottomRight = 0.px, androidx.ui.core.Px bottomLeft = 0.px);
+    method public static androidx.ui.material.shape.CutCornerShape CutCornerShape(@IntRange(from=0, to=50) int topLeftPercent = 0, @IntRange(from=0, to=50) int topRightPercent = 0, @IntRange(from=0, to=50) int bottomRightPercent = 0, @IntRange(from=0, to=50) int bottomLeftPercent = 0);
+  }
+
+}
+
+package androidx.ui.material.surface {
+
+  public final class CardKt {
+    ctor public CardKt();
+    method public static void Card(androidx.ui.engine.geometry.Shape shape = RectangleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    surface
+}), androidx.ui.foundation.shape.border.Border? border = null, androidx.ui.core.Dp elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class SurfaceKt {
+    ctor public SurfaceKt();
+    method public static void Surface(androidx.ui.engine.geometry.Shape shape = RectangleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    surface
+}), androidx.ui.foundation.shape.border.Border? border = null, androidx.ui.core.Dp elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class TransparentSurfaceKt {
+    ctor public TransparentSurfaceKt();
+    method public static void TransparentSurface(androidx.ui.engine.geometry.Shape shape = RectangleShape, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+}
+
diff --git a/ui/ui-material/api/public_plus_experimental_current.txt b/ui/ui-material/api/public_plus_experimental_current.txt
index 3ec19a0..6621eaf 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -13,7 +13,7 @@
 
   public final class AppBarKt {
     ctor public AppBarKt();
-    method public static void AppBarIcon(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+    method public static void AppBarIcon(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
     method public static <T> void BottomAppBar(androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.BottomAppBar.FabConfiguration? fabConfiguration = null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
@@ -113,10 +113,10 @@
     method public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.core.Dp minSize = FabSize, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void FloatingActionButton(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
-    method public static void FloatingActionButton(String text, androidx.ui.painting.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(String text, androidx.ui.graphics.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
     method public static androidx.ui.core.Dp getExtendedFabHeight();
@@ -249,7 +249,7 @@
 
   public final class TabKt {
     ctor public TabKt();
-    method public static void Tab(String? text = null, androidx.ui.painting.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
+    method public static void Tab(String? text = null, androidx.ui.graphics.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
     method public static <T> void TabRow(java.util.List<? extends T> items, int selectedIndex, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
@@ -301,7 +301,7 @@
   public abstract class RippleEffect {
     ctor public RippleEffect(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.graphics.Color color, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw);
     method public abstract void dispose();
-    method protected abstract void drawEffect(androidx.ui.painting.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
+    method protected abstract void drawEffect(androidx.ui.graphics.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
     method public void finish(boolean canceled);
     method public final androidx.ui.graphics.Color getColor();
     method public final void setColor(androidx.ui.graphics.Color value);
diff --git a/ui/ui-material/api/restricted_0.1.0-dev01.txt b/ui/ui-material/api/restricted_0.1.0-dev01.txt
index 3ec19a0..6621eaf 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev01.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev01.txt
@@ -13,7 +13,7 @@
 
   public final class AppBarKt {
     ctor public AppBarKt();
-    method public static void AppBarIcon(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+    method public static void AppBarIcon(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
     method public static <T> void BottomAppBar(androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.BottomAppBar.FabConfiguration? fabConfiguration = null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
@@ -113,10 +113,10 @@
     method public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.core.Dp minSize = FabSize, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void FloatingActionButton(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
-    method public static void FloatingActionButton(String text, androidx.ui.painting.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(String text, androidx.ui.graphics.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
     method public static androidx.ui.core.Dp getExtendedFabHeight();
@@ -249,7 +249,7 @@
 
   public final class TabKt {
     ctor public TabKt();
-    method public static void Tab(String? text = null, androidx.ui.painting.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
+    method public static void Tab(String? text = null, androidx.ui.graphics.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
     method public static <T> void TabRow(java.util.List<? extends T> items, int selectedIndex, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
@@ -301,7 +301,7 @@
   public abstract class RippleEffect {
     ctor public RippleEffect(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.graphics.Color color, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw);
     method public abstract void dispose();
-    method protected abstract void drawEffect(androidx.ui.painting.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
+    method protected abstract void drawEffect(androidx.ui.graphics.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
     method public void finish(boolean canceled);
     method public final androidx.ui.graphics.Color getColor();
     method public final void setColor(androidx.ui.graphics.Color value);
diff --git a/ui/ui-material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
index 3ec19a0..6621eaf 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -13,7 +13,7 @@
 
   public final class AppBarKt {
     ctor public AppBarKt();
-    method public static void AppBarIcon(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
+    method public static void AppBarIcon(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
     method public static <T> void BottomAppBar(androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = (kotlin.jvm.functions.Function0<? extends kotlin.Unit>)null, androidx.ui.material.BottomAppBar.FabConfiguration? fabConfiguration = null, java.util.List<? extends T>? contextualActions = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> action = {});
@@ -113,10 +113,10 @@
     method public static void FloatingActionButton(kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.core.Dp minSize = FabSize, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void FloatingActionButton(androidx.ui.painting.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(androidx.ui.graphics.Image icon, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.engine.geometry.Shape shape = CircleShape, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
-    method public static void FloatingActionButton(String text, androidx.ui.painting.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
+    method public static void FloatingActionButton(String text, androidx.ui.graphics.Image? icon = null, androidx.ui.text.TextStyle? textStyle = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.ui.graphics.Color color = +themeColor({ 
     primary
 }), androidx.ui.core.Dp elevation = 6.dp);
     method public static androidx.ui.core.Dp getExtendedFabHeight();
@@ -249,7 +249,7 @@
 
   public final class TabKt {
     ctor public TabKt();
-    method public static void Tab(String? text = null, androidx.ui.painting.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
+    method public static void Tab(String? text = null, androidx.ui.graphics.Image? icon = null, boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected);
     method public static <T> void TabRow(java.util.List<? extends T> items, int selectedIndex, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
@@ -301,7 +301,7 @@
   public abstract class RippleEffect {
     ctor public RippleEffect(androidx.ui.core.LayoutCoordinates coordinates, androidx.ui.core.LayoutCoordinates surfaceCoordinates, androidx.ui.graphics.Color color, kotlin.jvm.functions.Function0<kotlin.Unit> requestRedraw);
     method public abstract void dispose();
-    method protected abstract void drawEffect(androidx.ui.painting.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
+    method protected abstract void drawEffect(androidx.ui.graphics.Canvas canvas, androidx.ui.vectormath64.Matrix4 transform);
     method public void finish(boolean canceled);
     method public final androidx.ui.graphics.Color getColor();
     method public final void setColor(androidx.ui.graphics.Color value);
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
index e627eb7..0c5140e 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
@@ -47,7 +47,7 @@
 import androidx.ui.material.samples.SimpleTopAppBarNavIcon
 import androidx.ui.material.surface.Surface
 import androidx.ui.material.themeTextStyle
-import androidx.ui.painting.imageFromResource
+import androidx.ui.graphics.imageFromResource
 
 class AppBarActivity : MaterialDemoActivity() {
 
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
index a50ec20..b7e20c9 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
@@ -18,7 +18,7 @@
 
 import android.util.Log
 import androidx.compose.Composable
-import androidx.ui.painting.imageFromResource
+import androidx.ui.graphics.imageFromResource
 import androidx.compose.composer
 import androidx.ui.layout.Center
 import androidx.ui.layout.Column
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt
index e4e2961..14caaeb 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt
@@ -31,7 +31,7 @@
 import androidx.ui.material.samples.IconTabs
 import androidx.ui.material.samples.TextAndIconTabs
 import androidx.ui.material.samples.TextTabs
-import androidx.ui.painting.imageFromResource
+import androidx.ui.graphics.imageFromResource
 
 class TabActivity : MaterialDemoActivity() {
 
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AppBarSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AppBarSamples.kt
index e415ba7..52994ac 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AppBarSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/AppBarSamples.kt
@@ -31,9 +31,9 @@
 import androidx.ui.material.BottomAppBar.FabConfiguration
 import androidx.ui.material.FloatingActionButton
 import androidx.ui.material.TopAppBar
+import androidx.ui.graphics.Image
 import androidx.ui.material.shape.CutCornerShape
 import androidx.ui.material.themeColor
-import androidx.ui.painting.Image
 import androidx.ui.text.TextStyle
 import kotlin.math.abs
 import kotlin.math.roundToInt
diff --git a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
index 2cb03834..8bbf97e 100644
--- a/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
+++ b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
@@ -45,7 +45,7 @@
 import androidx.ui.material.Tab
 import androidx.ui.material.TabRow
 import androidx.ui.material.themeTextStyle
-import androidx.ui.painting.Image
+import androidx.ui.graphics.Image
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt
index dd2bf51..5dc243b 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt
@@ -21,8 +21,8 @@
 import androidx.ui.core.dp
 import androidx.ui.core.round
 import androidx.ui.core.withDensity
-import androidx.ui.painting.Image
-import androidx.ui.painting.ImageConfig
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.ImageConfig
 import androidx.ui.test.createComposeRule
 import com.google.common.truth.Truth
 import org.junit.Rule
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt
index 173bb9f..5349ae0 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt
@@ -40,7 +40,7 @@
 import androidx.ui.material.ripple.RippleEffectFactory
 import androidx.ui.material.ripple.RippleTheme
 import androidx.ui.material.surface.Card
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.doClick
 import androidx.ui.test.findByTag
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt
index ff7b033..f60b406 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt
@@ -32,8 +32,8 @@
 import androidx.ui.layout.Container
 import androidx.ui.material.samples.TextTabs
 import androidx.ui.material.surface.Surface
-import androidx.ui.painting.Image
-import androidx.ui.painting.ImageConfig
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.ImageConfig
 import androidx.ui.test.assertCountEquals
 import androidx.ui.test.assertIsUnselected
 import androidx.ui.test.assertIsSelected
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt
index 4c1072d..52a133b 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt
+++ b/ui/ui-material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt
@@ -22,8 +22,8 @@
 import androidx.ui.core.px
 import androidx.ui.engine.geometry.Outline
 import androidx.ui.engine.geometry.Shape
-import androidx.ui.painting.Path
-import androidx.ui.painting.PathOperation
+import androidx.ui.graphics.Path
+import androidx.ui.graphics.PathOperation
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
 import org.junit.Test
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt b/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
index f1b577f..95ebfa3 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
@@ -40,6 +40,7 @@
 import androidx.ui.foundation.Clickable
 import androidx.ui.foundation.SimpleImage
 import androidx.ui.foundation.shape.RectangleShape
+import androidx.ui.foundation.shape.corner.CircleShape
 import androidx.ui.layout.Container
 import androidx.ui.layout.FlexRow
 import androidx.ui.layout.MainAxisAlignment
@@ -53,11 +54,12 @@
 import androidx.ui.material.BottomAppBar.FabConfiguration
 import androidx.ui.material.BottomAppBar.FabPosition
 import androidx.ui.material.ripple.Ripple
-import androidx.ui.painting.Image
-import androidx.ui.painting.Path
-import androidx.ui.painting.PathOperation
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.Path
+import androidx.ui.graphics.PathOperation
 import androidx.ui.semantics.Semantics
 import androidx.ui.text.TextStyle
+import kotlin.math.sqrt
 
 /**
  * A TopAppBar displays information and actions relating to the current screen and is placed at the
@@ -365,6 +367,7 @@
         )
 
         val cutoutStartX = fabPosition.x.value - cutoutOffset.value
+        val cutoutEndX = cutoutStartX + cutoutSize.width.value
 
         val cutoutRadius = cutoutSize.height.value / 2f
         // Shift the cutout up by half its height, so only the bottom half of the cutout is actually
@@ -373,7 +376,185 @@
 
         addOutline(cutoutShape.createOutline(cutoutSize, density))
         shift(Offset(cutoutStartX, cutoutStartY))
+
+        // TODO: consider exposing the custom cutout shape instead of just replacing circle shapes?
+        if (cutoutShape == CircleShape) {
+            val edgeRadius = withDensity(density) { BottomAppBarRoundedEdgeRadius.toPx().value }
+            // TODO: possibly support providing a custom vertical offset?
+            addRoundedEdges(cutoutStartX, cutoutEndX, cutoutRadius, edgeRadius, 0f)
+        }
     }
+
+    /**
+     * Adds rounded edges to the [Path] representing a circular cutout in a BottomAppBar.
+     *
+     * Adds a curve for the left and right edges, with a straight line drawn between them - this
+     * combined with the cutout shape results in the overall cutout path that can be subtracted
+     * from the bounding rect of the app bar.
+     *
+     * @param cutoutStartPosition the absolute start position of the cutout
+     * @param cutoutEndPosition the absolute end position of the cutout
+     * @param cutoutRadius the radius of the cutout's circular edge - for a typical circular FAB
+     * this will just be the radius of the circular cutout, but in the case of an extended FAB, we
+     * can model this as two circles on either side attached to a rectangle.
+     * @param roundedEdgeRadius how far from the points where the cutout intersects with the app bar
+     * should the rounded edges be drawn to.
+     * @param verticalOffset how far the app bar is from the center of the cutout circle
+     */
+    private fun Path.addRoundedEdges(
+        cutoutStartPosition: Float,
+        cutoutEndPosition: Float,
+        cutoutRadius: Float,
+        roundedEdgeRadius: Float,
+        verticalOffset: Float
+    ) {
+        // Where the cutout intersects with the app bar, as if the cutout is not vertically aligned
+        // with the app bar, the intersect will not be equal to the radius of the circle.
+        val appBarInterceptOffset = calculateCutoutCircleYIntercept(cutoutRadius, verticalOffset)
+        val appBarInterceptStartX = cutoutStartPosition + (cutoutRadius + appBarInterceptOffset)
+        val appBarInterceptEndX = cutoutEndPosition - (cutoutRadius + appBarInterceptOffset)
+
+        // How far the control point is away from the cutout intercept. We set this to be as small
+        // as possible so that we have the most 'rounded' curve.
+        val controlPointOffset = 1f
+
+        // How far the control point is away from the center of the radius of the cutout
+        val controlPointRadiusOffset = appBarInterceptOffset - controlPointOffset
+
+        // The coordinates offset from the center of the radius of the cutout, where we should
+        // draw the curve to
+        val (curveInterceptXOffset, curveInterceptYOffset) = calculateRoundedEdgeIntercept(
+            controlPointRadiusOffset,
+            verticalOffset,
+            cutoutRadius
+        )
+
+        // Convert the offset relative to the center of the cutout circle into an absolute
+        // coordinate, by adding the radius of the shape to get a pure relative offset from the
+        // leftmost edge, and then positioning it next to the cutout
+        val curveInterceptStartX = cutoutStartPosition + (curveInterceptXOffset + cutoutRadius)
+        val curveInterceptEndX = cutoutEndPosition - (curveInterceptXOffset + cutoutRadius)
+
+        // Convert the curveInterceptYOffset which is relative to the center of the cutout, to an
+        // absolute position
+        val curveInterceptY = curveInterceptYOffset - verticalOffset
+
+        // Where the rounded edge starts
+        val roundedEdgeStartX = appBarInterceptStartX - roundedEdgeRadius
+        val roundedEdgeEndX = appBarInterceptEndX + roundedEdgeRadius
+
+        moveTo(roundedEdgeStartX, 0f)
+        quadraticBezierTo(
+            appBarInterceptStartX - controlPointOffset,
+            0f,
+            curveInterceptStartX,
+            curveInterceptY
+        )
+        lineTo(curveInterceptEndX, curveInterceptY)
+        quadraticBezierTo(appBarInterceptEndX + controlPointOffset, 0f, roundedEdgeEndX, 0f)
+        close()
+    }
+}
+
+/**
+ * Helper to make the following equations easier to read
+ */
+@Suppress("NOTHING_TO_INLINE")
+private inline fun square(x: Float) = x * x
+
+/**
+ * Returns the relative y intercept for a circle with the given [cutoutRadius] and [verticalOffset]
+ *
+ * Returns the leftmost intercept, so this will be a negative number that when added to the circle's
+ * absolute origin will give the absolute position of the left intercept, where the circle meets
+ * the app bar.
+ *
+ * Explanation:
+ * First construct the equation for a circle with given radius and vertical offset:
+ * x^2 + (y-verticalOffset)^2 = radius^2
+ *
+ * We want to find the y intercept where the cutout hits the top edge of the bottom app bar, so
+ * rearrange and set y to 0:
+ *
+ * x^2 = radius^2 - (0-verticalOffset)^2
+ *
+ * We are only interested in the left most (negative x) solution as we mirror this for the right
+ * edge later.
+ */
+@Suppress("NOTHING_TO_INLINE")
+internal inline fun calculateCutoutCircleYIntercept(
+    cutoutRadius: Float,
+    verticalOffset: Float
+): Float {
+    return -sqrt(square(cutoutRadius) - square(verticalOffset))
+}
+
+// TODO: Consider extracting this into the shape package / similar, might be useful for cutouts in
+// general.
+/**
+ * For a given control point on a quadratic bezier curve, calculates the required intercept
+ * point to create a smooth curve between the rounded edges near the cutout, and the actual curve
+ * that is part of the cutout.
+ *
+ * This returns the relative offset from the center of a circle with radius that is half the
+ * height of the cutout.
+ *
+ * Explanation and derivation comes from the Flutter team: https://goo.gl/Ufzrqn
+ *
+ * @param controlPointX the horizontal offset of the control point from the center of the circle
+ * @param verticalOffset the vertical offset of the top edge of the app bar from the center of the
+ * circle. I.e, if this is 2f, then the top edge of the app bar is 2f below the center. If 0f, the
+ * top edge of the app bar is in centered inside the circle.
+ * @param radius the radius of the circle - essentially the 'depth' of the cutout
+ */
+@Suppress("UnnecessaryVariable")
+internal fun calculateRoundedEdgeIntercept(
+    controlPointX: Float,
+    verticalOffset: Float,
+    radius: Float
+): Pair<Float, Float> {
+    val a = controlPointX
+    val b = verticalOffset
+    val r = radius
+
+    // expands to a2b2r2 + b4r2 - b2r4
+    val discriminant = square(b) * square(r) * (square(a) + square(b) - square(r))
+    val divisor = square(a) + square(b)
+    // the '-b' part of the quadratic solution
+    val bCoefficient = a * square(r)
+
+    // Two solutions for the x coordinate relative to the midpoint of the circle
+    val xSolutionA = (bCoefficient - sqrt(discriminant)) / divisor
+    val xSolutionB = (bCoefficient + sqrt(discriminant)) / divisor
+
+    // Get y coordinate from r2 = x2 + y2 -> y2 = r2 - x2
+    val ySolutionA = sqrt(square(r) - square(xSolutionA))
+    val ySolutionB = sqrt(square(r) - square(xSolutionB))
+
+    // If the vertical offset is 0, the vertical center of the circle lines up with the top edge of
+    // the bottom app bar, so both solutions are identical.
+    // If the vertical offset is not 0, there are two distinct solutions: one that will meet in the
+    // top half of the circle, and one that will meet in the bottom half of the circle. As the app
+    // bar is always on the bottom edge of the circle, we are always interested in the bottom half
+    // solution. To calculate which is which, it depends on whether the vertical offset is positive
+    // or negative.
+    val (xSolution, ySolution) = if (b > 0) {
+        // When the offset is positive, the top edge of the app bar is below the center of the
+        // circle. The largest solution will be the one closest to the bottom of the circle, so we
+        // pick that.
+        if (ySolutionA > ySolutionB) xSolutionA to ySolutionA else xSolutionB to ySolutionB
+    } else {
+        // When the offset is negative, the top edge of the app bar is above the center of the
+        // circle. The smallest solution will be the one closest to the top of the circle, so we
+        // pick that.
+        if (ySolutionA < ySolutionB) xSolutionA to ySolutionA else xSolutionB to ySolutionB
+    }
+
+    // If the calculated x coordinate is further away from the origin than the control point, the
+    // curve will fold back on itself. In this scenario, we actually join the circle above the
+    // center, so invert the y coordinate.
+    val adjustedYSolution = if (xSolution < controlPointX) -ySolution else ySolution
+    return xSolution to adjustedYSolution
 }
 
 @Composable
@@ -539,6 +720,8 @@
 
 // The gap on all sides between the FAB and the cutout
 private val BottomAppBarCutoutOffset = 8.dp
+// How far from the notch the rounded edges start
+private val BottomAppBarRoundedEdgeRadius = 4.dp
 
 private const val MaxIconsInTopAppBar = 2
 private const val MaxIconsInBottomAppBarCenterFab = 2
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 5437f266..04ecdba 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
@@ -39,9 +39,9 @@
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Wrap
 import androidx.ui.material.ripple.Ripple
-import androidx.ui.painting.Paint
-import androidx.ui.painting.PaintingStyle
-import androidx.ui.painting.StrokeCap
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.PaintingStyle
+import androidx.ui.graphics.StrokeCap
 
 /**
  * A TriStateCheckbox is a toggleable component that provides
@@ -182,7 +182,7 @@
         // TODO(malkov): this radius formula is not in material spec
         val inner = innerSquared
             .withRadius(Radius.circular(innerSquared.width * squareMultiplier))
-        canvas.drawDRRect(outer, inner, paint)
+        canvas.drawDoubleRoundRect(outer, inner, paint)
     }
 }
 
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
index 8fae7f7..fe9333c 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
@@ -32,7 +32,7 @@
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Row
 import androidx.ui.layout.WidthSpacer
-import androidx.ui.painting.Image
+import androidx.ui.graphics.Image
 import androidx.ui.text.TextStyle
 
 /**
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt b/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
index e2da5bc..075938d 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
@@ -43,10 +43,10 @@
 import androidx.ui.layout.Container
 import androidx.ui.layout.Padding
 import androidx.ui.layout.Wrap
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
-import androidx.ui.painting.PaintingStyle
-import androidx.ui.painting.StrokeCap
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.PaintingStyle
+import androidx.ui.graphics.StrokeCap
 import androidx.ui.vectormath64.degrees
 import kotlin.math.abs
 import kotlin.math.max
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
index 0f971b4..f85d77f 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
@@ -48,9 +48,9 @@
 import androidx.ui.layout.Row
 import androidx.ui.layout.Wrap
 import androidx.ui.material.ripple.Ripple
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
-import androidx.ui.painting.PaintingStyle
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.PaintingStyle
 import androidx.ui.text.TextStyle
 
 /**
@@ -275,13 +275,13 @@
 
     if (gap == 0.dp) {
         val inner = outer.shrink(outerPx - innerPx)
-        canvas.drawDRRect(outer, inner, p)
+        canvas.drawDoubleRoundRect(outer, inner, p)
     } else {
         val inner = outer.shrink(RadioStrokeWidth.toPx().value)
-        canvas.drawDRRect(outer, inner, p)
+        canvas.drawDoubleRoundRect(outer, inner, p)
         val radioOuter = inner.shrink(gap.toPx().value)
         val radioInner = outer.shrink(outerPx - innerPx)
-        canvas.drawDRRect(radioOuter, radioInner, p)
+        canvas.drawDoubleRoundRect(radioOuter, radioInner, p)
     }
 }
 
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 da22e0f..dda53bb 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
@@ -37,9 +37,9 @@
 import androidx.ui.layout.Wrap
 import androidx.ui.material.internal.anchoredControllerByState
 import androidx.ui.material.ripple.Ripple
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
-import androidx.ui.painting.StrokeCap
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.StrokeCap
 
 /**
  * A Switch is a two state toggleable component that provides on/off like options
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt b/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
index 2b6a435..7fbbc0b 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
@@ -47,7 +47,7 @@
 import androidx.ui.material.TabRow.TabPosition
 import androidx.ui.material.ripple.Ripple
 import androidx.ui.material.surface.Surface
-import androidx.ui.painting.Image
+import androidx.ui.graphics.Image
 
 /**
  * A TabRow contains a row of [Tab]s, and displays an indicator underneath the currently
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt
index 5d57454..7769105 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt
@@ -40,9 +40,9 @@
 import androidx.ui.core.toOffset
 import androidx.ui.core.toRect
 import androidx.ui.core.withDensity
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Paint
 import androidx.ui.vectormath64.Matrix4
 import androidx.ui.vectormath64.getAsTranslation
 
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt
index 605a616..b642a5f 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.px
 import androidx.ui.graphics.Color
 import androidx.ui.material.surface.Surface
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.vectormath64.Matrix4
 import androidx.ui.vectormath64.Vector3
 
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt b/ui/ui-material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt
index 5226f09..1857a78 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt
+++ b/ui/ui-material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt
@@ -25,7 +25,7 @@
 import androidx.ui.engine.geometry.Outline
 import androidx.ui.foundation.shape.corner.CornerBasedShape
 import androidx.ui.foundation.shape.corner.CornerSize
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Path
 
 /**
  * A shape describing the rectangle with cut corners.
diff --git a/ui/ui-material/src/test/bottom_app_bar_rounded_edges.png b/ui/ui-material/src/test/bottom_app_bar_rounded_edges.png
new file mode 100644
index 0000000..224f57d
--- /dev/null
+++ b/ui/ui-material/src/test/bottom_app_bar_rounded_edges.png
Binary files differ
diff --git a/ui/ui-material/src/test/bottom_app_bar_rounded_edges_graph.py b/ui/ui-material/src/test/bottom_app_bar_rounded_edges_graph.py
new file mode 100644
index 0000000..7a5f18d
--- /dev/null
+++ b/ui/ui-material/src/test/bottom_app_bar_rounded_edges_graph.py
@@ -0,0 +1,63 @@
+import matplotlib.path as mpath
+import matplotlib.patches as mpatches
+import matplotlib.pyplot as plt
+import matplotlib.ticker as plticker
+
+Path = mpath.Path
+
+def draw_curve(ax, points, color, label):
+    ax.add_patch(quadratic_curve(points, color, label))
+    ax.add_patch(app_bar_line(points[0]))
+    # Add marker showing where the curve intercept is
+    ax.text(points[2][0], points[2][1], '{}, {}'.format(points[2][0], points[2][1]))
+
+def quadratic_curve(points, color, label):
+    return mpatches.PathPatch(
+        Path(points, [Path.MOVETO, Path.CURVE3, Path.CURVE3]),
+        fc='none',
+        ec=color,
+        transform=ax.transData,
+        linewidth=3,
+        label=label)
+
+def app_bar_line(curve_start):
+    line_start = (-9, curve_start[1])
+    return mpatches.PathPatch(
+        Path([line_start, curve_start], [Path.MOVETO, Path.LINETO]),
+        fc='none',
+        ec='black',
+        transform=ax.transData,
+        linewidth=3,
+        linestyle=':')
+
+fig, ax = plt.subplots()
+fig.set_figheight(20)
+fig.set_figwidth(20)
+ax.set_aspect('equal')
+ax.set_xlim([-9, 6])
+ax.set_ylim([-6, 7])
+
+# Set axes interval to be every 1
+locator = plticker.MultipleLocator(base=1.0)
+ax.xaxis.set_major_locator(locator)
+ax.yaxis.set_major_locator(locator)
+
+# Draw circle representing the cutout
+ax.add_artist(plt.Circle((0, 0), 5, color='grey', fill=False, linewidth=3, linestyle='--'))
+# Draw dot for circle origin
+ax.plot([0], [0], 'ok')
+
+# Points correspond to quadratic bezier curve points - curve start, control point, end point
+CENTER_CURVE_POINTS = [(-8, 0), (-6, 0), (-4.16, -2.76)]
+ABOVE_CURVE_OUTSIDE_RADIUS_POINTS = [(-7.33, 2.5), (-5.33, 2.5), (-4.96, -0.59)]
+ABVE_CURVE_INSIDE_RADIUS_POINTS = [(-5.18, 4.5), (-3.18, 4.5), (-4.33, 2.49)]
+BELOW_CURVE_POINTS = [(-7.33, -2.5), (-5.33, -2.5), (-2.72, -4.19)]
+
+draw_curve(ax, ABVE_CURVE_INSIDE_RADIUS_POINTS, 'orange', 'Above cutout, within cutout radius')
+draw_curve(ax, ABOVE_CURVE_OUTSIDE_RADIUS_POINTS, 'blue', 'Above cutout, outside cutout radius')
+draw_curve(ax, CENTER_CURVE_POINTS, 'red', 'Vertically aligned with cutout')
+draw_curve(ax, BELOW_CURVE_POINTS, 'green', 'Below cutout')
+
+# Show graph with legend using the labels
+ax.legend()
+plt.show()
diff --git a/ui/ui-material/src/test/java/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt b/ui/ui-material/src/test/java/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt
new file mode 100644
index 0000000..56773ca
--- /dev/null
+++ b/ui/ui-material/src/test/java/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt
@@ -0,0 +1,108 @@
+/*
+ * 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
+
+import com.google.common.truth.Truth
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+/**
+ * Test for [calculateRoundedEdgeIntercept] used in [BottomAppBar] to round the edges of a circular
+ * FAB cutout.
+ *
+ * In each scenario, we start with a circle with radius 5, origin 0,0 - coordinates returned are
+ * always relative to the center of the circle.
+ *
+ * See ui-material/src/test/bottom_app_bar_rounded_edges.png for what these calculated points
+ * represent. This is generated from ui-material/src/test/bottom_app_bar_rounded_edges_graph.py
+ *
+ * Note: on Android y = 0 is at the top of the screen, so positive values are lower down - as a
+ * result all the y values in this test are inverted from the graph representation.
+ */
+@RunWith(JUnit4::class)
+class BottomAppBarRoundedEdgesTest {
+    companion object {
+        const val RADIUS = 5f
+    }
+
+    @Test
+    fun bottomAppBar_roundedEdgeIntercept_appBarAlignedWithCutoutCenter() {
+        val verticalOffset = 0f
+
+        val controlPoint = calculateCutoutCircleYIntercept(RADIUS, verticalOffset) - 1f
+
+        val (calculatedX, calculatedY) =
+            calculateRoundedEdgeIntercept(controlPoint, verticalOffset, RADIUS)
+
+        val expectedX = -4.16f
+        val expectedY = 2.76f
+
+        Truth.assertThat(calculatedX).isWithin(0.01f).of(expectedX)
+        Truth.assertThat(calculatedY).isWithin(0.01f).of(expectedY)
+    }
+
+    @Test
+    fun bottomAppBar_roundedEdgeIntercept_appBarAboveCutoutCenter_controlPointOutsideRADIUS() {
+        // The top edge of the app bar is 2.5 above the circle's vertical center
+        val verticalOffset = -2.5f
+
+        val controlPoint = calculateCutoutCircleYIntercept(RADIUS, verticalOffset) - 1f
+
+        val (calculatedX, calculatedY) =
+            calculateRoundedEdgeIntercept(controlPoint, verticalOffset, RADIUS)
+
+        val expectedX = -4.96f
+        val expectedY = 0.59f
+
+        Truth.assertThat(calculatedX).isWithin(0.01f).of(expectedX)
+        Truth.assertThat(calculatedY).isWithin(0.01f).of(expectedY)
+    }
+
+    @Test
+    fun bottomAppBar_roundedEdgeIntercept_appBarAboveCutoutCenter_controlPointInsideRADIUS() {
+        // The top edge of the app bar is 4.5 above the circle's vertical center
+        val verticalOffset = -4.5f
+
+        val controlPoint = calculateCutoutCircleYIntercept(RADIUS, verticalOffset) - 1f
+
+        val (calculatedX, calculatedY) =
+            calculateRoundedEdgeIntercept(controlPoint, verticalOffset, RADIUS)
+
+        val expectedX = -4.33f
+        val expectedY = -2.49f
+
+        Truth.assertThat(calculatedX).isWithin(0.01f).of(expectedX)
+        Truth.assertThat(calculatedY).isWithin(0.01f).of(expectedY)
+    }
+
+    @Test
+    fun bottomAppBar_roundedEdgeIntercept_appBarBelowCutoutCenter() {
+        // The top edge of the app bar is 2.5 below the circle's vertical center
+        val verticalOffset = 2.5f
+
+        val controlPoint = calculateCutoutCircleYIntercept(RADIUS, verticalOffset) - 1f
+
+        val (calculatedX, calculatedY) =
+            calculateRoundedEdgeIntercept(controlPoint, verticalOffset, RADIUS)
+
+        val expectedX = -2.72f
+        val expectedY = 4.19f
+
+        Truth.assertThat(calculatedX).isWithin(0.01f).of(expectedX)
+        Truth.assertThat(calculatedY).isWithin(0.01f).of(expectedY)
+    }
+}
diff --git a/ui/ui-platform/api/0.1.0-dev01.txt b/ui/ui-platform/api/0.1.0-dev01.txt
index 422312c..4c3e09f 100644
--- a/ui/ui-platform/api/0.1.0-dev01.txt
+++ b/ui/ui-platform/api/0.1.0-dev01.txt
@@ -16,7 +16,7 @@
   public final class AndroidComposeView extends android.view.ViewGroup implements androidx.ui.core.DensityReceiver androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
     ctor public AndroidComposeView(android.content.Context context);
     method public androidx.ui.core.PxPosition calculatePosition();
-    method public void callDraw(androidx.ui.painting.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
+    method public void callDraw(androidx.ui.graphics.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
     method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
@@ -38,7 +38,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void sendEvent(android.view.MotionEvent event);
     method public void setCommitUnsubscribe(kotlin.jvm.functions.Function0<kotlin.Unit>? p);
     method public void setConfigurationChangeObserver(kotlin.jvm.functions.Function0<kotlin.Unit> p);
@@ -126,21 +125,20 @@
   public final class DrawNode extends androidx.ui.core.ComponentNode {
     ctor public DrawNode();
     method public boolean getNeedsPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
     method public void invalidate();
     method public void setNeedsPaint(boolean p);
-    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
-    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
     property public final boolean needsPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
   public final class LayoutNode extends androidx.ui.core.ComponentNode implements androidx.ui.core.Measurable androidx.ui.core.MeasureBlockScope {
     ctor public LayoutNode();
     method public boolean getAffectsParentSize();
-    method public java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> getAlignmentLines();
     method public boolean getAlignmentLinesRequired();
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.core.Density getDensity();
@@ -187,7 +185,6 @@
     method public void setPositionedDuringMeasurePass(boolean p);
     method public void setRef(androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? value);
     property public final boolean affectsParentSize;
-    property public final java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> alignmentLines;
     property public final boolean alignmentLinesRequired;
     property public final androidx.ui.core.Constraints constraints;
     property protected androidx.ui.core.LayoutNode? containingLayoutNode;
@@ -229,7 +226,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     property public abstract androidx.ui.core.Density density;
     property public abstract long measureIteration;
   }
diff --git a/ui/ui-platform/api/current.txt b/ui/ui-platform/api/current.txt
index 422312c..4c3e09f 100644
--- a/ui/ui-platform/api/current.txt
+++ b/ui/ui-platform/api/current.txt
@@ -16,7 +16,7 @@
   public final class AndroidComposeView extends android.view.ViewGroup implements androidx.ui.core.DensityReceiver androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
     ctor public AndroidComposeView(android.content.Context context);
     method public androidx.ui.core.PxPosition calculatePosition();
-    method public void callDraw(androidx.ui.painting.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
+    method public void callDraw(androidx.ui.graphics.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
     method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
@@ -38,7 +38,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void sendEvent(android.view.MotionEvent event);
     method public void setCommitUnsubscribe(kotlin.jvm.functions.Function0<kotlin.Unit>? p);
     method public void setConfigurationChangeObserver(kotlin.jvm.functions.Function0<kotlin.Unit> p);
@@ -126,21 +125,20 @@
   public final class DrawNode extends androidx.ui.core.ComponentNode {
     ctor public DrawNode();
     method public boolean getNeedsPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
     method public void invalidate();
     method public void setNeedsPaint(boolean p);
-    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
-    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
     property public final boolean needsPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
   public final class LayoutNode extends androidx.ui.core.ComponentNode implements androidx.ui.core.Measurable androidx.ui.core.MeasureBlockScope {
     ctor public LayoutNode();
     method public boolean getAffectsParentSize();
-    method public java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> getAlignmentLines();
     method public boolean getAlignmentLinesRequired();
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.core.Density getDensity();
@@ -187,7 +185,6 @@
     method public void setPositionedDuringMeasurePass(boolean p);
     method public void setRef(androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? value);
     property public final boolean affectsParentSize;
-    property public final java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> alignmentLines;
     property public final boolean alignmentLinesRequired;
     property public final androidx.ui.core.Constraints constraints;
     property protected androidx.ui.core.LayoutNode? containingLayoutNode;
@@ -229,7 +226,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     property public abstract androidx.ui.core.Density density;
     property public abstract long measureIteration;
   }
diff --git a/ui/ui-platform/api/public_plus_experimental_0.1.0-dev01.txt b/ui/ui-platform/api/public_plus_experimental_0.1.0-dev01.txt
index 422312c..4c3e09f 100644
--- a/ui/ui-platform/api/public_plus_experimental_0.1.0-dev01.txt
+++ b/ui/ui-platform/api/public_plus_experimental_0.1.0-dev01.txt
@@ -16,7 +16,7 @@
   public final class AndroidComposeView extends android.view.ViewGroup implements androidx.ui.core.DensityReceiver androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
     ctor public AndroidComposeView(android.content.Context context);
     method public androidx.ui.core.PxPosition calculatePosition();
-    method public void callDraw(androidx.ui.painting.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
+    method public void callDraw(androidx.ui.graphics.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
     method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
@@ -38,7 +38,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void sendEvent(android.view.MotionEvent event);
     method public void setCommitUnsubscribe(kotlin.jvm.functions.Function0<kotlin.Unit>? p);
     method public void setConfigurationChangeObserver(kotlin.jvm.functions.Function0<kotlin.Unit> p);
@@ -126,21 +125,20 @@
   public final class DrawNode extends androidx.ui.core.ComponentNode {
     ctor public DrawNode();
     method public boolean getNeedsPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
     method public void invalidate();
     method public void setNeedsPaint(boolean p);
-    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
-    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
     property public final boolean needsPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
   public final class LayoutNode extends androidx.ui.core.ComponentNode implements androidx.ui.core.Measurable androidx.ui.core.MeasureBlockScope {
     ctor public LayoutNode();
     method public boolean getAffectsParentSize();
-    method public java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> getAlignmentLines();
     method public boolean getAlignmentLinesRequired();
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.core.Density getDensity();
@@ -187,7 +185,6 @@
     method public void setPositionedDuringMeasurePass(boolean p);
     method public void setRef(androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? value);
     property public final boolean affectsParentSize;
-    property public final java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> alignmentLines;
     property public final boolean alignmentLinesRequired;
     property public final androidx.ui.core.Constraints constraints;
     property protected androidx.ui.core.LayoutNode? containingLayoutNode;
@@ -229,7 +226,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     property public abstract androidx.ui.core.Density density;
     property public abstract long measureIteration;
   }
diff --git a/ui/ui-platform/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-platform/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..6571ce8
--- /dev/null
+++ b/ui/ui-platform/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,465 @@
+// Signature format: 3.0
+package androidx.ui.autofill {
+
+  public final class AndroidAutofillDebugUtilsKt {
+    ctor public AndroidAutofillDebugUtilsKt();
+  }
+
+  public final class AndroidAutofillKt {
+    ctor public AndroidAutofillKt();
+  }
+
+}
+
+package androidx.ui.core {
+
+  public final class AndroidCraneView extends android.view.ViewGroup implements androidx.ui.core.DensityReceiver androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
+    ctor public AndroidCraneView(android.content.Context context);
+    method public androidx.ui.core.PxPosition calculatePosition();
+    method public void callDraw(androidx.ui.painting.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
+    method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
+    method public androidx.ui.autofill.Autofill? getAutofill();
+    method public androidx.ui.autofill.AutofillTree getAutofillTree();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit>? getCommitUnsubscribe();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit> getConfigurationChangeObserver();
+    method public androidx.ui.core.Constraints getConstraints();
+    method public androidx.ui.core.Density getDensity();
+    method public long getMeasureIteration();
+    method public androidx.ui.core.Ref<androidx.ui.core.AndroidCraneView>? getRef();
+    method public androidx.ui.core.LayoutNode getRoot();
+    method public void onAttach(androidx.ui.core.ComponentNode node);
+    method public void onDetach(androidx.ui.core.ComponentNode node);
+    method public void onEndLayout(androidx.ui.core.LayoutNode layoutNode);
+    method public void onEndMeasure(androidx.ui.core.LayoutNode layoutNode);
+    method public void onInvalidate(androidx.ui.core.DrawNode drawNode);
+    method public void onPositionChange(androidx.ui.core.LayoutNode layoutNode);
+    method public void onRepaintBoundaryParamsChange(androidx.ui.core.RepaintBoundaryNode repaintBoundaryNode);
+    method public void onRequestMeasure(androidx.ui.core.LayoutNode layoutNode);
+    method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
+    method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
+    method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
+    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public void sendEvent(android.view.MotionEvent event);
+    method public void setCommitUnsubscribe(kotlin.jvm.functions.Function0<kotlin.Unit>? p);
+    method public void setConfigurationChangeObserver(kotlin.jvm.functions.Function0<kotlin.Unit> p);
+    method public void setConstraints(androidx.ui.core.Constraints p);
+    method public void setRef(androidx.ui.core.Ref<androidx.ui.core.AndroidCraneView>? value);
+    property public final androidx.ui.autofill.Autofill? autofill;
+    property public final androidx.ui.autofill.AutofillTree autofillTree;
+    property public final kotlin.jvm.functions.Function0<kotlin.Unit>? commitUnsubscribe;
+    property public final kotlin.jvm.functions.Function0<kotlin.Unit> configurationChangeObserver;
+    property public final androidx.ui.core.Constraints constraints;
+    property public androidx.ui.core.Density density;
+    property public long measureIteration;
+    property public final androidx.ui.core.Ref<androidx.ui.core.AndroidCraneView>? ref;
+    property public final androidx.ui.core.LayoutNode root;
+  }
+
+  public final class AndroidOwnerKt {
+    ctor public AndroidOwnerKt();
+  }
+
+  public abstract sealed class ComponentNode implements androidx.compose.Emittable {
+    method public void attach(androidx.ui.core.Owner owner);
+    method public void detach();
+    method public void emitInsertAt(int index, androidx.compose.Emittable instance);
+    method public void emitMove(int from, int to, int count);
+    method public void emitRemoveAt(int index, int count);
+    method public final operator androidx.ui.core.ComponentNode get(int index);
+    method protected androidx.ui.core.LayoutNode? getContainingLayoutNode();
+    method public final int getCount();
+    method public final int getDepth();
+    method public final androidx.ui.core.Owner? getOwner();
+    method public final Object? getOwnerData();
+    method public final androidx.ui.core.ComponentNode? getParent();
+    method public androidx.ui.core.LayoutNode? getParentLayoutNode();
+    method public androidx.ui.core.RepaintBoundaryNode? getRepaintBoundary();
+    method public final void setDepth(int p);
+    method public final void setOwnerData(Object? p);
+    method public final inline void visitChildren(kotlin.jvm.functions.Function1<? super androidx.ui.core.ComponentNode,kotlin.Unit> block);
+    method public final inline void visitChildrenReverse(kotlin.jvm.functions.Function1<? super androidx.ui.core.ComponentNode,kotlin.Unit> block);
+    property protected androidx.ui.core.LayoutNode? containingLayoutNode;
+    property public final int count;
+    property public final int depth;
+    property public final androidx.ui.core.Owner? owner;
+    property public final Object? ownerData;
+    property public final androidx.ui.core.ComponentNode? parent;
+    property public androidx.ui.core.LayoutNode? parentLayoutNode;
+    property public androidx.ui.core.RepaintBoundaryNode? repaintBoundary;
+  }
+
+  public final class ComponentNodesKt {
+    ctor public ComponentNodesKt();
+    method public static void add(androidx.ui.core.ComponentNode, androidx.ui.core.ComponentNode child);
+    method public static androidx.ui.core.PxPosition childToLocal(androidx.ui.core.LayoutNode, androidx.ui.core.LayoutNode child, androidx.ui.core.PxPosition childLocal);
+    method public static androidx.ui.core.LayoutNode? findLastLayoutChild(androidx.ui.core.ComponentNode, kotlin.jvm.functions.Function1<? super androidx.ui.core.LayoutNode,java.lang.Boolean> block);
+    method public static androidx.ui.core.DataNodeKey<kotlin.jvm.functions.Function1<androidx.ui.core.LayoutCoordinates,kotlin.Unit>> getOnChildPositionedKey();
+    method public static androidx.ui.core.DataNodeKey<kotlin.jvm.functions.Function1<androidx.ui.core.LayoutCoordinates,kotlin.Unit>> getOnPositionedKey();
+    method public static androidx.ui.core.DataNodeKey<java.lang.Object> getParentDataKey();
+    method public static androidx.ui.core.PxPosition globalToLocal(androidx.ui.core.LayoutNode, androidx.ui.core.PxPosition global, boolean withOwnerOffset = true);
+    method public static boolean hasNoLayoutDescendants(androidx.ui.core.ComponentNode);
+    method public static boolean isAttached(androidx.ui.core.ComponentNode);
+    method public static androidx.ui.core.PxPosition localToGlobal(androidx.ui.core.LayoutNode, androidx.ui.core.PxPosition local, boolean withOwnerOffset = true);
+    method public static androidx.ui.core.PxPosition positionRelativeToAncestor(androidx.ui.core.LayoutNode, androidx.ui.core.LayoutNode ancestor);
+    method public static androidx.ui.core.PxPosition positionRelativeToRoot(androidx.ui.core.LayoutNode);
+    method public static androidx.ui.core.Owner requireOwner(androidx.ui.core.ComponentNode);
+    method public static void visitLayoutChildren(androidx.ui.core.ComponentNode, kotlin.jvm.functions.Function1<? super androidx.ui.core.LayoutNode,kotlin.Unit> block);
+  }
+
+  public final class DataNode<T> extends androidx.ui.core.ComponentNode {
+    ctor public DataNode(androidx.ui.core.DataNodeKey<T> key, T! value);
+    method public androidx.ui.core.DataNodeKey<T> getKey();
+    method public T! getValue();
+    method public void setValue(T? p);
+  }
+
+  public final class DataNodeKey<T> {
+    ctor public DataNodeKey(String name);
+    method public String getName();
+  }
+
+  public final class DebugUtilsKt {
+    ctor public DebugUtilsKt();
+    method public static inline void ifDebug(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public final class DrawNode extends androidx.ui.core.ComponentNode {
+    ctor public DrawNode();
+    method public boolean getNeedsPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
+    method public void invalidate();
+    method public void setNeedsPaint(boolean p);
+    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    property public final boolean needsPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
+  }
+
+  public final class LayoutNode extends androidx.ui.core.ComponentNode implements androidx.ui.core.Measurable androidx.ui.core.MeasureBlockScope {
+    ctor public LayoutNode();
+    method public boolean getAffectsParentSize();
+    method public boolean getAlignmentLinesRequired();
+    method public androidx.ui.core.Constraints getConstraints();
+    method public androidx.ui.core.Density getDensity();
+    method public boolean getDirtyAlignmentLines();
+    method public androidx.ui.core.IntPx getHeight();
+    method public java.util.List<androidx.ui.core.LayoutNode> getLayoutChildren();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> getMaxIntrinsicHeightBlock();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> getMaxIntrinsicWidthBlock();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.MeasureBlockScope,java.util.List<? extends androidx.ui.core.Measurable>,androidx.ui.core.Constraints,androidx.ui.core.LayoutResult> getMeasureBlock();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> getMinIntrinsicHeightBlock();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> getMinIntrinsicWidthBlock();
+    method public boolean getNeedsRelayout();
+    method public boolean getNeedsRemeasure();
+    method public Object? getParentData();
+    method public androidx.ui.core.Placeable getPlaceable();
+    method public boolean getPositionedDuringMeasurePass();
+    method public androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? getRef();
+    method public boolean getVisible();
+    method public androidx.ui.core.IntPx getWidth();
+    method public androidx.ui.core.IntPx getX();
+    method public androidx.ui.core.IntPx getY();
+    method public boolean isInMeasure();
+    method public androidx.ui.core.LayoutResult layout(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height, kotlin.Pair<? extends androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx>![] alignmentLines, kotlin.jvm.functions.Function1<? super androidx.ui.core.PositioningBlockScope,kotlin.Unit> positioningBlock);
+    method public androidx.ui.core.IntPx maxIntrinsicHeight(androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx maxIntrinsicWidth(androidx.ui.core.IntPx height);
+    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints);
+    method public androidx.ui.core.IntPx minIntrinsicHeight(androidx.ui.core.IntPx width);
+    method public androidx.ui.core.IntPx minIntrinsicWidth(androidx.ui.core.IntPx height);
+    method public void place(androidx.ui.core.IntPx x, androidx.ui.core.IntPx y);
+    method public void placeChildren();
+    method public kotlin.Unit? requestRemeasure();
+    method public void setAffectsParentSize(boolean p);
+    method public void setAlignmentLinesRequired(boolean p);
+    method public void setConstraints(androidx.ui.core.Constraints p);
+    method public void setDirtyAlignmentLines(boolean p);
+    method public void setInMeasure(boolean p);
+    method public void setMaxIntrinsicHeightBlock(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> value);
+    method public void setMaxIntrinsicWidthBlock(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> value);
+    method public void setMeasureBlock(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureBlockScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,androidx.ui.core.LayoutResult> value);
+    method public void setMinIntrinsicHeightBlock(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> value);
+    method public void setMinIntrinsicWidthBlock(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> value);
+    method public void setNeedsRelayout$lintWithKotlin(boolean p);
+    method public void setNeedsRemeasure$lintWithKotlin(boolean p);
+    method public void setPositionedDuringMeasurePass(boolean p);
+    method public void setRef(androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? value);
+    property public final boolean affectsParentSize;
+    property public final boolean alignmentLinesRequired;
+    property public final androidx.ui.core.Constraints constraints;
+    property protected androidx.ui.core.LayoutNode? containingLayoutNode;
+    property public androidx.ui.core.Density density;
+    property public final boolean dirtyAlignmentLines;
+    property public final androidx.ui.core.IntPx height;
+    property public final boolean isInMeasure;
+    property public final java.util.List<androidx.ui.core.LayoutNode> layoutChildren;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicHeightBlock;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicWidthBlock;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.MeasureBlockScope,java.util.List<? extends androidx.ui.core.Measurable>,androidx.ui.core.Constraints,androidx.ui.core.LayoutResult> measureBlock;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> minIntrinsicHeightBlock;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,androidx.ui.core.IntPx,androidx.ui.core.IntPx> minIntrinsicWidthBlock;
+    property public final boolean needsRelayout;
+    property public final boolean needsRemeasure;
+    property public Object? parentData;
+    property public androidx.ui.core.LayoutNode? parentLayoutNode;
+    property public final androidx.ui.core.Placeable placeable;
+    property public final boolean positionedDuringMeasurePass;
+    property public final androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? ref;
+    property public final boolean visible;
+    property public final androidx.ui.core.IntPx width;
+    property public final androidx.ui.core.IntPx x;
+    property public final androidx.ui.core.IntPx y;
+  }
+
+  public interface Owner {
+    method public androidx.ui.core.PxPosition calculatePosition();
+    method public androidx.ui.core.Density getDensity();
+    method public long getMeasureIteration();
+    method public void onAttach(androidx.ui.core.ComponentNode node);
+    method public void onDetach(androidx.ui.core.ComponentNode node);
+    method public void onEndLayout(androidx.ui.core.LayoutNode layoutNode);
+    method public void onEndMeasure(androidx.ui.core.LayoutNode layoutNode);
+    method public void onInvalidate(androidx.ui.core.DrawNode drawNode);
+    method public void onPositionChange(androidx.ui.core.LayoutNode layoutNode);
+    method public void onRepaintBoundaryParamsChange(androidx.ui.core.RepaintBoundaryNode repaintBoundaryNode);
+    method public void onRequestMeasure(androidx.ui.core.LayoutNode layoutNode);
+    method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
+    method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
+    method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
+    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public abstract androidx.ui.core.Density density;
+    property public abstract long measureIteration;
+  }
+
+  public final class PointerInputNode extends androidx.ui.core.ComponentNode {
+    ctor public PointerInputNode();
+    method public kotlin.jvm.functions.Function2<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,java.util.List<androidx.ui.core.PointerInputChange>> getPointerInputHandler();
+    method public void setPointerInputHandler(kotlin.jvm.functions.Function2<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? extends java.util.List<androidx.ui.core.PointerInputChange>> p);
+    property public final kotlin.jvm.functions.Function2<java.util.List<androidx.ui.core.PointerInputChange>,androidx.ui.core.PointerEventPass,java.util.List<androidx.ui.core.PointerInputChange>> pointerInputHandler;
+  }
+
+  public final class Ref<T> {
+    ctor public Ref();
+    method public T? getValue();
+    method public void setValue(T? p);
+    property public final T? value;
+  }
+
+  public final class RepaintBoundaryNode extends androidx.ui.core.ComponentNode {
+    ctor public RepaintBoundaryNode(String? name);
+    method public boolean getClipToShape();
+    method public androidx.ui.core.Dp getElevation();
+    method public String? getName();
+    method public float getOpacity();
+    method public androidx.ui.engine.geometry.Shape? getShape();
+    method public void setClipToShape(boolean value);
+    method public void setElevation(androidx.ui.core.Dp value);
+    method public void setOpacity(float value);
+    method public void setShape(androidx.ui.engine.geometry.Shape? value);
+    property public final boolean clipToShape;
+    property public final androidx.ui.core.Dp elevation;
+    property public final float opacity;
+    property public androidx.ui.core.RepaintBoundaryNode? repaintBoundary;
+    property public final androidx.ui.engine.geometry.Shape? shape;
+  }
+
+  public final class SemanticsComponentNode extends androidx.ui.core.ComponentNode {
+    ctor public SemanticsComponentNode(androidx.ui.core.semantics.SemanticsConfiguration semanticsConfiguration, boolean container, boolean explicitChildNodes);
+    ctor public SemanticsComponentNode();
+    method public boolean getContainer();
+    method public boolean getExplicitChildNodes();
+    method public androidx.ui.core.semantics.SemanticsConfiguration getSemanticsConfiguration();
+    method public void setContainer(boolean p);
+    method public void setExplicitChildNodes(boolean p);
+    method public void setSemanticsConfiguration(androidx.ui.core.semantics.SemanticsConfiguration p);
+    property public final boolean container;
+    property public final boolean explicitChildNodes;
+    property public final androidx.ui.core.semantics.SemanticsConfiguration semanticsConfiguration;
+  }
+
+  public interface SemanticsTreeNode {
+    method public java.util.Set<androidx.ui.core.SemanticsTreeNode> getChildren();
+    method public androidx.ui.core.semantics.SemanticsConfiguration getData();
+    method public androidx.ui.core.PxPosition? getGlobalPosition();
+    method public androidx.ui.core.SemanticsTreeNode? getParent();
+    property public abstract java.util.Set<androidx.ui.core.SemanticsTreeNode> children;
+    property public abstract androidx.ui.core.semantics.SemanticsConfiguration data;
+    property public abstract androidx.ui.core.PxPosition? globalPosition;
+    property public abstract androidx.ui.core.SemanticsTreeNode? parent;
+  }
+
+  public final class SemanticsTreeNodeImpl implements androidx.ui.core.SemanticsTreeNode {
+    ctor public SemanticsTreeNodeImpl(androidx.ui.core.SemanticsTreeNode? parent, androidx.ui.core.SemanticsComponentNode semanticsComponentNode);
+    method public void addChild(androidx.ui.core.SemanticsTreeNode child);
+    method public java.util.Set<androidx.ui.core.SemanticsTreeNode> getChildren();
+    method public androidx.ui.core.semantics.SemanticsConfiguration getData();
+    method public androidx.ui.core.PxPosition? getGlobalPosition();
+    method public androidx.ui.core.SemanticsTreeNode? getParent();
+    property public java.util.Set<androidx.ui.core.SemanticsTreeNode> children;
+    property public androidx.ui.core.semantics.SemanticsConfiguration data;
+    property public androidx.ui.core.PxPosition? globalPosition;
+  }
+
+  public final class SemanticsTreeNodeImplKt {
+    ctor public SemanticsTreeNodeImplKt();
+  }
+
+  public interface SemanticsTreeProvider {
+    method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
+    method public void sendEvent(android.view.MotionEvent event);
+  }
+
+}
+
+package androidx.ui.core.input {
+
+  public final class RecordingInputConnectionKt {
+    ctor public RecordingInputConnectionKt();
+  }
+
+  public final class TextInputServiceAndroidKt {
+    ctor public TextInputServiceAndroidKt();
+  }
+
+}
+
+package androidx.ui.core.pointerinput {
+
+  public final class MotionEventAdapterKt {
+    ctor public MotionEventAdapterKt();
+  }
+
+  public final class PointerInputEventData {
+    ctor public PointerInputEventData(int id, androidx.ui.core.PointerInputData pointerInputData);
+    method public int component1();
+    method public androidx.ui.core.PointerInputData component2();
+    method public androidx.ui.core.pointerinput.PointerInputEventData copy(int id, androidx.ui.core.PointerInputData pointerInputData);
+    method public int getId();
+    method public androidx.ui.core.PointerInputData getPointerInputData();
+  }
+
+  public final class PointerInputEventProcessorKt {
+    ctor public PointerInputEventProcessorKt();
+  }
+
+}
+
+package androidx.ui.core.semantics {
+
+  public final class SemanticsConfiguration implements java.lang.Iterable<java.util.Map.Entry<? extends androidx.ui.semantics.SemanticsPropertyKey<?>,?>> kotlin.jvm.internal.markers.KMappedMarker androidx.ui.semantics.SemanticsPropertyReceiver {
+    ctor public SemanticsConfiguration();
+    method public operator <T> boolean contains(androidx.ui.semantics.SemanticsPropertyKey<T> key);
+    method public androidx.ui.core.semantics.SemanticsConfiguration copy();
+    method public operator <T> T! get(androidx.ui.semantics.SemanticsPropertyKey<T> key);
+    method public boolean getExplicitChildNodes();
+    method public boolean getHasBeenAnnotated();
+    method public <T> T! getOrElse(androidx.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public <T> T? getOrElseNullable(androidx.ui.semantics.SemanticsPropertyKey<T> key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public boolean isMergingSemanticsOfDescendants();
+    method public boolean isSemanticBoundary();
+    method public java.util.Iterator<java.util.Map.Entry<androidx.ui.semantics.SemanticsPropertyKey<?>,java.lang.Object>> iterator();
+    method public <T> void set(androidx.ui.semantics.SemanticsPropertyKey<T> key, T? value);
+    method public void setExplicitChildNodes(boolean p);
+    method public void setMergingSemanticsOfDescendants(boolean value);
+    method public void setSemanticBoundary(boolean value);
+    property public final boolean explicitChildNodes;
+    property public final boolean hasBeenAnnotated;
+    property public final boolean isMergingSemanticsOfDescendants;
+    property public final boolean isSemanticBoundary;
+  }
+
+  public final class SemanticsConfigurationKt {
+    ctor public SemanticsConfigurationKt();
+    method public static <T> T? getOrNull(androidx.ui.core.semantics.SemanticsConfiguration, androidx.ui.semantics.SemanticsPropertyKey<T> key);
+  }
+
+  public final class SemanticsHintOverrides {
+    ctor public SemanticsHintOverrides(String? onTapHint, String? onLongPressHint);
+    method public String? component1();
+    method public String? component2();
+    method public androidx.ui.core.semantics.SemanticsHintOverrides copy(String? onTapHint, String? onLongPressHint);
+    method public String? getOnLongPressHint();
+    method public String? getOnTapHint();
+    method public boolean isNotEmpty();
+    property public final boolean isNotEmpty;
+  }
+
+  public final class SemanticsNode {
+    ctor public SemanticsNode();
+    method public boolean getAttached();
+    method public java.util.List<androidx.ui.core.semantics.SemanticsNode> getChildren();
+    method public int getChildrenCount();
+    method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
+    method public int getDepth();
+    method public boolean getHasChildren();
+    method public int getId();
+    method public boolean getMergeAllDescendantsIntoThisNode();
+    method public androidx.ui.core.semantics.SemanticsOwner? getOwner();
+    method public androidx.ui.core.semantics.SemanticsNode? getParent();
+    method public androidx.ui.engine.geometry.Rect? getParentPaintClipRect();
+    method public androidx.ui.engine.geometry.Rect? getParentSemanticsClipRect();
+    method public androidx.ui.engine.geometry.Rect getRect();
+    method public boolean isInvisible();
+    method public boolean isMergedIntoParent();
+    method public boolean isPartOfNodeMerging();
+    method public void redepthChild(androidx.ui.core.semantics.SemanticsNode child);
+    method public void redepthChildren();
+    method public void setChildren(java.util.List<androidx.ui.core.semantics.SemanticsNode> p);
+    method public void setMergedIntoParent(boolean value);
+    method public void setParent(androidx.ui.core.semantics.SemanticsNode? p);
+    method public void setParentPaintClipRect(androidx.ui.engine.geometry.Rect? p);
+    method public void setParentSemanticsClipRect(androidx.ui.engine.geometry.Rect? p);
+    method public void setRect(androidx.ui.engine.geometry.Rect value);
+    property public final boolean attached;
+    property public final java.util.List<androidx.ui.core.semantics.SemanticsNode> children;
+    property public final int childrenCount;
+    property public final androidx.ui.core.semantics.SemanticsConfiguration config;
+    property public final int depth;
+    property public final boolean hasChildren;
+    property public final boolean isInvisible;
+    property public final boolean isMergedIntoParent;
+    property public final boolean isPartOfNodeMerging;
+    property public final boolean mergeAllDescendantsIntoThisNode;
+    property public final androidx.ui.core.semantics.SemanticsOwner? owner;
+    property public final androidx.ui.core.semantics.SemanticsNode? parent;
+    property public final androidx.ui.engine.geometry.Rect? parentPaintClipRect;
+    property public final androidx.ui.engine.geometry.Rect? parentSemanticsClipRect;
+    property public final androidx.ui.engine.geometry.Rect rect;
+    field public static final androidx.ui.core.semantics.SemanticsNode.Companion! Companion;
+  }
+
+  public static final class SemanticsNode.Companion {
+    method public androidx.ui.core.semantics.SemanticsNode root(androidx.ui.core.semantics.SemanticsOwner owner);
+  }
+
+  public final class SemanticsNodeKt {
+    ctor public SemanticsNodeKt();
+  }
+
+  public final class SemanticsOwner {
+    ctor public SemanticsOwner();
+  }
+
+}
+
+package androidx.ui.internal {
+
+  public final class Unicode {
+    field public static final String ALM = "\u061c";
+    field public static final String FSI = "\u2068";
+    field public static final androidx.ui.internal.Unicode! INSTANCE;
+    field public static final String LRE = "\u202a";
+    field public static final String LRI = "\u2066";
+    field public static final String LRM = "\u200e";
+    field public static final String LRO = "\u202d";
+    field public static final String PDF = "\u202c";
+    field public static final String PDI = "\u2069";
+    field public static final String RLE = "\u202b";
+    field public static final String RLI = "\u2067";
+    field public static final String RLM = "\u200f";
+    field public static final String RLO = "\u202e";
+  }
+
+}
+
diff --git a/ui/ui-platform/api/public_plus_experimental_current.txt b/ui/ui-platform/api/public_plus_experimental_current.txt
index 422312c..4c3e09f 100644
--- a/ui/ui-platform/api/public_plus_experimental_current.txt
+++ b/ui/ui-platform/api/public_plus_experimental_current.txt
@@ -16,7 +16,7 @@
   public final class AndroidComposeView extends android.view.ViewGroup implements androidx.ui.core.DensityReceiver androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
     ctor public AndroidComposeView(android.content.Context context);
     method public androidx.ui.core.PxPosition calculatePosition();
-    method public void callDraw(androidx.ui.painting.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
+    method public void callDraw(androidx.ui.graphics.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
     method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
@@ -38,7 +38,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void sendEvent(android.view.MotionEvent event);
     method public void setCommitUnsubscribe(kotlin.jvm.functions.Function0<kotlin.Unit>? p);
     method public void setConfigurationChangeObserver(kotlin.jvm.functions.Function0<kotlin.Unit> p);
@@ -126,21 +125,20 @@
   public final class DrawNode extends androidx.ui.core.ComponentNode {
     ctor public DrawNode();
     method public boolean getNeedsPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
     method public void invalidate();
     method public void setNeedsPaint(boolean p);
-    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
-    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
     property public final boolean needsPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
   public final class LayoutNode extends androidx.ui.core.ComponentNode implements androidx.ui.core.Measurable androidx.ui.core.MeasureBlockScope {
     ctor public LayoutNode();
     method public boolean getAffectsParentSize();
-    method public java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> getAlignmentLines();
     method public boolean getAlignmentLinesRequired();
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.core.Density getDensity();
@@ -187,7 +185,6 @@
     method public void setPositionedDuringMeasurePass(boolean p);
     method public void setRef(androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? value);
     property public final boolean affectsParentSize;
-    property public final java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> alignmentLines;
     property public final boolean alignmentLinesRequired;
     property public final androidx.ui.core.Constraints constraints;
     property protected androidx.ui.core.LayoutNode? containingLayoutNode;
@@ -229,7 +226,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     property public abstract androidx.ui.core.Density density;
     property public abstract long measureIteration;
   }
diff --git a/ui/ui-platform/api/restricted_0.1.0-dev01.txt b/ui/ui-platform/api/restricted_0.1.0-dev01.txt
index 4cbfa18..37f1c90 100644
--- a/ui/ui-platform/api/restricted_0.1.0-dev01.txt
+++ b/ui/ui-platform/api/restricted_0.1.0-dev01.txt
@@ -16,7 +16,7 @@
   public final class AndroidComposeView extends android.view.ViewGroup implements androidx.ui.core.DensityReceiver androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
     ctor public AndroidComposeView(android.content.Context context);
     method public androidx.ui.core.PxPosition calculatePosition();
-    method public void callDraw(androidx.ui.painting.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
+    method public void callDraw(androidx.ui.graphics.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
     method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
@@ -38,7 +38,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void sendEvent(android.view.MotionEvent event);
     method public void setCommitUnsubscribe(kotlin.jvm.functions.Function0<kotlin.Unit>? p);
     method public void setConfigurationChangeObserver(kotlin.jvm.functions.Function0<kotlin.Unit> p);
@@ -126,21 +125,20 @@
   public final class DrawNode extends androidx.ui.core.ComponentNode {
     ctor public DrawNode();
     method public boolean getNeedsPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
     method public void invalidate();
     method public void setNeedsPaint(boolean p);
-    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
-    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
     property public final boolean needsPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
   public final class LayoutNode extends androidx.ui.core.ComponentNode implements androidx.ui.core.Measurable androidx.ui.core.MeasureBlockScope {
     ctor public LayoutNode();
     method public boolean getAffectsParentSize();
-    method public java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> getAlignmentLines();
     method public boolean getAlignmentLinesRequired();
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.core.Density getDensity();
@@ -187,7 +185,6 @@
     method public void setPositionedDuringMeasurePass(boolean p);
     method public void setRef(androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? value);
     property public final boolean affectsParentSize;
-    property public final java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> alignmentLines;
     property public final boolean alignmentLinesRequired;
     property public final androidx.ui.core.Constraints constraints;
     property protected androidx.ui.core.LayoutNode? containingLayoutNode;
@@ -229,7 +226,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     property public abstract androidx.ui.core.Density density;
     property public abstract long measureIteration;
   }
diff --git a/ui/ui-platform/api/restricted_current.txt b/ui/ui-platform/api/restricted_current.txt
index 4cbfa18..37f1c90 100644
--- a/ui/ui-platform/api/restricted_current.txt
+++ b/ui/ui-platform/api/restricted_current.txt
@@ -16,7 +16,7 @@
   public final class AndroidComposeView extends android.view.ViewGroup implements androidx.ui.core.DensityReceiver androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
     ctor public AndroidComposeView(android.content.Context context);
     method public androidx.ui.core.PxPosition calculatePosition();
-    method public void callDraw(androidx.ui.painting.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
+    method public void callDraw(androidx.ui.graphics.Canvas canvas, androidx.ui.core.ComponentNode node, androidx.ui.core.PxSize parentSize);
     method public java.util.List<androidx.ui.core.SemanticsTreeNode> getAllSemanticNodes();
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
@@ -38,7 +38,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void sendEvent(android.view.MotionEvent event);
     method public void setCommitUnsubscribe(kotlin.jvm.functions.Function0<kotlin.Unit>? p);
     method public void setConfigurationChangeObserver(kotlin.jvm.functions.Function0<kotlin.Unit> p);
@@ -126,21 +125,20 @@
   public final class DrawNode extends androidx.ui.core.ComponentNode {
     ctor public DrawNode();
     method public boolean getNeedsPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
-    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaint();
+    method public kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? getOnPaintWithChildren();
     method public void invalidate();
     method public void setNeedsPaint(boolean p);
-    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
-    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaint(kotlin.jvm.functions.Function3<? super androidx.ui.core.DensityReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
+    method public void setOnPaintWithChildren(kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawReceiver,? super androidx.ui.graphics.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit>? value);
     property public final boolean needsPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
-    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.painting.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DensityReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaint;
+    property public final kotlin.jvm.functions.Function3<androidx.ui.core.DrawReceiver,androidx.ui.graphics.Canvas,androidx.ui.core.PxSize,kotlin.Unit>? onPaintWithChildren;
   }
 
   public final class LayoutNode extends androidx.ui.core.ComponentNode implements androidx.ui.core.Measurable androidx.ui.core.MeasureBlockScope {
     ctor public LayoutNode();
     method public boolean getAffectsParentSize();
-    method public java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> getAlignmentLines();
     method public boolean getAlignmentLinesRequired();
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.core.Density getDensity();
@@ -187,7 +185,6 @@
     method public void setPositionedDuringMeasurePass(boolean p);
     method public void setRef(androidx.ui.core.Ref<androidx.ui.core.LayoutNode>? value);
     property public final boolean affectsParentSize;
-    property public final java.util.Map<androidx.ui.core.AlignmentLine,androidx.ui.core.IntPx> alignmentLines;
     property public final boolean alignmentLinesRequired;
     property public final androidx.ui.core.Constraints constraints;
     property protected androidx.ui.core.LayoutNode? containingLayoutNode;
@@ -229,7 +226,6 @@
     method public void onSizeChange(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartLayout(androidx.ui.core.LayoutNode layoutNode);
     method public void onStartMeasure(androidx.ui.core.LayoutNode layoutNode);
-    method public void runAfterLayout(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     property public abstract androidx.ui.core.Density density;
     property public abstract long measureIteration;
   }
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt b/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
index 246810c..24d06ce 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
@@ -39,8 +39,8 @@
 import androidx.ui.core.pointerinput.toPointerInputEvent
 import androidx.ui.engine.geometry.Outline
 import androidx.ui.input.TextInputService
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Path
 import androidx.compose.frames.FrameCommitObserver
 import androidx.compose.frames.FrameReadObserver
 import androidx.compose.frames.currentFrame
@@ -81,9 +81,6 @@
     // Map from model to LayoutNodes that *only* need layout and not measure
     private val relayoutOnly = ObserverMap<Any, LayoutNode>()
 
-    // Blocks to execute after the layout pass ends.
-    private val afterLayout = mutableListOf<() -> Unit>()
-
     // Used by components that want to provide autofill semantic information.
     // TODO: Replace with SemanticsTree: Temporary hack until we have a semantics tree implemented.
     // TODO: Replace with SemanticsTree.
@@ -288,8 +285,14 @@
                 measureAndLayout()
             }
         }
-        layoutNode.needsRelayout = true
-        relayoutNodes += layoutNode
+        var layout = layoutNode
+        while (layout.alignmentLinesRequired && !layout.needsRelayout) {
+            layout.needsRelayout = true
+            if (layout.parentLayoutNode == null) break
+            layout = layout.parentLayoutNode!!
+        }
+        layout.needsRelayout = true
+        relayoutNodes += layout
     }
 
     override fun onAttach(node: ComponentNode) {
@@ -320,6 +323,7 @@
         trace("AndroidOwner:measureAndLayout") {
             measureIteration++
             val frame = currentFrame()
+            val topNode = relayoutNodes.firstOrNull()
             frame.observeReads(frameReadObserver) {
                 relayoutNodes.forEach { layoutNode ->
                     if (layoutNode.needsRemeasure) {
@@ -337,13 +341,14 @@
                         layoutNode.placeChildren()
                     }
                 }
-                repaintBoundaryChanges.forEach { node ->
-                    val parent = node.parentLayoutNode!!
-                    node.container.setSize(parent.width.value, parent.height.value)
-                }
-                relayoutNodes.clear()
-                repaintBoundaryChanges.clear()
             }
+            topNode?.dispatchOnPositionedCallbacks()
+            repaintBoundaryChanges.forEach { node ->
+                val parent = node.parentLayoutNode!!
+                node.container.setSize(parent.width.value, parent.height.value)
+            }
+            relayoutNodes.clear()
+            repaintBoundaryChanges.clear()
         }
     }
 
@@ -386,23 +391,9 @@
         currentNode = layoutNode
     }
 
-    override fun runAfterLayout(block: () -> Unit) {
-        afterLayout += block
-    }
-
     override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
-        trace("AndroidOwner:onLayout") {
-            val frame = currentFrame()
-            frame.observeReads(frameReadObserver) {
-                root.placeChildren()
-            }
-        }
+        relayoutNodes.add(root)
         measureAndLayout()
-
-        for (block in afterLayout) {
-            block()
-        }
-        afterLayout.clear()
     }
 
     override fun onDraw(canvas: android.graphics.Canvas) {
diff --git a/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt b/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
index 40f329f..34c8f49 100644
--- a/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
@@ -17,7 +17,7 @@
 
 import androidx.compose.Emittable
 import androidx.ui.core.semantics.SemanticsConfiguration
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.engine.geometry.Shape
 import kotlin.properties.ReadWriteProperty
 import kotlin.reflect.KProperty
@@ -90,12 +90,6 @@
     fun onEndLayout(layoutNode: LayoutNode)
 
     /**
-     * Queues a block to be ran at the end of the layout pass, after nodes
-     * have been positioned.
-     */
-    fun runAfterLayout(block: () -> Unit)
-
-    /**
      * Returns a position of the owner in its window.
      */
     fun calculatePosition(): PxPosition
@@ -455,9 +449,14 @@
         private set
 
     /**
-     * The alignment lines of this layout
+     * The alignment lines of this layout, inherited + intrinsic
      */
-    val alignmentLines: MutableMap<AlignmentLine, IntPx> = hashMapOf()
+    internal val alignmentLines: MutableMap<AlignmentLine, IntPx> = hashMapOf()
+
+    /**
+     * The alignment lines provided by this layout at the last measurement
+     */
+    internal val providedAlignmentLines: MutableMap<AlignmentLine, IntPx> = hashMapOf()
 
     /**
      * The horizontal position within the parent of this layout
@@ -608,6 +607,8 @@
         }
     }
 
+    internal val coordinates: LayoutCoordinates = LayoutNodeCoordinates(this)
+
     override fun attach(owner: Owner) {
         super.attach(owner)
         requestRemeasure()
@@ -678,45 +679,44 @@
     }
 
     fun placeChildren() {
-        if (!needsRelayout) return
+        if (needsRelayout) {
+            owner?.onStartLayout(this)
+            layoutChildren.forEach { child ->
+                child.visible = false
+                child.alignmentLinesRequired = alignmentLinesRequired
+                if (dirtyAlignmentLines) child.dirtyAlignmentLines = true
+            }
+            positionedDuringMeasurePass = parentLayoutNode?.isInMeasure ?: false ||
+                    parentLayoutNode?.positionedDuringMeasurePass ?: false
+            PositioningBlockScope.positioningBlock()
+            owner?.onEndLayout(this)
+            needsRelayout = false
 
-        owner?.onStartLayout(this)
-        layoutChildren.forEach { child ->
-            child.visible = false
-            child.alignmentLinesRequired = alignmentLinesRequired
-            if (dirtyAlignmentLines) child.dirtyAlignmentLines = true
-        }
-        positionedDuringMeasurePass = parentLayoutNode?.isInMeasure ?: false ||
-                parentLayoutNode?.positionedDuringMeasurePass ?: false
-        PositioningBlockScope.positioningBlock()
-        if (!positionedDuringMeasurePass) {
-            dispatchOnPositionedCallbacks()
-        } else {
-            // We need to dispatch OnPositioned callbacks only after all the
-            // ancestor layout nodes have been positioned.
-            owner?.runAfterLayout(dispatchOnPositionedCallbacks)
-        }
-        owner?.onEndLayout(this)
-        needsRelayout = false
-
-        if (!alignmentLinesRequired || !dirtyAlignmentLines) return
-        layoutChildren.forEach { child ->
-            if (!child.visible) return@forEach
-            child.alignmentLines.entries.forEach { (childLine, linePosition) ->
-                val linePositionInContainer = linePosition +
-                        if (childLine.horizontal) child.y else child.x
-                // If the line was already provided by a previous child, merge the two values.
-                alignmentLines[childLine] = if (childLine in alignmentLines) {
-                    childLine.merge(alignmentLines.getValue(childLine), linePositionInContainer)
-                } else {
-                    linePositionInContainer
+            if (alignmentLinesRequired && dirtyAlignmentLines) {
+                alignmentLines.clear()
+                layoutChildren.forEach { child ->
+                    if (!child.visible) return@forEach
+                    child.alignmentLines.entries.forEach { (childLine, linePosition) ->
+                        val linePositionInContainer = linePosition +
+                                if (childLine.horizontal) child.y else child.x
+                        // If the line was already provided by a previous child, merge the values.
+                        alignmentLines[childLine] = if (childLine in alignmentLines) {
+                            childLine.merge(
+                                alignmentLines.getValue(childLine),
+                                linePositionInContainer
+                            )
+                        } else {
+                            linePositionInContainer
+                        }
+                    }
                 }
+                alignmentLines += providedAlignmentLines
+                dirtyAlignmentLines = false
             }
         }
-        dirtyAlignmentLines = false
     }
 
-    internal fun calculateAlignmentLines() : Map<AlignmentLine, IntPx> {
+    internal fun calculateAlignmentLines(): Map<AlignmentLine, IntPx> {
         alignmentLinesRequired = true
         if (dirtyAlignmentLines) placeChildren()
         return alignmentLines
@@ -737,8 +737,8 @@
             this.height = height
             owner?.onSizeChange(this)
         }
-        this.alignmentLines.clear()
-        this.alignmentLines += alignmentLines
+        this.providedAlignmentLines.clear()
+        this.providedAlignmentLines += alignmentLines
         this.positioningBlock = positioningBlock
         return LayoutResult.Instance
     }
@@ -748,15 +748,12 @@
      */
     fun requestRemeasure() = owner?.onRequestMeasure(this)
 
-    private val dispatchOnPositionedCallbacks = {
+    internal fun dispatchOnPositionedCallbacks() {
         // There are two types of callbacks:
         // a) when the Layout is positioned - `onPositioned`
         // b) when the child of the Layout is positioned - `onChildPositioned`
-        // To create LayoutNodeCoordinates only once here we will call callbacks from
-        // both `onPositioned` and 'onChildPositioned'.
-        val coordinates = LayoutNodeCoordinates(this)
-        walkOnPosition(this, coordinates)
-        walkOnChildPositioned(this, coordinates)
+        walkOnPosition(this, this.coordinates)
+        walkOnChildPositioned(this, this.coordinates)
     }
 
     internal companion object {
@@ -769,6 +766,10 @@
                         method(coordinates)
                     }
                     walkOnPosition(child, coordinates)
+                } else {
+                    if (!child.needsRelayout) {
+                        child.dispatchOnPositionedCallbacks()
+                    }
                 }
             }
         }
@@ -1080,6 +1081,8 @@
 
     override val size get() = PxSize(layoutNode.width, layoutNode.height)
 
+    override val parentCoordinates get() = layoutNode.parentLayoutNode?.coordinates
+
     override fun globalToLocal(global: PxPosition) = layoutNode.globalToLocal(global)
 
     override fun localToGlobal(local: PxPosition) = layoutNode.localToGlobal(local)
@@ -1092,9 +1095,4 @@
         }
         return layoutNode.childToLocal(child.layoutNode, childLocal)
     }
-
-    override fun getParentCoordinates(): LayoutCoordinates? {
-        val parent = layoutNode.parentLayoutNode
-        return if (parent != null) LayoutNodeCoordinates(parent) else null
-    }
 }
diff --git a/ui/ui-test/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-test/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..03330ed
--- /dev/null
+++ b/ui/ui-test/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,144 @@
+// Signature format: 3.0
+package androidx.ui.test {
+
+  public final class ActionsKt {
+    ctor public ActionsKt();
+    method public static androidx.ui.test.SemanticsNodeInteraction doClick(androidx.ui.test.SemanticsNodeInteraction);
+    method public static boolean waitForIdleCompose();
+  }
+
+  public final class AssertionsKt {
+    ctor public AssertionsKt();
+    method public static java.util.List<androidx.ui.test.SemanticsNodeInteraction> assertCountEquals(java.util.List<androidx.ui.test.SemanticsNodeInteraction>, int count);
+    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 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);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertSemanticsIsEqualTo(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.core.semantics.SemanticsConfiguration expectedProperties);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertValueEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
+    method public static void verify(androidx.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.String> assertionMessage, kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> condition);
+  }
+
+  public final class CollectedSizes {
+    ctor public CollectedSizes(androidx.ui.core.PxSize size, androidx.ui.core.Density density);
+    method public androidx.ui.test.CollectedSizes assertHeightEqualsTo(androidx.ui.core.Dp expectedHeight);
+    method public androidx.ui.test.CollectedSizes assertHeightEqualsTo(kotlin.jvm.functions.Function1<? super androidx.ui.core.DensityReceiver,androidx.ui.core.IntPx> expectedHeightPx);
+    method public androidx.ui.test.CollectedSizes assertIsSquareWithSize(androidx.ui.core.Dp expectedSize);
+    method public androidx.ui.test.CollectedSizes assertIsSquareWithSize(kotlin.jvm.functions.Function1<? super androidx.ui.core.DensityReceiver,androidx.ui.core.IntPx> expectedSquarePx);
+    method public androidx.ui.test.CollectedSizes assertWidthEqualsTo(androidx.ui.core.Dp expectedWidth);
+    method public androidx.ui.test.CollectedSizes assertWidthEqualsTo(kotlin.jvm.functions.Function1<? super androidx.ui.core.DensityReceiver,androidx.ui.core.IntPx> expectedWidthPx);
+  }
+
+  public interface ComposeTestRule extends org.junit.rules.TestRule {
+    method public androidx.ui.core.Density getDensity();
+    method public android.util.DisplayMetrics getDisplayMetrics();
+    method public void runOnUiThread(kotlin.jvm.functions.Function0<kotlin.Unit> action);
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    property public abstract androidx.ui.core.Density density;
+    property public abstract android.util.DisplayMetrics displayMetrics;
+  }
+
+  public final class ComposeTestRuleKt {
+    ctor public ComposeTestRuleKt();
+    method public static androidx.ui.test.ComposeTestRule createComposeRule(boolean disableTransitions = false);
+  }
+
+  public final class DisableTransitions implements org.junit.rules.TestRule {
+    ctor public DisableTransitions();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
+  }
+
+  public final class DisableTransitions.DisableTransitionsStatement extends org.junit.runners.model.Statement {
+    ctor public DisableTransitions.DisableTransitionsStatement(org.junit.runners.model.Statement base);
+    method public void evaluate();
+  }
+
+  public final class FiltersKt {
+    ctor public FiltersKt();
+    method public static boolean getHasClickAction(androidx.ui.core.semantics.SemanticsConfiguration);
+    method public static boolean isInMutuallyExclusiveGroup(androidx.ui.core.semantics.SemanticsConfiguration);
+    method public static boolean isToggleable(androidx.ui.core.semantics.SemanticsConfiguration);
+  }
+
+  public final class FindersKt {
+    ctor public FindersKt();
+    method public static androidx.ui.test.SemanticsNodeInteraction find(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
+    method public static java.util.List<androidx.ui.test.SemanticsNodeInteraction> findAll(kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,java.lang.Boolean> selector);
+    method public static java.util.List<androidx.ui.test.SemanticsNodeInteraction> findAllByTag(String testTag);
+    method public static androidx.ui.test.SemanticsNodeInteraction findByTag(String testTag);
+    method public static androidx.ui.test.SemanticsNodeInteraction findByText(String text, boolean ignoreCase = false);
+  }
+
+  public final class GoldenSemanticsKt {
+    ctor public GoldenSemanticsKt();
+    method public static void assertEquals(androidx.ui.core.semantics.SemanticsConfiguration, androidx.ui.core.semantics.SemanticsConfiguration expected);
+    method public static androidx.ui.core.semantics.SemanticsConfiguration copyWith(androidx.ui.core.semantics.SemanticsConfiguration, kotlin.jvm.functions.Function1<? super androidx.ui.core.semantics.SemanticsConfiguration,kotlin.Unit> diff);
+    method public static androidx.ui.core.semantics.SemanticsConfiguration createFullSemantics(Boolean? isEnabled = null, String? value = null, androidx.ui.foundation.selection.ToggleableState? toggleableState = null, Boolean? inMutuallyExclusiveGroup = null, Boolean? isSelected = null);
+  }
+
+  public final class OutputKt {
+    ctor public OutputKt();
+    method public static void dumpSemantics(androidx.ui.test.SemanticsNodeInteraction, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> consumer);
+  }
+
+  public final class SemanticsNodeInteraction {
+  }
+
+  public final class SemanticsTreeInteractionKt {
+    ctor public SemanticsTreeInteractionKt();
+  }
+
+  public final class SizesTestingKt {
+    ctor public SizesTestingKt();
+    method public static androidx.ui.layout.DpConstraints getBigTestConstraints();
+    method public static androidx.ui.test.CollectedSizes setContentAndCollectSizes(androidx.ui.test.ComposeTestRule, androidx.ui.layout.DpConstraints parentConstraints = BigTestConstraints, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static androidx.ui.core.PxSize setContentAndGetPixelSize(androidx.ui.test.ComposeTestRule, androidx.ui.layout.DpConstraints parentConstraints = BigTestConstraints, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> performSetContent = { setContent(it) }, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+}
+
+package androidx.ui.test.android {
+
+  public final class AndroidComposeTestRule implements androidx.ui.test.ComposeTestRule {
+    ctor public AndroidComposeTestRule(boolean disableTransitions, boolean shouldThrowOnRecomposeTimeout);
+    ctor public AndroidComposeTestRule();
+    method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
+    method public androidx.test.rule.ActivityTestRule<androidx.ui.test.android.DefaultTestActivity> getActivityTestRule();
+    method public androidx.ui.core.Density getDensity();
+    method public android.util.DisplayMetrics getDisplayMetrics();
+    method public void runOnUiThread(kotlin.jvm.functions.Function0<kotlin.Unit> action);
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    property public final androidx.test.rule.ActivityTestRule<androidx.ui.test.android.DefaultTestActivity> activityTestRule;
+    property public androidx.ui.core.Density density;
+    property public android.util.DisplayMetrics displayMetrics;
+  }
+
+  public final class AndroidComposeTestRule.AndroidComposeStatement extends org.junit.runners.model.Statement {
+    ctor public AndroidComposeTestRule.AndroidComposeStatement(org.junit.runners.model.Statement base);
+    method public void evaluate();
+  }
+
+  public final class DefaultTestActivity extends android.app.Activity {
+    ctor public DefaultTestActivity();
+    method public java.util.concurrent.CountDownLatch getHasFocusLatch();
+    method public void setHasFocusLatch(java.util.concurrent.CountDownLatch p);
+    property public final java.util.concurrent.CountDownLatch hasFocusLatch;
+  }
+
+}
+
+package androidx.ui.test.android.fake {
+
+  public final class FakeViewStructureKt {
+    ctor public FakeViewStructureKt();
+  }
+
+}
+
diff --git a/ui/ui-text/api/0.1.0-dev01.txt b/ui/ui-text/api/0.1.0-dev01.txt
index 8040ae7..3e467093 100644
--- a/ui/ui-text/api/0.1.0-dev01.txt
+++ b/ui/ui-text/api/0.1.0-dev01.txt
@@ -161,11 +161,11 @@
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
     method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
-    method public androidx.ui.painting.Path getPathForRange(int start, int end);
+    method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public float getWidth();
     method public androidx.ui.text.TextRange getWordBoundary(int offset);
     method public void layout(androidx.ui.text.ParagraphConstraints constraints);
-    method public void paint(androidx.ui.painting.Canvas canvas);
+    method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
     property public abstract float height;
@@ -183,9 +183,22 @@
     method public float getWidth();
   }
 
+  public interface ParagraphIntrinsics {
+    method public float getMaxIntrinsicWidth();
+    method public float getMinIntrinsicWidth();
+    property public abstract float maxIntrinsicWidth;
+    property public abstract float minIntrinsicWidth;
+  }
+
+  public final class ParagraphIntrinsicsKt {
+    ctor public ParagraphIntrinsicsKt();
+    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+  }
+
   public final class ParagraphKt {
     ctor public ParagraphKt();
     method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, Integer? maxLines = null, Boolean? ellipsis = null);
   }
 
   public final class ParagraphStyle {
@@ -224,7 +237,7 @@
   }
 
   public final class TextStyle {
-    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     ctor public TextStyle();
     method public androidx.ui.graphics.Color? component1();
     method public androidx.ui.text.style.BaselineShift? component10();
@@ -232,7 +245,7 @@
     method public androidx.ui.text.LocaleList? component12();
     method public androidx.ui.graphics.Color? component13();
     method public androidx.ui.text.style.TextDecoration? component14();
-    method public androidx.ui.painting.Shadow? component15();
+    method public androidx.ui.graphics.Shadow? component15();
     method public androidx.ui.core.Sp? component2();
     method public Float? component3();
     method public androidx.ui.text.font.FontWeight? component4();
@@ -241,7 +254,7 @@
     method public androidx.ui.text.font.FontFamily? component7();
     method public String? component8();
     method public Float? component9();
-    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     method public androidx.ui.graphics.Color? getBackground();
     method public androidx.ui.text.style.BaselineShift? getBaselineShift();
     method public androidx.ui.graphics.Color? getColor();
@@ -255,7 +268,7 @@
     method public androidx.ui.text.font.FontWeight? getFontWeight();
     method public Float? getLetterSpacing();
     method public androidx.ui.text.LocaleList? getLocaleList();
-    method public androidx.ui.painting.Shadow? getShadow();
+    method public androidx.ui.graphics.Shadow? getShadow();
     method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
     method public void setFontFamily(androidx.ui.text.font.FontFamily? p);
@@ -382,6 +395,10 @@
 
 package androidx.ui.text.platform {
 
+  public final class AndroidParagraphHelperKt {
+    ctor public AndroidParagraphHelperKt();
+  }
+
   public final class AndroidParagraphKt {
     ctor public AndroidParagraphKt();
   }
diff --git a/ui/ui-text/api/api_lint.ignore b/ui/ui-text/api/api_lint.ignore
index 83e5587..075c474 100644
--- a/ui/ui-text/api/api_lint.ignore
+++ b/ui/ui-text/api/api_lint.ignore
@@ -1,6 +1,8 @@
 // Baseline format: 1.0
 AutoBoxing: androidx.ui.text.ParagraphKt#Paragraph(String, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>>, Integer, Boolean, androidx.ui.core.Density, androidx.ui.core.LayoutDirection, androidx.ui.text.font.Font.ResourceLoader) parameter #4:
     Must avoid boxed primitives (`java.lang.Integer`)
+AutoBoxing: androidx.ui.text.ParagraphKt#Paragraph(androidx.ui.text.ParagraphIntrinsics, Integer, Boolean) parameter #1:
+    Must avoid boxed primitives (`java.lang.Integer`)
 AutoBoxing: androidx.ui.text.ParagraphStyle#ParagraphStyle(androidx.ui.text.style.TextAlign, androidx.ui.text.style.TextDirectionAlgorithm, Float, androidx.ui.text.style.TextIndent) parameter #2:
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.ParagraphStyle#component3():
@@ -9,17 +11,17 @@
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.ParagraphStyle#getLineHeight():
     Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.TextStyle#TextStyle(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.painting.Shadow) parameter #2:
+AutoBoxing: androidx.ui.text.TextStyle#TextStyle(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.graphics.Shadow) parameter #2:
     Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.TextStyle#TextStyle(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.painting.Shadow) parameter #8:
+AutoBoxing: androidx.ui.text.TextStyle#TextStyle(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.graphics.Shadow) parameter #8:
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.TextStyle#component3():
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.TextStyle#component9():
     Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.TextStyle#copy(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.painting.Shadow) parameter #2:
+AutoBoxing: androidx.ui.text.TextStyle#copy(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.graphics.Shadow) parameter #2:
     Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.TextStyle#copy(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.painting.Shadow) parameter #8:
+AutoBoxing: androidx.ui.text.TextStyle#copy(androidx.ui.graphics.Color, androidx.ui.core.Sp, Float, androidx.ui.text.font.FontWeight, androidx.ui.text.font.FontStyle, androidx.ui.text.font.FontSynthesis, androidx.ui.text.font.FontFamily, String, Float, androidx.ui.text.style.BaselineShift, androidx.ui.text.style.TextGeometricTransform, androidx.ui.text.LocaleList, androidx.ui.graphics.Color, androidx.ui.text.style.TextDecoration, androidx.ui.graphics.Shadow) parameter #8:
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.TextStyle#getFontSizeScale():
     Must avoid boxed primitives (`java.lang.Float`)
diff --git a/ui/ui-text/api/current.txt b/ui/ui-text/api/current.txt
index 8040ae7..3e467093 100644
--- a/ui/ui-text/api/current.txt
+++ b/ui/ui-text/api/current.txt
@@ -161,11 +161,11 @@
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
     method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
-    method public androidx.ui.painting.Path getPathForRange(int start, int end);
+    method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public float getWidth();
     method public androidx.ui.text.TextRange getWordBoundary(int offset);
     method public void layout(androidx.ui.text.ParagraphConstraints constraints);
-    method public void paint(androidx.ui.painting.Canvas canvas);
+    method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
     property public abstract float height;
@@ -183,9 +183,22 @@
     method public float getWidth();
   }
 
+  public interface ParagraphIntrinsics {
+    method public float getMaxIntrinsicWidth();
+    method public float getMinIntrinsicWidth();
+    property public abstract float maxIntrinsicWidth;
+    property public abstract float minIntrinsicWidth;
+  }
+
+  public final class ParagraphIntrinsicsKt {
+    ctor public ParagraphIntrinsicsKt();
+    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+  }
+
   public final class ParagraphKt {
     ctor public ParagraphKt();
     method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, Integer? maxLines = null, Boolean? ellipsis = null);
   }
 
   public final class ParagraphStyle {
@@ -224,7 +237,7 @@
   }
 
   public final class TextStyle {
-    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     ctor public TextStyle();
     method public androidx.ui.graphics.Color? component1();
     method public androidx.ui.text.style.BaselineShift? component10();
@@ -232,7 +245,7 @@
     method public androidx.ui.text.LocaleList? component12();
     method public androidx.ui.graphics.Color? component13();
     method public androidx.ui.text.style.TextDecoration? component14();
-    method public androidx.ui.painting.Shadow? component15();
+    method public androidx.ui.graphics.Shadow? component15();
     method public androidx.ui.core.Sp? component2();
     method public Float? component3();
     method public androidx.ui.text.font.FontWeight? component4();
@@ -241,7 +254,7 @@
     method public androidx.ui.text.font.FontFamily? component7();
     method public String? component8();
     method public Float? component9();
-    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     method public androidx.ui.graphics.Color? getBackground();
     method public androidx.ui.text.style.BaselineShift? getBaselineShift();
     method public androidx.ui.graphics.Color? getColor();
@@ -255,7 +268,7 @@
     method public androidx.ui.text.font.FontWeight? getFontWeight();
     method public Float? getLetterSpacing();
     method public androidx.ui.text.LocaleList? getLocaleList();
-    method public androidx.ui.painting.Shadow? getShadow();
+    method public androidx.ui.graphics.Shadow? getShadow();
     method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
     method public void setFontFamily(androidx.ui.text.font.FontFamily? p);
@@ -382,6 +395,10 @@
 
 package androidx.ui.text.platform {
 
+  public final class AndroidParagraphHelperKt {
+    ctor public AndroidParagraphHelperKt();
+  }
+
   public final class AndroidParagraphKt {
     ctor public AndroidParagraphKt();
   }
diff --git a/ui/ui-text/api/public_plus_experimental_0.1.0-dev01.txt b/ui/ui-text/api/public_plus_experimental_0.1.0-dev01.txt
index 8040ae7..3e467093 100644
--- a/ui/ui-text/api/public_plus_experimental_0.1.0-dev01.txt
+++ b/ui/ui-text/api/public_plus_experimental_0.1.0-dev01.txt
@@ -161,11 +161,11 @@
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
     method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
-    method public androidx.ui.painting.Path getPathForRange(int start, int end);
+    method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public float getWidth();
     method public androidx.ui.text.TextRange getWordBoundary(int offset);
     method public void layout(androidx.ui.text.ParagraphConstraints constraints);
-    method public void paint(androidx.ui.painting.Canvas canvas);
+    method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
     property public abstract float height;
@@ -183,9 +183,22 @@
     method public float getWidth();
   }
 
+  public interface ParagraphIntrinsics {
+    method public float getMaxIntrinsicWidth();
+    method public float getMinIntrinsicWidth();
+    property public abstract float maxIntrinsicWidth;
+    property public abstract float minIntrinsicWidth;
+  }
+
+  public final class ParagraphIntrinsicsKt {
+    ctor public ParagraphIntrinsicsKt();
+    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+  }
+
   public final class ParagraphKt {
     ctor public ParagraphKt();
     method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, Integer? maxLines = null, Boolean? ellipsis = null);
   }
 
   public final class ParagraphStyle {
@@ -224,7 +237,7 @@
   }
 
   public final class TextStyle {
-    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     ctor public TextStyle();
     method public androidx.ui.graphics.Color? component1();
     method public androidx.ui.text.style.BaselineShift? component10();
@@ -232,7 +245,7 @@
     method public androidx.ui.text.LocaleList? component12();
     method public androidx.ui.graphics.Color? component13();
     method public androidx.ui.text.style.TextDecoration? component14();
-    method public androidx.ui.painting.Shadow? component15();
+    method public androidx.ui.graphics.Shadow? component15();
     method public androidx.ui.core.Sp? component2();
     method public Float? component3();
     method public androidx.ui.text.font.FontWeight? component4();
@@ -241,7 +254,7 @@
     method public androidx.ui.text.font.FontFamily? component7();
     method public String? component8();
     method public Float? component9();
-    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     method public androidx.ui.graphics.Color? getBackground();
     method public androidx.ui.text.style.BaselineShift? getBaselineShift();
     method public androidx.ui.graphics.Color? getColor();
@@ -255,7 +268,7 @@
     method public androidx.ui.text.font.FontWeight? getFontWeight();
     method public Float? getLetterSpacing();
     method public androidx.ui.text.LocaleList? getLocaleList();
-    method public androidx.ui.painting.Shadow? getShadow();
+    method public androidx.ui.graphics.Shadow? getShadow();
     method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
     method public void setFontFamily(androidx.ui.text.font.FontFamily? p);
@@ -382,6 +395,10 @@
 
 package androidx.ui.text.platform {
 
+  public final class AndroidParagraphHelperKt {
+    ctor public AndroidParagraphHelperKt();
+  }
+
   public final class AndroidParagraphKt {
     ctor public AndroidParagraphKt();
   }
diff --git a/ui/ui-text/api/public_plus_experimental_1.0.0-alpha01.txt b/ui/ui-text/api/public_plus_experimental_1.0.0-alpha01.txt
new file mode 100644
index 0000000..a724f78
--- /dev/null
+++ b/ui/ui-text/api/public_plus_experimental_1.0.0-alpha01.txt
@@ -0,0 +1,433 @@
+// Signature format: 3.0
+package androidx.ui.input {
+
+  public final class EditorModel {
+    ctor public EditorModel(String text, androidx.ui.text.TextRange selection);
+    method public androidx.ui.text.TextRange? getComposition();
+    method public androidx.ui.text.TextRange getSelection();
+    method public String getText();
+    property public final androidx.ui.text.TextRange? composition;
+    property public final androidx.ui.text.TextRange selection;
+    property public final String text;
+  }
+
+  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;
+    enum_constant public static final androidx.ui.input.ImeAction Next;
+    enum_constant public static final androidx.ui.input.ImeAction NoAction;
+    enum_constant public static final androidx.ui.input.ImeAction Previous;
+    enum_constant public static final androidx.ui.input.ImeAction Search;
+    enum_constant public static final androidx.ui.input.ImeAction Send;
+    enum_constant public static final androidx.ui.input.ImeAction Unspecified;
+  }
+
+  public enum KeyboardType {
+    enum_constant public static final androidx.ui.input.KeyboardType Ascii;
+    enum_constant public static final androidx.ui.input.KeyboardType Email;
+    enum_constant public static final androidx.ui.input.KeyboardType Number;
+    enum_constant public static final androidx.ui.input.KeyboardType NumberPassword;
+    enum_constant public static final androidx.ui.input.KeyboardType Password;
+    enum_constant public static final androidx.ui.input.KeyboardType Phone;
+    enum_constant public static final androidx.ui.input.KeyboardType Text;
+    enum_constant public static final androidx.ui.input.KeyboardType Uri;
+  }
+
+  public interface OffsetMap {
+    method public int originalToTransformed(int offset);
+    method public int transformedToOriginal(int offset);
+  }
+
+  public final class PasswordVisualTransformation implements androidx.ui.input.VisualTransformation {
+    ctor public PasswordVisualTransformation(char mask);
+    ctor public PasswordVisualTransformation();
+    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
+    method public char getMask();
+  }
+
+  public final class TransformedText {
+    ctor public TransformedText(androidx.ui.text.AnnotatedString transformedText, androidx.ui.input.OffsetMap offsetMap);
+    method public androidx.ui.text.AnnotatedString component1();
+    method public androidx.ui.input.OffsetMap component2();
+    method public androidx.ui.input.TransformedText copy(androidx.ui.text.AnnotatedString transformedText, androidx.ui.input.OffsetMap offsetMap);
+    method public androidx.ui.input.OffsetMap getOffsetMap();
+    method public androidx.ui.text.AnnotatedString getTransformedText();
+  }
+
+  public interface VisualTransformation {
+    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
+  }
+
+  public final class VisualTransformationKt {
+    ctor public VisualTransformationKt();
+  }
+
+}
+
+package androidx.ui.text {
+
+  public final class AnnotatedString {
+    ctor public AnnotatedString(String text, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    method public androidx.ui.text.AnnotatedString capitalize(java.util.Locale locale = Locale.getDefault());
+    method public String component1();
+    method public java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> component2();
+    method public java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.ParagraphStyle>> component3();
+    method public androidx.ui.text.AnnotatedString copy(String text, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    method public androidx.ui.text.AnnotatedString decapitalize(java.util.Locale locale = Locale.getDefault());
+    method public java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.ParagraphStyle>> getParagraphStyles();
+    method public String getText();
+    method public java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> getTextStyles();
+    method public androidx.ui.text.AnnotatedString toLowerCase(java.util.Locale locale = Locale.getDefault());
+    method public androidx.ui.text.AnnotatedString toUpperCase(java.util.Locale locale = Locale.getDefault());
+  }
+
+  public static final class AnnotatedString.Item<T> {
+    ctor public AnnotatedString.Item(T! style, int start, int end);
+    method public T! component1();
+    method public int component2();
+    method public int component3();
+    method public androidx.ui.text.AnnotatedString.Item<T> copy(T! style, int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public T! getStyle();
+  }
+
+  public final class MultiParagraphKt {
+    ctor public MultiParagraphKt();
+  }
+
+  public interface Paragraph {
+    method public androidx.ui.text.style.TextDirection getBidiRunDirection(int offset);
+    method public androidx.ui.engine.geometry.Rect getCursorRect(int offset);
+    method public boolean getDidExceedMaxLines();
+    method public float getFirstBaseline();
+    method public float getHeight();
+    method public float getLastBaseline();
+    method public int getLineCount();
+    method public float getLineHeight(int lineIndex);
+    method public float getLineLeft(int lineIndex);
+    method public float getLineRight(int lineIndex);
+    method public float getLineWidth(int lineIndex);
+    method public float getMaxIntrinsicWidth();
+    method public float getMinIntrinsicWidth();
+    method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
+    method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
+    method public androidx.ui.graphics.Path getPathForRange(int start, int end);
+    method public float getWidth();
+    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public void layout(androidx.ui.text.ParagraphConstraints constraints);
+    method public void paint(androidx.ui.graphics.Canvas canvas);
+    property public abstract boolean didExceedMaxLines;
+    property public abstract float firstBaseline;
+    property public abstract float height;
+    property public abstract float lastBaseline;
+    property public abstract int lineCount;
+    property public abstract float maxIntrinsicWidth;
+    property public abstract float minIntrinsicWidth;
+    property public abstract float width;
+  }
+
+  public final class ParagraphConstraints {
+    ctor public ParagraphConstraints(float width);
+    method public float component1();
+    method public androidx.ui.text.ParagraphConstraints copy(float width);
+    method public float getWidth();
+  }
+
+  public final class ParagraphKt {
+    ctor public ParagraphKt();
+    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+  }
+
+  public final class ParagraphStyle {
+    ctor public ParagraphStyle(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirectionAlgorithm? textDirectionAlgorithm, Float? lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    ctor public ParagraphStyle();
+    method public androidx.ui.text.style.TextAlign? component1();
+    method public androidx.ui.text.style.TextDirectionAlgorithm? component2();
+    method public Float? component3();
+    method public androidx.ui.text.style.TextIndent? component4();
+    method public androidx.ui.text.ParagraphStyle copy(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirectionAlgorithm? textDirectionAlgorithm, Float? lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public Float? getLineHeight();
+    method public androidx.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.ui.text.style.TextDirectionAlgorithm? getTextDirectionAlgorithm();
+    method public androidx.ui.text.style.TextIndent? getTextIndent();
+    method public androidx.ui.text.ParagraphStyle merge(androidx.ui.text.ParagraphStyle? other = null);
+  }
+
+  public final class TextDelegateKt {
+    ctor public TextDelegateKt();
+  }
+
+  public final class TextSpanKt {
+    ctor public TextSpanKt();
+  }
+
+  public final class TextStyle {
+    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, java.util.Locale? locale, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
+    ctor public TextStyle();
+    method public androidx.ui.graphics.Color? component1();
+    method public androidx.ui.text.style.BaselineShift? component10();
+    method public androidx.ui.text.style.TextGeometricTransform? component11();
+    method public java.util.Locale? component12();
+    method public androidx.ui.graphics.Color? component13();
+    method public androidx.ui.text.style.TextDecoration? component14();
+    method public androidx.ui.graphics.Shadow? component15();
+    method public androidx.ui.core.Sp? component2();
+    method public Float? component3();
+    method public androidx.ui.text.font.FontWeight? component4();
+    method public androidx.ui.text.font.FontStyle? component5();
+    method public androidx.ui.text.font.FontSynthesis? component6();
+    method public androidx.ui.text.font.FontFamily? component7();
+    method public String? component8();
+    method public Float? component9();
+    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, java.util.Locale? locale, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
+    method public androidx.ui.graphics.Color? getBackground();
+    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.ui.graphics.Color? getColor();
+    method public androidx.ui.text.style.TextDecoration? getDecoration();
+    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public String? getFontFeatureSettings();
+    method public androidx.ui.core.Sp? getFontSize();
+    method public Float? getFontSizeScale();
+    method public androidx.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.ui.text.font.FontWeight? getFontWeight();
+    method public Float? getLetterSpacing();
+    method public java.util.Locale? getLocale();
+    method public androidx.ui.graphics.Shadow? getShadow();
+    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
+    method public void setFontFamily(androidx.ui.text.font.FontFamily? p);
+  }
+
+}
+
+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);
+    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 String getName();
+    method public androidx.ui.text.font.FontStyle getStyle();
+    method public int getTtcIndex();
+    method public androidx.ui.text.font.FontWeight getWeight();
+  }
+
+  public static interface Font.ResourceLoader {
+    method public Object load(androidx.ui.text.font.Font font);
+  }
+
+  public final class FontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
+    ctor public FontFamily(String genericFamily);
+    ctor public FontFamily(androidx.ui.text.font.Font font);
+    ctor public FontFamily(java.util.List<androidx.ui.text.font.Font> fonts);
+    ctor public FontFamily(androidx.ui.text.font.Font... fonts);
+    method public String? component1();
+    method public java.util.List<androidx.ui.text.font.Font> component2();
+    method public boolean contains(androidx.ui.text.font.Font element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public androidx.ui.text.font.FontFamily copy(String? genericFamily, java.util.List<androidx.ui.text.font.Font> fonts);
+    method public androidx.ui.text.font.Font get(int index);
+    method public java.util.List<androidx.ui.text.font.Font> getFonts();
+    method public String? getGenericFamily();
+    method public int getSize();
+    method public int indexOf(androidx.ui.text.font.Font element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.ui.text.font.Font> iterator();
+    method public int lastIndexOf(androidx.ui.text.font.Font element);
+    method public java.util.ListIterator<androidx.ui.text.font.Font> listIterator();
+    method public java.util.ListIterator<androidx.ui.text.font.Font> listIterator(int index);
+    method public java.util.List<androidx.ui.text.font.Font> subList(int fromIndex, int toIndex);
+  }
+
+  public final class FontFamilyList implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.FontFamily> {
+    ctor public FontFamilyList(java.util.List<androidx.ui.text.font.FontFamily> fontFamilies);
+    ctor public FontFamilyList(androidx.ui.text.font.FontFamily fontFamily);
+    ctor public FontFamilyList(androidx.ui.text.font.FontFamily... fontFamily);
+    method public java.util.List<androidx.ui.text.font.FontFamily> component1();
+    method public boolean contains(androidx.ui.text.font.FontFamily element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public androidx.ui.text.font.FontFamilyList copy(java.util.List<androidx.ui.text.font.FontFamily> fontFamilies);
+    method public androidx.ui.text.font.FontFamily get(int index);
+    method public java.util.List<androidx.ui.text.font.FontFamily> getFontFamilies();
+    method public int getSize();
+    method public int indexOf(androidx.ui.text.font.FontFamily element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.ui.text.font.FontFamily> iterator();
+    method public int lastIndexOf(androidx.ui.text.font.FontFamily element);
+    method public java.util.ListIterator<androidx.ui.text.font.FontFamily> listIterator();
+    method public java.util.ListIterator<androidx.ui.text.font.FontFamily> listIterator(int index);
+    method public java.util.List<androidx.ui.text.font.FontFamily> subList(int fromIndex, int toIndex);
+  }
+
+  public final class FontKt {
+    ctor public FontKt();
+    method public static androidx.ui.text.font.FontFamily asFontFamily(androidx.ui.text.font.Font);
+  }
+
+  public enum FontStyle {
+    enum_constant public static final androidx.ui.text.font.FontStyle Italic;
+    enum_constant public static final androidx.ui.text.font.FontStyle Normal;
+  }
+
+  public enum FontSynthesis {
+    enum_constant public static final androidx.ui.text.font.FontSynthesis All;
+    enum_constant public static final androidx.ui.text.font.FontSynthesis None;
+    enum_constant public static final androidx.ui.text.font.FontSynthesis Style;
+    enum_constant public static final androidx.ui.text.font.FontSynthesis Weight;
+  }
+
+  public final class FontWeight implements java.lang.Comparable<androidx.ui.text.font.FontWeight> {
+    method public int compareTo(androidx.ui.text.font.FontWeight other);
+    method public androidx.ui.text.font.FontWeight copy(int weight);
+    field public static final androidx.ui.text.font.FontWeight.Companion! Companion;
+  }
+
+  public static final class FontWeight.Companion {
+    method public androidx.ui.text.font.FontWeight getBold();
+    method public androidx.ui.text.font.FontWeight getNormal();
+    method public java.util.List<androidx.ui.text.font.FontWeight> getValues();
+    method public androidx.ui.text.font.FontWeight getW100();
+    method public androidx.ui.text.font.FontWeight getW200();
+    method public androidx.ui.text.font.FontWeight getW300();
+    method public androidx.ui.text.font.FontWeight getW400();
+    method public androidx.ui.text.font.FontWeight getW500();
+    method public androidx.ui.text.font.FontWeight getW600();
+    method public androidx.ui.text.font.FontWeight getW700();
+    method public androidx.ui.text.font.FontWeight getW800();
+    method public androidx.ui.text.font.FontWeight getW900();
+    method public androidx.ui.text.font.FontWeight lerp(androidx.ui.text.font.FontWeight? a, androidx.ui.text.font.FontWeight? b, float t);
+    property public final androidx.ui.text.font.FontWeight bold;
+    property public final androidx.ui.text.font.FontWeight normal;
+    property public final java.util.List<androidx.ui.text.font.FontWeight> values;
+    property public final androidx.ui.text.font.FontWeight w100;
+    property public final androidx.ui.text.font.FontWeight w200;
+    property public final androidx.ui.text.font.FontWeight w300;
+    property public final androidx.ui.text.font.FontWeight w400;
+    property public final androidx.ui.text.font.FontWeight w500;
+    property public final androidx.ui.text.font.FontWeight w600;
+    property public final androidx.ui.text.font.FontWeight w700;
+    property public final androidx.ui.text.font.FontWeight w800;
+    property public final androidx.ui.text.font.FontWeight w900;
+  }
+
+}
+
+package androidx.ui.text.platform {
+
+  public final class AndroidParagraphKt {
+    ctor public AndroidParagraphKt();
+  }
+
+}
+
+package androidx.ui.text.style {
+
+  public final class BaselineShift {
+    ctor public BaselineShift(float multiplier);
+    method public float component1();
+    method public androidx.ui.text.style.BaselineShift copy(float multiplier);
+    method public float getMultiplier();
+    field public static final androidx.ui.text.style.BaselineShift.Companion! Companion;
+  }
+
+  public static final class BaselineShift.Companion {
+    method public androidx.ui.text.style.BaselineShift getSubscript();
+    method public androidx.ui.text.style.BaselineShift getSuperscript();
+    method public androidx.ui.text.style.BaselineShift? lerp(androidx.ui.text.style.BaselineShift? a, androidx.ui.text.style.BaselineShift? b, float t);
+    property public final androidx.ui.text.style.BaselineShift Subscript;
+    property public final androidx.ui.text.style.BaselineShift Superscript;
+  }
+
+  public enum TextAlign {
+    enum_constant public static final androidx.ui.text.style.TextAlign Center;
+    enum_constant public static final androidx.ui.text.style.TextAlign End;
+    enum_constant public static final androidx.ui.text.style.TextAlign Justify;
+    enum_constant public static final androidx.ui.text.style.TextAlign Left;
+    enum_constant public static final androidx.ui.text.style.TextAlign Right;
+    enum_constant public static final androidx.ui.text.style.TextAlign Start;
+  }
+
+  public final class TextDecoration {
+    method public int component1();
+    method public boolean contains(androidx.ui.text.style.TextDecoration other);
+    method public androidx.ui.text.style.TextDecoration copy(int mask);
+    method public int getMask();
+    field public static final androidx.ui.text.style.TextDecoration.Companion! Companion;
+  }
+
+  public static final class TextDecoration.Companion {
+    method public androidx.ui.text.style.TextDecoration combine(java.util.List<androidx.ui.text.style.TextDecoration> decorations);
+    method public androidx.ui.text.style.TextDecoration getLineThrough();
+    method public androidx.ui.text.style.TextDecoration getNone();
+    method public androidx.ui.text.style.TextDecoration getUnderline();
+    property public final androidx.ui.text.style.TextDecoration LineThrough;
+    property public final androidx.ui.text.style.TextDecoration None;
+    property public final androidx.ui.text.style.TextDecoration Underline;
+  }
+
+  public enum TextDirectionAlgorithm {
+    enum_constant public static final androidx.ui.text.style.TextDirectionAlgorithm ContentOrLtr;
+    enum_constant public static final androidx.ui.text.style.TextDirectionAlgorithm ContentOrRtl;
+    enum_constant public static final androidx.ui.text.style.TextDirectionAlgorithm ForceLtr;
+    enum_constant public static final androidx.ui.text.style.TextDirectionAlgorithm ForceRtl;
+  }
+
+  public final class TextGeometricTransform {
+    ctor public TextGeometricTransform(Float? scaleX, Float? skewX);
+    ctor public TextGeometricTransform();
+    method public Float? component1();
+    method public Float? component2();
+    method public androidx.ui.text.style.TextGeometricTransform copy(Float? scaleX, Float? skewX);
+    method public Float? getScaleX();
+    method public Float? getSkewX();
+    field public static final androidx.ui.text.style.TextGeometricTransform.Companion! Companion;
+  }
+
+  public static final class TextGeometricTransform.Companion {
+  }
+
+  public final class TextGeometricTransformKt {
+    ctor public TextGeometricTransformKt();
+    method public static androidx.ui.text.style.TextGeometricTransform lerp(androidx.ui.text.style.TextGeometricTransform a, androidx.ui.text.style.TextGeometricTransform b, float t);
+  }
+
+  public final class TextIndent {
+    ctor public TextIndent(androidx.ui.core.Px firstLine, androidx.ui.core.Px restLine);
+    ctor public TextIndent();
+    method public androidx.ui.core.Px component1();
+    method public androidx.ui.core.Px component2();
+    method public androidx.ui.text.style.TextIndent copy(androidx.ui.core.Px firstLine, androidx.ui.core.Px restLine);
+    method public androidx.ui.core.Px getFirstLine();
+    method public androidx.ui.core.Px getRestLine();
+  }
+
+  public final class TextIndentKt {
+    ctor public TextIndentKt();
+    method public static androidx.ui.text.style.TextIndent lerp(androidx.ui.text.style.TextIndent a, androidx.ui.text.style.TextIndent b, float t);
+  }
+
+  public enum TextOverflow {
+    enum_constant public static final androidx.ui.text.style.TextOverflow Clip;
+    enum_constant public static final androidx.ui.text.style.TextOverflow Ellipsis;
+    enum_constant public static final androidx.ui.text.style.TextOverflow Fade;
+  }
+
+}
+
diff --git a/ui/ui-text/api/public_plus_experimental_current.txt b/ui/ui-text/api/public_plus_experimental_current.txt
index 8040ae7..3e467093 100644
--- a/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/ui/ui-text/api/public_plus_experimental_current.txt
@@ -161,11 +161,11 @@
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
     method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
-    method public androidx.ui.painting.Path getPathForRange(int start, int end);
+    method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public float getWidth();
     method public androidx.ui.text.TextRange getWordBoundary(int offset);
     method public void layout(androidx.ui.text.ParagraphConstraints constraints);
-    method public void paint(androidx.ui.painting.Canvas canvas);
+    method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
     property public abstract float height;
@@ -183,9 +183,22 @@
     method public float getWidth();
   }
 
+  public interface ParagraphIntrinsics {
+    method public float getMaxIntrinsicWidth();
+    method public float getMinIntrinsicWidth();
+    property public abstract float maxIntrinsicWidth;
+    property public abstract float minIntrinsicWidth;
+  }
+
+  public final class ParagraphIntrinsicsKt {
+    ctor public ParagraphIntrinsicsKt();
+    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+  }
+
   public final class ParagraphKt {
     ctor public ParagraphKt();
     method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, Integer? maxLines = null, Boolean? ellipsis = null);
   }
 
   public final class ParagraphStyle {
@@ -224,7 +237,7 @@
   }
 
   public final class TextStyle {
-    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     ctor public TextStyle();
     method public androidx.ui.graphics.Color? component1();
     method public androidx.ui.text.style.BaselineShift? component10();
@@ -232,7 +245,7 @@
     method public androidx.ui.text.LocaleList? component12();
     method public androidx.ui.graphics.Color? component13();
     method public androidx.ui.text.style.TextDecoration? component14();
-    method public androidx.ui.painting.Shadow? component15();
+    method public androidx.ui.graphics.Shadow? component15();
     method public androidx.ui.core.Sp? component2();
     method public Float? component3();
     method public androidx.ui.text.font.FontWeight? component4();
@@ -241,7 +254,7 @@
     method public androidx.ui.text.font.FontFamily? component7();
     method public String? component8();
     method public Float? component9();
-    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     method public androidx.ui.graphics.Color? getBackground();
     method public androidx.ui.text.style.BaselineShift? getBaselineShift();
     method public androidx.ui.graphics.Color? getColor();
@@ -255,7 +268,7 @@
     method public androidx.ui.text.font.FontWeight? getFontWeight();
     method public Float? getLetterSpacing();
     method public androidx.ui.text.LocaleList? getLocaleList();
-    method public androidx.ui.painting.Shadow? getShadow();
+    method public androidx.ui.graphics.Shadow? getShadow();
     method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
     method public void setFontFamily(androidx.ui.text.font.FontFamily? p);
@@ -382,6 +395,10 @@
 
 package androidx.ui.text.platform {
 
+  public final class AndroidParagraphHelperKt {
+    ctor public AndroidParagraphHelperKt();
+  }
+
   public final class AndroidParagraphKt {
     ctor public AndroidParagraphKt();
   }
diff --git a/ui/ui-text/api/restricted_0.1.0-dev01.txt b/ui/ui-text/api/restricted_0.1.0-dev01.txt
index 51376c3..b8c28f2bd 100644
--- a/ui/ui-text/api/restricted_0.1.0-dev01.txt
+++ b/ui/ui-text/api/restricted_0.1.0-dev01.txt
@@ -175,11 +175,11 @@
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
     method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
-    method public androidx.ui.painting.Path getPathForRange(int start, int end);
+    method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public float getWidth();
     method public androidx.ui.text.TextRange getWordBoundary(int offset);
     method public void layout(androidx.ui.text.ParagraphConstraints constraints);
-    method public void paint(androidx.ui.painting.Canvas canvas);
+    method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
     property public abstract float height;
@@ -197,9 +197,22 @@
     method public float getWidth();
   }
 
+  public interface ParagraphIntrinsics {
+    method public float getMaxIntrinsicWidth();
+    method public float getMinIntrinsicWidth();
+    property public abstract float maxIntrinsicWidth;
+    property public abstract float minIntrinsicWidth;
+  }
+
+  public final class ParagraphIntrinsicsKt {
+    ctor public ParagraphIntrinsicsKt();
+    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+  }
+
   public final class ParagraphKt {
     ctor public ParagraphKt();
     method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, Integer? maxLines = null, Boolean? ellipsis = null);
   }
 
   public final class ParagraphStyle {
@@ -250,7 +263,7 @@
   }
 
   public final class TextStyle {
-    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     ctor public TextStyle();
     method public androidx.ui.graphics.Color? component1();
     method public androidx.ui.text.style.BaselineShift? component10();
@@ -258,7 +271,7 @@
     method public androidx.ui.text.LocaleList? component12();
     method public androidx.ui.graphics.Color? component13();
     method public androidx.ui.text.style.TextDecoration? component14();
-    method public androidx.ui.painting.Shadow? component15();
+    method public androidx.ui.graphics.Shadow? component15();
     method public androidx.ui.core.Sp? component2();
     method public Float? component3();
     method public androidx.ui.text.font.FontWeight? component4();
@@ -267,7 +280,7 @@
     method public androidx.ui.text.font.FontFamily? component7();
     method public String? component8();
     method public Float? component9();
-    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     method public androidx.ui.graphics.Color? getBackground();
     method public androidx.ui.text.style.BaselineShift? getBaselineShift();
     method public androidx.ui.graphics.Color? getColor();
@@ -281,7 +294,7 @@
     method public androidx.ui.text.font.FontWeight? getFontWeight();
     method public Float? getLetterSpacing();
     method public androidx.ui.text.LocaleList? getLocaleList();
-    method public androidx.ui.painting.Shadow? getShadow();
+    method public androidx.ui.graphics.Shadow? getShadow();
     method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
     method public void setFontFamily(androidx.ui.text.font.FontFamily? p);
@@ -408,6 +421,10 @@
 
 package androidx.ui.text.platform {
 
+  public final class AndroidParagraphHelperKt {
+    ctor public AndroidParagraphHelperKt();
+  }
+
   public final class AndroidParagraphKt {
     ctor public AndroidParagraphKt();
   }
diff --git a/ui/ui-text/api/restricted_current.txt b/ui/ui-text/api/restricted_current.txt
index 51376c3..b8c28f2bd 100644
--- a/ui/ui-text/api/restricted_current.txt
+++ b/ui/ui-text/api/restricted_current.txt
@@ -175,11 +175,11 @@
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.core.PxPosition position);
     method public androidx.ui.text.style.TextDirection getParagraphDirection(int offset);
-    method public androidx.ui.painting.Path getPathForRange(int start, int end);
+    method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public float getWidth();
     method public androidx.ui.text.TextRange getWordBoundary(int offset);
     method public void layout(androidx.ui.text.ParagraphConstraints constraints);
-    method public void paint(androidx.ui.painting.Canvas canvas);
+    method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
     property public abstract float height;
@@ -197,9 +197,22 @@
     method public float getWidth();
   }
 
+  public interface ParagraphIntrinsics {
+    method public float getMaxIntrinsicWidth();
+    method public float getMinIntrinsicWidth();
+    property public abstract float maxIntrinsicWidth;
+    property public abstract float minIntrinsicWidth;
+  }
+
+  public final class ParagraphIntrinsicsKt {
+    ctor public ParagraphIntrinsicsKt();
+    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+  }
+
   public final class ParagraphKt {
     ctor public ParagraphKt();
     method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, Integer? maxLines = null, Boolean? ellipsis = null);
   }
 
   public final class ParagraphStyle {
@@ -250,7 +263,7 @@
   }
 
   public final class TextStyle {
-    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    ctor public TextStyle(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     ctor public TextStyle();
     method public androidx.ui.graphics.Color? component1();
     method public androidx.ui.text.style.BaselineShift? component10();
@@ -258,7 +271,7 @@
     method public androidx.ui.text.LocaleList? component12();
     method public androidx.ui.graphics.Color? component13();
     method public androidx.ui.text.style.TextDecoration? component14();
-    method public androidx.ui.painting.Shadow? component15();
+    method public androidx.ui.graphics.Shadow? component15();
     method public androidx.ui.core.Sp? component2();
     method public Float? component3();
     method public androidx.ui.text.font.FontWeight? component4();
@@ -267,7 +280,7 @@
     method public androidx.ui.text.font.FontFamily? component7();
     method public String? component8();
     method public Float? component9();
-    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.painting.Shadow? shadow);
+    method public androidx.ui.text.TextStyle copy(androidx.ui.graphics.Color? color, androidx.ui.core.Sp? fontSize, Float? fontSizeScale, androidx.ui.text.font.FontWeight? fontWeight, androidx.ui.text.font.FontStyle? fontStyle, androidx.ui.text.font.FontSynthesis? fontSynthesis, androidx.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, Float? letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.text.LocaleList? localeList, androidx.ui.graphics.Color? background, androidx.ui.text.style.TextDecoration? decoration, androidx.ui.graphics.Shadow? shadow);
     method public androidx.ui.graphics.Color? getBackground();
     method public androidx.ui.text.style.BaselineShift? getBaselineShift();
     method public androidx.ui.graphics.Color? getColor();
@@ -281,7 +294,7 @@
     method public androidx.ui.text.font.FontWeight? getFontWeight();
     method public Float? getLetterSpacing();
     method public androidx.ui.text.LocaleList? getLocaleList();
-    method public androidx.ui.painting.Shadow? getShadow();
+    method public androidx.ui.graphics.Shadow? getShadow();
     method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
     method public void setFontFamily(androidx.ui.text.font.FontFamily? p);
@@ -408,6 +421,10 @@
 
 package androidx.ui.text.platform {
 
+  public final class AndroidParagraphHelperKt {
+    ctor public AndroidParagraphHelperKt();
+  }
+
   public final class AndroidParagraphKt {
     ctor public AndroidParagraphKt();
   }
diff --git a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
index e0aa11a..1703ca8 100644
--- a/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/ComposeText.kt
@@ -39,7 +39,7 @@
 import androidx.ui.layout.Row
 import androidx.ui.foundation.VerticalScroller
 import androidx.ui.text.ParagraphStyle
-import androidx.ui.painting.Shadow
+import androidx.ui.graphics.Shadow
 import androidx.compose.composer
 import androidx.ui.text.TextStyle
 import androidx.ui.text.style.TextOverflow
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt
index 3dd32a6..c521776 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/MultiParagraphIntegrationTest.kt
@@ -27,8 +27,8 @@
 import androidx.ui.core.sp
 import androidx.ui.core.withDensity
 import androidx.ui.engine.geometry.Rect
-import androidx.ui.painting.Path
-import androidx.ui.painting.PathOperation
+import androidx.ui.graphics.Path
+import androidx.ui.graphics.PathOperation
 import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.ui.text.font.FontFamily
 import androidx.ui.text.font.asFontFamily
@@ -1943,18 +1943,18 @@
         assertThat(resultHebrew.end, equalTo(text.indexOf('\u05d2') + 1))
     }
 
-    @Test
-    fun width_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun width_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleMultiParagraph()
 
-        assertThat(paragraph.width, equalTo(0.0f))
+        paragraph.width
     }
 
-    @Test
-    fun height_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun height_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleMultiParagraph()
 
-        assertThat(paragraph.height, equalTo(0.0f))
+        paragraph.height
     }
 
     @Test
@@ -1971,19 +1971,25 @@
         assertThat(paragraph.maxIntrinsicWidth, equalTo(0.0f))
     }
 
-    @Test
-    fun alphabeticBaseline_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun firstBaseline_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleMultiParagraph()
 
-        assertThat(paragraph.firstBaseline, equalTo(0.0f))
-        assertThat(paragraph.lastBaseline, equalTo(0.0f))
+        paragraph.firstBaseline
     }
 
-    @Test
-    fun didExceedMaxLines_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun lastBaseline_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleMultiParagraph()
 
-        assertThat(paragraph.didExceedMaxLines, equalTo(false))
+        paragraph.lastBaseline
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun didExceedMaxLines_throws_exception_if_layout_is_not_called() {
+        val paragraph = simpleMultiParagraph()
+
+        paragraph.didExceedMaxLines
     }
 
     @Test(expected = IllegalStateException::class)
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 902b432..d9e5d89 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
@@ -29,12 +29,12 @@
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Image
-import androidx.ui.painting.ImageConfig
-import androidx.ui.painting.Path
-import androidx.ui.painting.PathOperation
-import androidx.ui.painting.Shadow
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.ImageConfig
+import androidx.ui.graphics.Path
+import androidx.ui.graphics.PathOperation
+import androidx.ui.graphics.Shadow
 import androidx.ui.text.FontTestData.Companion.BASIC_KERN_FONT
 import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.ui.text.FontTestData.Companion.FONT_100_REGULAR
@@ -3124,18 +3124,18 @@
         assertThat(doubleFontSizeParagraph.height, equalTo(paragraph.height * densityMultiplier))
     }
 
-    @Test
-    fun width_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun width_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleParagraph()
 
-        assertThat(paragraph.width, equalTo(0.0f))
+        paragraph.width
     }
 
-    @Test
-    fun height_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun height_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleParagraph()
 
-        assertThat(paragraph.height, equalTo(0.0f))
+        paragraph.height
     }
 
     @Test
@@ -3202,19 +3202,25 @@
         assertThat(paragraph.maxIntrinsicWidth, equalTo(0.0f))
     }
 
-    @Test
-    fun alphabeticBaseline_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun firstBaseline_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleParagraph()
 
-        assertThat(paragraph.firstBaseline, equalTo(0.0f))
-        assertThat(paragraph.lastBaseline, equalTo(0.0f))
+        paragraph.firstBaseline
     }
 
-    @Test
-    fun didExceedMaxLines_default_value() {
+    @Test(expected = IllegalStateException::class)
+    fun lastBaseline_throws_exception_if_layout_is_not_called() {
         val paragraph = simpleParagraph()
 
-        assertThat(paragraph.didExceedMaxLines, equalTo(false))
+        paragraph.lastBaseline
+    }
+
+    @Test(expected = IllegalStateException::class)
+    fun didExceedMaxLines_throws_exception_if_layout_is_not_called() {
+        val paragraph = simpleParagraph()
+
+        paragraph.didExceedMaxLines
     }
 
     @Test(expected = IllegalStateException::class)
@@ -3261,6 +3267,35 @@
         paragraph.getPathForRange(textStart, textEnd + 1)
     }
 
+    @Test
+    fun createParagraph_with_ParagraphIntrinsics() {
+        withDensity(defaultDensity) {
+            val text = "abc"
+            val fontSize = 14.sp
+            val fontSizeInPx = fontSize.toPx().value
+
+            val paragraphIntrinsics = ParagraphIntrinsics(
+                text = text,
+                style = TextStyle(
+                    fontSize = fontSize,
+                    fontFamily = fontFamilyMeasureFont
+                ),
+                paragraphStyle = ParagraphStyle(),
+                textStyles = listOf(),
+                density = defaultDensity,
+                layoutDirection = LayoutDirection.Ltr,
+                resourceLoader = TestFontResourceLoader(context)
+            )
+
+            val paragraph = Paragraph(paragraphIntrinsics = paragraphIntrinsics)
+
+            paragraph.layout(ParagraphConstraints(fontSizeInPx * text.length))
+
+            assertThat(paragraph.maxIntrinsicWidth, equalTo(paragraphIntrinsics.maxIntrinsicWidth))
+            assertThat(paragraph.width, equalTo(fontSizeInPx * text.length))
+        }
+    }
+
     private fun simpleParagraph(
         text: String = "",
         textIndent: TextIndent? = null,
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntrinsicIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntrinsicIntegrationTest.kt
new file mode 100644
index 0000000..72c3a31
--- /dev/null
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntrinsicIntegrationTest.kt
@@ -0,0 +1,224 @@
+/*
+ * 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.test.filters.SmallTest
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.ui.core.Density
+import androidx.ui.core.LayoutDirection
+import androidx.ui.core.Sp
+import androidx.ui.core.sp
+import androidx.ui.core.withDensity
+import androidx.ui.text.font.asFontFamily
+import com.google.common.truth.Truth.assertThat
+import org.hamcrest.Matchers
+import org.junit.Assert
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(JUnit4::class)
+@SmallTest
+class ParagraphIntrinsicIntegrationTest {
+    private val fontFamilyMeasureFont = FontTestData.BASIC_MEASURE_FONT.asFontFamily()
+    private val context = InstrumentationRegistry.getInstrumentation().context
+    private val defaultDensity = Density(density = 1f)
+
+    @Test
+    fun maxIntrinsicWidth_empty_string_is_zero() {
+        withDensity(defaultDensity) {
+            val paragraphIntrinsics = paragraphIntrinsics(text = "")
+
+            assertThat(paragraphIntrinsics.maxIntrinsicWidth).isZero()
+        }
+    }
+
+    @Test
+    fun maxIntrinsicWidth_with_rtl_string() {
+        withDensity(defaultDensity) {
+            val text = "\u05D0\u05D1\u05D2"
+            val fontSize = 50.sp
+
+            val paragraphIntrinsics = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize
+            )
+
+            assertThat(paragraphIntrinsics.maxIntrinsicWidth)
+                .isEqualTo(text.length * fontSize.toPx().value)
+        }
+    }
+
+    @Test
+    fun maxIntrinsicWidth_with_ltr_string() {
+        withDensity(defaultDensity) {
+            val text = "abc"
+            val fontSize = 50.sp
+
+            val paragraphIntrinsics = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize)
+
+            assertThat(paragraphIntrinsics.maxIntrinsicWidth)
+                .isEqualTo(text.length * fontSize.toPx().value)
+        }
+    }
+
+    @Test
+    fun maxIntrinsicWidth_with_line_feed() {
+        withDensity(defaultDensity) {
+            val text = "abc\nabc"
+            val fontSize = 50.sp
+            val paragraphIntrinsics = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize
+            )
+
+            assertThat(paragraphIntrinsics.maxIntrinsicWidth)
+                .isEqualTo(text.indexOf('\n') * fontSize.toPx().value)
+        }
+    }
+
+    @Test
+    fun maxInstrinsicWidth_withStyledText() {
+        withDensity(defaultDensity) {
+            val text = "a bb ccc"
+            val fontSize = 12.sp
+            val styledFontSize = fontSize * 2
+            val paragraph = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize,
+                textStyles = listOf(
+                    AnnotatedString.Item(
+                        style = TextStyle(fontSize = styledFontSize),
+                        start = "a ".length,
+                        end = "a bb ".length
+                    )
+                )
+            )
+
+            // since "bb " is double font size, the whole width should be the text size, and the
+            // additional width resulting from the "bb " length.
+            val expectedWidth = (text.length + "bb ".length) * fontSize.toPx().value
+            Assert.assertThat(paragraph.maxIntrinsicWidth, Matchers.equalTo(expectedWidth))
+        }
+    }
+
+    @Test
+    fun minIntrinsicWidth_empty_string_is_zero() {
+        withDensity(defaultDensity) {
+            val paragraphIntrinsics = paragraphIntrinsics(text = "")
+
+            assertThat(paragraphIntrinsics.minIntrinsicWidth).isZero()
+        }
+    }
+
+    @Test
+    fun minIntrinsicWidth_with_rtl_string() {
+        withDensity(defaultDensity) {
+            val text = "\u05D0\u05D1\u05D2"
+            val fontSize = 50.sp
+
+            val paragraphIntrinsics = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize
+            )
+
+            assertThat(paragraphIntrinsics.minIntrinsicWidth)
+                .isEqualTo(text.length * fontSize.toPx().value)
+        }
+    }
+
+    @Test
+    fun minIntrinsicWidth_with_ltr_string() {
+        withDensity(defaultDensity) {
+            val text = "abc"
+            val fontSize = 50.sp
+
+            val paragraphIntrinsics = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize
+            )
+
+            assertThat(paragraphIntrinsics.minIntrinsicWidth)
+                .isEqualTo(text.length * fontSize.toPx().value)
+        }
+    }
+
+    @Test
+    fun minInstrinsicWidth_returns_longest_word_width() {
+        withDensity(defaultDensity) {
+            // create words with length 1, 2, 3... 50; and append all with space.
+            val maxWordLength = 50
+            val text = (1..maxWordLength).fold("") { string, next ->
+                string + "a".repeat(next) + " "
+            }
+            val fontSize = 12.sp
+            val paragraph = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize
+            )
+
+            // +1 is for the white space
+            val expectedWidth = (maxWordLength + 1) * fontSize.toPx().value
+            Assert.assertThat(paragraph.minIntrinsicWidth, Matchers.equalTo(expectedWidth))
+        }
+    }
+
+    @Test
+    fun minInstrinsicWidth_withStyledText() {
+        withDensity(defaultDensity) {
+            val text = "a bb ccc"
+            val fontSize = 12.sp
+            val styledFontSize = fontSize * 2
+            val paragraph = paragraphIntrinsics(
+                text = text,
+                fontSize = fontSize,
+                textStyles = listOf(
+                    AnnotatedString.Item(
+                        style = TextStyle(fontSize = styledFontSize),
+                        start = "a".length,
+                        end = "a bb ".length
+                    )
+                )
+            )
+
+            val expectedWidth = "bb ".length * styledFontSize.toPx().value
+            Assert.assertThat(paragraph.minIntrinsicWidth, Matchers.equalTo(expectedWidth))
+        }
+    }
+
+    private fun paragraphIntrinsics(
+        text: String = "",
+        style: TextStyle? = null,
+        fontSize: Sp = 14.sp,
+        textStyles: List<AnnotatedString.Item<TextStyle>> = listOf()
+    ): ParagraphIntrinsics {
+        return ParagraphIntrinsics(
+            text = text,
+            textStyles = textStyles,
+            style = TextStyle(
+                fontFamily = fontFamilyMeasureFont,
+                fontSize = fontSize
+            ).merge(style),
+            paragraphStyle = ParagraphStyle(),
+            density = defaultDensity,
+            layoutDirection = LayoutDirection.Ltr,
+            resourceLoader = TestFontResourceLoader(context)
+        )
+    }
+}
\ No newline at end of file
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 4e93c5b..e464bff 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
@@ -29,8 +29,8 @@
 import androidx.ui.core.withDensity
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Paint
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Paint
 import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.ui.text.font.asFontFamily
 import androidx.ui.text.matchers.equalToBitmap
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 444b98d..45681d7 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
@@ -30,7 +30,7 @@
         ceil(this.height).toInt(),
         Bitmap.Config.ARGB_8888
     )
-    this.paint(androidx.ui.painting.Canvas(Canvas(bitmap)))
+    this.paint(androidx.ui.graphics.Canvas(Canvas(bitmap)))
     return bitmap
 }
 
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
index 8c017e3..072ce79 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
@@ -48,8 +48,7 @@
 import androidx.ui.text.matchers.hasSpan
 import androidx.ui.text.matchers.hasSpanOnTop
 import androidx.ui.text.AnnotatedString
-import androidx.ui.painting.Shadow
-import androidx.ui.text.Locale
+import androidx.ui.graphics.Shadow
 import androidx.ui.text.LocaleList
 import androidx.ui.text.ParagraphStyle
 import androidx.ui.text.TestFontResourceLoader
@@ -128,7 +127,7 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(ForegroundColorSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence, hasSpan(ForegroundColorSpan::class, 0, text.length))
     }
 
     @Test
@@ -142,7 +141,7 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(ForegroundColorSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence, hasSpan(ForegroundColorSpan::class, 0, "abc".length))
     }
 
     @Test
@@ -160,10 +159,10 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(ForegroundColorSpan::class, 0, text.length))
-        assertThat(paragraph.underlyingText, hasSpan(ForegroundColorSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence, hasSpan(ForegroundColorSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence, hasSpan(ForegroundColorSpan::class, 0, "abc".length))
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpanOnTop(ForegroundColorSpan::class, 0, "abc".length)
         )
     }
@@ -179,8 +178,8 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(StrikethroughSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(StrikethroughSpan::class, 0, text.length))
     }
 
     @Test
@@ -194,8 +193,8 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(UnderlineSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(UnderlineSpan::class, 0, text.length))
     }
 
     @Test
@@ -209,8 +208,8 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(StrikethroughSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(StrikethroughSpan::class, 0, "abc".length))
     }
 
     @Test
@@ -224,8 +223,8 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(UnderlineSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(UnderlineSpan::class, 0, "abc".length))
     }
 
     @Test
@@ -243,9 +242,9 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(UnderlineSpan::class, 0, "abc".length))
-        assertThat(paragraph.underlyingText, hasSpan(StrikethroughSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(UnderlineSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence, hasSpan(StrikethroughSpan::class, 0, "abc".length))
     }
 
     @Test
@@ -262,7 +261,7 @@
             )
             paragraph.layout(ParagraphConstraints(width = paragraphWidth))
 
-            assertThat(paragraph.underlyingText, hasSpan(AbsoluteSizeSpan::class, 0, text.length))
+            assertThat(paragraph.charSequence, hasSpan(AbsoluteSizeSpan::class, 0, text.length))
         }
     }
 
@@ -280,7 +279,7 @@
             )
             paragraph.layout(ParagraphConstraints(width = paragraphWidth))
 
-            assertThat(paragraph.underlyingText, hasSpan(AbsoluteSizeSpan::class, 0, "abc".length))
+            assertThat(paragraph.charSequence, hasSpan(AbsoluteSizeSpan::class, 0, "abc".length))
         }
     }
 
@@ -303,10 +302,10 @@
             )
             paragraph.layout(ParagraphConstraints(width = paragraphWidth))
 
-            assertThat(paragraph.underlyingText, hasSpan(AbsoluteSizeSpan::class, 0, text.length))
-            assertThat(paragraph.underlyingText, hasSpan(AbsoluteSizeSpan::class, 0, "abc".length))
+            assertThat(paragraph.charSequence, hasSpan(AbsoluteSizeSpan::class, 0, text.length))
+            assertThat(paragraph.charSequence, hasSpan(AbsoluteSizeSpan::class, 0, "abc".length))
             assertThat(
-                paragraph.underlyingText,
+                paragraph.charSequence,
                 hasSpanOnTop(AbsoluteSizeSpan::class, 0, "abc".length)
             )
         }
@@ -325,7 +324,7 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(RelativeSizeSpan::class, 0, text.length) {
                 it.sizeChange == fontSizeScale
             }
@@ -345,7 +344,7 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(RelativeSizeSpan::class, 0, "abc".length) {
                 it.sizeChange == fontSizeScale
             }
@@ -363,8 +362,8 @@
             textStyles = listOf(AnnotatedString.Item(textStyle, 0, text.length))
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(LetterSpacingSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(LetterSpacingSpan::class, 0, text.length))
     }
 
     @Test
@@ -377,8 +376,8 @@
             textStyles = listOf(AnnotatedString.Item(textStyle, 0, "abc".length))
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(LetterSpacingSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(LetterSpacingSpan::class, 0, "abc".length))
     }
 
     @Test
@@ -395,11 +394,11 @@
             )
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText, hasSpan(LetterSpacingSpan::class, 0, text.length))
-        assertThat(paragraph.underlyingText, hasSpan(LetterSpacingSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence, hasSpan(LetterSpacingSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence, hasSpan(LetterSpacingSpan::class, 0, "abc".length))
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpanOnTop(LetterSpacingSpan::class, 0, "abc".length)
         )
     }
@@ -416,8 +415,8 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText,
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence,
             hasSpan(BackgroundColorSpan::class, 0, text.length) { span ->
                 span.backgroundColor == color.toArgb()
             }
@@ -436,8 +435,8 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText,
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence,
             hasSpan(BackgroundColorSpan::class, 0, "abc".length) { span ->
                 span.backgroundColor == color.toArgb()
             }
@@ -461,19 +460,19 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
-        assertThat(paragraph.underlyingText,
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
+        assertThat(paragraph.charSequence,
             hasSpan(BackgroundColorSpan::class, 0, text.length) { span ->
                 span.backgroundColor == color.toArgb()
             }
         )
-        assertThat(paragraph.underlyingText,
+        assertThat(paragraph.charSequence,
             hasSpan(BackgroundColorSpan::class, 0, "abc".length) { span ->
                 span.backgroundColor == colorOverwrite.toArgb()
             }
         )
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpanOnTop(BackgroundColorSpan::class, 0, "abc".length) { span ->
                 span.backgroundColor == colorOverwrite.toArgb()
             }
@@ -492,7 +491,7 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(LocaleSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence, hasSpan(LocaleSpan::class, 0, text.length))
     }
 
     @Test
@@ -507,7 +506,7 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(LocaleSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence, hasSpan(LocaleSpan::class, 0, "abc".length))
     }
 
     @Test
@@ -525,10 +524,10 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(LocaleSpan::class, 0, text.length))
-        assertThat(paragraph.underlyingText, hasSpan(LocaleSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence, hasSpan(LocaleSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence, hasSpan(LocaleSpan::class, 0, "abc".length))
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpanOnTop(LocaleSpan::class, 0, "abc".length)
         )
     }
@@ -545,7 +544,7 @@
         // width is not important
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(BaselineShiftSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence, hasSpan(BaselineShiftSpan::class, 0, text.length))
     }
 
     @Test
@@ -560,7 +559,7 @@
         // width is not important
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(BaselineShiftSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence, hasSpan(BaselineShiftSpan::class, 0, "abc".length))
     }
 
     @Test
@@ -580,10 +579,10 @@
         // width is not important
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, hasSpan(BaselineShiftSpan::class, 0, text.length))
-        assertThat(paragraph.underlyingText, hasSpan(BaselineShiftSpan::class, 0, "abc".length))
+        assertThat(paragraph.charSequence, hasSpan(BaselineShiftSpan::class, 0, text.length))
+        assertThat(paragraph.charSequence, hasSpan(BaselineShiftSpan::class, 0, "abc".length))
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpanOnTop(BaselineShiftSpan::class, 0, "abc".length)
         )
     }
@@ -605,8 +604,8 @@
         // width is not important
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText, not(hasSpan(ScaleXSpan::class, 0, text.length)))
-        assertThat(paragraph.underlyingText, not(hasSpan(SkewXSpan::class, 0, text.length)))
+        assertThat(paragraph.charSequence, not(hasSpan(ScaleXSpan::class, 0, text.length)))
+        assertThat(paragraph.charSequence, not(hasSpan(SkewXSpan::class, 0, text.length)))
     }
 
     @Test
@@ -628,10 +627,10 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(ScaleXSpan::class, 0, text.length) { it.scaleX == scaleX }
         )
-        assertThat(paragraph.underlyingText, not(hasSpan(SkewXSpan::class, 0, text.length)))
+        assertThat(paragraph.charSequence, not(hasSpan(SkewXSpan::class, 0, text.length)))
     }
 
     @Test
@@ -653,10 +652,10 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(SkewXSpan::class, 0, text.length) { it.skewX == skewX }
         )
-        assertThat(paragraph.underlyingText, not(hasSpan(ScaleXSpan::class, 0, text.length)))
+        assertThat(paragraph.charSequence, not(hasSpan(ScaleXSpan::class, 0, text.length)))
     }
 
     @Test
@@ -673,7 +672,7 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(LeadingMarginSpan.Standard::class, 0, text.length) {
                 it.getLeadingMargin(true) == firstLine && it.getLeadingMargin(false) == restLine
             }
@@ -698,7 +697,7 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(ShadowSpan::class, start = 0, end = text.length) {
                 return@hasSpan it.color == color.toArgb() &&
                         it.offsetX == offset.dx &&
@@ -734,7 +733,7 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(ShadowSpan::class, start = 0, end = text.length) {
                 return@hasSpan it.color == color.toArgb() &&
                         it.offsetX == offset.dx &&
@@ -743,7 +742,7 @@
             }
         )
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpanOnTop(ShadowSpan::class, start = 0, end = "abc".length) {
                 return@hasSpanOnTop it.color == colorOverwrite.toArgb() &&
                         it.offsetX == offsetOverwrite.dx &&
@@ -781,9 +780,9 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(TypefaceSpan::class, expectedStart, expectedEnd) { span ->
                 span.typeface == expectedTypeface
             })
@@ -819,9 +818,9 @@
         )
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
-        assertThat(paragraph.underlyingText.toString(), equalTo(text))
+        assertThat(paragraph.charSequence.toString(), equalTo(text))
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(TypefaceSpan::class, expectedStart, expectedEnd) { span ->
                 span.typeface == expectedTypeface
             })
@@ -841,7 +840,7 @@
         paragraph.layout(ParagraphConstraints(width = 100.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(FontFeatureSpan::class, 0, "abc".length) {
                 it.fontFeatureSettings == fontFeatureSettings
             })
@@ -1184,7 +1183,7 @@
         )
         paragraph.layout(ParagraphConstraints(width = 0.0f))
 
-        assertThat(paragraph.underlyingText,
+        assertThat(paragraph.charSequence,
             hasSpan(BackgroundColorSpan::class, 0, text.length) { span ->
                 span.backgroundColor == color.toArgb()
             }
@@ -1204,7 +1203,7 @@
         paragraph.layout(ParagraphConstraints(width = 0.0f))
 
         assertThat(
-            paragraph.underlyingText,
+            paragraph.charSequence,
             hasSpan(BaselineShiftSpan::class, 0, text.length) { span ->
                 span.multiplier == BaselineShift.Subscript.multiplier
             }
diff --git a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt
index 29f63b2..7b5c8a1 100644
--- a/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt
@@ -30,7 +30,7 @@
         ceil(this.height).toInt(),
         Bitmap.Config.ARGB_8888
     )
-    this.paint(androidx.ui.painting.Canvas(Canvas(bitmap)))
+    this.paint(androidx.ui.graphics.Canvas(Canvas(bitmap)))
     return bitmap
 }
 
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 ecfd610..826f5e1 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
@@ -23,11 +23,10 @@
 import androidx.ui.core.px
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.engine.geometry.Rect
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Path
 import androidx.ui.text.font.Font
 import androidx.ui.text.style.TextDirection
-import java.lang.IllegalStateException
 import kotlin.math.max
 
 /**
@@ -72,6 +71,10 @@
      */
     var didExceedMaxLines: Boolean = false
         private set
+        get() {
+            assertNeedLayout()
+            return field
+        }
 
     /**
      * The amount of horizontal space this paragraph occupies.
@@ -80,6 +83,10 @@
      */
     var width: Float = 0f
         private set
+        get() {
+            assertNeedLayout()
+            return field
+        }
 
     /**
      * The amount of vertical space this paragraph occupies.
@@ -88,24 +95,46 @@
      */
     var height: Float = 0f
         private set
+        get() {
+            assertNeedLayout()
+            return field
+        }
 
     /**
      * The distance from the top of the paragraph to the alphabetic
      * baseline of the first line, in logical pixels.
      */
-    val firstBaseline: Float get() =
-        if (paragraphInfoList.isEmpty()) 0f else paragraphInfoList[0].paragraph.firstBaseline
+    val firstBaseline: Float
+        get() {
+            assertNeedLayout()
+            return if (paragraphInfoList.isEmpty()) {
+                0f
+            } else {
+                paragraphInfoList[0].paragraph.firstBaseline
+            }
+        }
 
     /**
      * The distance from the top of the paragraph to the alphabetic
      * baseline of the first line, in logical pixels.
      */
-    val lastBaseline: Float get() =
-        if (paragraphInfoList.isEmpty()) 0f else paragraphInfoList.last().paragraph.lastBaseline
+    val lastBaseline: Float
+        get() {
+            assertNeedLayout()
+            return if (paragraphInfoList.isEmpty()) {
+                0f
+            } else {
+                paragraphInfoList.last().paragraph.lastBaseline
+            }
+        }
 
     /** The total number of lines in the text. */
     var lineCount: Int = 0
         private set
+        get() {
+            assertNeedLayout()
+            return field
+        }
 
     private var needLayout = true
 
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
index 40a73d9..7a80e90 100644
--- a/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
@@ -20,10 +20,11 @@
 import androidx.ui.core.LayoutDirection
 import androidx.ui.core.PxPosition
 import androidx.ui.engine.geometry.Rect
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Path
 import androidx.ui.text.font.Font
 import androidx.ui.text.platform.AndroidParagraph
+import androidx.ui.text.platform.AndroidParagraphIntrinsics
 import androidx.ui.text.platform.TypefaceAdapter
 import androidx.ui.text.style.TextDirection
 
@@ -39,14 +40,14 @@
     /**
      * The amount of horizontal space this paragraph occupies.
      *
-     * Valid only after [layout] has been called.
+     * Should be called after [layout] has been called.
      */
     val width: Float
 
     /**
      * The amount of vertical space this paragraph occupies.
      *
-     * Valid only after [layout] has been called.
+     * Should be called after [layout] has been called.
      */
     val height: Float
 
@@ -64,12 +65,16 @@
     /**
      * The distance from the top of the paragraph to the alphabetic
      * baseline of the first line, in logical pixels.
+     *
+     * Should be called after [layout] has been called.
      */
     val firstBaseline: Float
 
     /**
      * The distance from the top of the paragraph to the alphabetic
      * baseline of the last line, in logical pixels.
+     *
+     * Should be called after [layout] has been called.
      */
     val lastBaseline: Float
 
@@ -80,11 +85,15 @@
      * constraint.
      *
      * See the discussion of the `maxLines` and `ellipsis` arguments at [ParagraphStyle].
+     *
+     * Should be called after [layout] has been called.
      */
     val didExceedMaxLines: Boolean
 
     /**
      * The total number of lines in the text.
+     *
+     * Should be called after [layout] has been called.
      */
     val lineCount: Int
 
@@ -182,14 +191,9 @@
     fun paint(canvas: Canvas)
 }
 
-/*expect fun Paragraph(
-    text: String,
-    style: TextStyle,
-    paragraphStyle: ParagraphStyle,
-    textStyles: List<AnnotatedString.Item<TextStyle>>,
-    density: Density
-): Paragraph*/
-
+/**
+ * @see Paragraph
+ */
 /* actual */ fun Paragraph(
     text: String,
     style: TextStyle,
@@ -214,4 +218,16 @@
         density = density,
         layoutDirection = layoutDirection
     )
+}
+
+/* actual */ fun Paragraph(
+    paragraphIntrinsics: ParagraphIntrinsics,
+    maxLines: Int? = null,
+    ellipsis: Boolean? = null
+): Paragraph {
+    return AndroidParagraph(
+        paragraphIntrinsics = paragraphIntrinsics as AndroidParagraphIntrinsics,
+        maxLines = maxLines,
+        ellipsis = ellipsis
+    )
 }
\ No newline at end of file
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/ParagraphIntrinsics.kt b/ui/ui-text/src/main/java/androidx/ui/text/ParagraphIntrinsics.kt
new file mode 100644
index 0000000..601fbf6
--- /dev/null
+++ b/ui/ui-text/src/main/java/androidx/ui/text/ParagraphIntrinsics.kt
@@ -0,0 +1,64 @@
+/*
+ * 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.core.Density
+import androidx.ui.core.LayoutDirection
+import androidx.ui.text.font.Font
+import androidx.ui.text.platform.AndroidParagraphIntrinsics
+import androidx.ui.text.platform.TypefaceAdapter
+
+/**
+ * Calculates and presents the intrinsic width and height of text.
+ */
+interface ParagraphIntrinsics {
+    /**
+     * The width for text if all soft wrap opportunities were taken.
+     */
+    val minIntrinsicWidth: Float
+
+    /**
+     * Returns the smallest width beyond which increasing the width never
+     * decreases the height.
+     */
+    val maxIntrinsicWidth: Float
+}
+
+/**
+ * @see ParagraphIntrinsics
+ */
+/* actual */ fun ParagraphIntrinsics(
+    text: String,
+    style: TextStyle,
+    paragraphStyle: ParagraphStyle,
+    textStyles: List<AnnotatedString.Item<TextStyle>>,
+    density: Density,
+    layoutDirection: LayoutDirection,
+    resourceLoader: Font.ResourceLoader
+): ParagraphIntrinsics {
+    return AndroidParagraphIntrinsics(
+        text = text,
+        style = style,
+        paragraphStyle = paragraphStyle,
+        typefaceAdapter = TypefaceAdapter(
+            resourceLoader = resourceLoader
+        ),
+        textStyles = textStyles,
+        density = density,
+        layoutDirection = layoutDirection
+    )
+}
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 9d0bef7..6ead5c3 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
@@ -32,11 +32,11 @@
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.engine.geometry.Size
 import androidx.ui.graphics.Color
-import androidx.ui.painting.BlendMode
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.LinearGradientShader
-import androidx.ui.painting.Paint
-import androidx.ui.painting.Shader
+import androidx.ui.graphics.BlendMode
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.LinearGradientShader
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.Shader
 import androidx.ui.text.font.Font
 import androidx.ui.text.style.TextAlign
 import androidx.ui.text.style.TextDirection
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 b87eb42..c119d79 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
@@ -29,7 +29,8 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.lerp
 import androidx.ui.lerp
-import androidx.ui.painting.Shadow
+import androidx.ui.graphics.Shadow
+import java.util.Locale
 
 /**
  * Configuration object to define the text style.
@@ -229,7 +230,7 @@
                     b.decoration,
                     t
                 ),
-                shadow = androidx.ui.painting.lerp(
+                shadow = lerp(
                     a.shadow ?: Shadow(),
                     b.shadow ?: Shadow(),
                     t
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 97200de..6751ec75 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
@@ -15,23 +15,8 @@
  */
 package androidx.ui.text.platform
 
-import android.graphics.Typeface
-import android.os.Build
-import android.os.LocaleList as AndroidLocaleList
-import android.text.SpannableString
-import android.text.Spanned
 import android.text.TextPaint
 import android.text.TextUtils
-import android.text.style.AbsoluteSizeSpan
-import android.text.style.BackgroundColorSpan
-import android.text.style.ForegroundColorSpan
-import android.text.style.LeadingMarginSpan
-import android.text.style.LocaleSpan
-import android.text.style.RelativeSizeSpan
-import android.text.style.ScaleXSpan
-import android.text.style.StrikethroughSpan
-import android.text.style.UnderlineSpan
-import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
 import androidx.text.LayoutCompat.ALIGN_CENTER
 import androidx.text.LayoutCompat.ALIGN_LEFT
@@ -43,72 +28,68 @@
 import androidx.text.LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER
 import androidx.text.LayoutCompat.DEFAULT_MAX_LINES
 import androidx.text.LayoutCompat.JUSTIFICATION_MODE_INTER_WORD
-import androidx.text.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
-import androidx.text.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
-import androidx.text.LayoutCompat.TEXT_DIRECTION_LTR
-import androidx.text.LayoutCompat.TEXT_DIRECTION_RTL
-import androidx.text.LayoutIntrinsics
 import androidx.text.TextLayout
 import androidx.text.selection.WordBoundary
-import androidx.text.style.BaselineShiftSpan
-import androidx.text.style.FontFeatureSpan
-import androidx.text.style.LetterSpacingSpan
-import androidx.text.style.ShadowSpan
-import androidx.text.style.SkewXSpan
-import androidx.text.style.TypefaceSpan
 import androidx.ui.core.Density
 import androidx.ui.core.LayoutDirection
 import androidx.ui.core.PxPosition
-import androidx.ui.core.px
-import androidx.ui.core.withDensity
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.graphics.toArgb
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Path
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Path
 import androidx.ui.text.AnnotatedString
-import androidx.ui.text.Locale
-import androidx.ui.text.LocaleList
 import androidx.ui.text.Paragraph
 import androidx.ui.text.ParagraphConstraints
 import androidx.ui.text.ParagraphStyle
 import androidx.ui.text.TextRange
 import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
 import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDecoration
 import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextDirectionAlgorithm
-import androidx.ui.text.style.TextIndent
 import java.util.Locale as JavaLocale
-import kotlin.math.roundToInt
 
 /**
  * Android specific implementation for [Paragraph]
  */
 internal class AndroidParagraph constructor(
-    val text: String,
-    val style: TextStyle,
-    val paragraphStyle: ParagraphStyle,
-    val textStyles: List<AnnotatedString.Item<TextStyle>>,
+    val paragraphIntrinsics: AndroidParagraphIntrinsics,
     val maxLines: Int?,
-    val ellipsis: Boolean?,
-    val typefaceAdapter: TypefaceAdapter,
-    val density: Density,
-    val layoutDirection: LayoutDirection
+    val ellipsis: Boolean?
 ) : Paragraph {
 
-    @VisibleForTesting
-    internal val textPaint = TextPaint(android.graphics.Paint.ANTI_ALIAS_FLAG)
+    constructor(
+        text: String,
+        style: TextStyle,
+        paragraphStyle: ParagraphStyle,
+        textStyles: List<AnnotatedString.Item<TextStyle>>,
+        maxLines: Int?,
+        ellipsis: Boolean?,
+        typefaceAdapter: TypefaceAdapter,
+        density: Density,
+        layoutDirection: LayoutDirection
+    ) : this(
+        paragraphIntrinsics = AndroidParagraphIntrinsics(
+            text = text,
+            style = style,
+            paragraphStyle = paragraphStyle,
+            textStyles = textStyles,
+            typefaceAdapter = typefaceAdapter,
+            density = density,
+            layoutDirection = layoutDirection
+        ),
+        maxLines = maxLines,
+        ellipsis = ellipsis
+    )
 
+    /**
+     * Initialized when [layout] function is called.
+     */
     private var layout: TextLayout? = null
 
     override var width: Float = 0.0f
-        get() = layout?.let { field } ?: 0.0f
+        get() = ensureLayout.let { field }
 
     override val height: Float
-        get() = layout?.let {
+        get() = ensureLayout.let {
             // TODO(Migration/haoyuchang): Figure out a way to add bottomPadding properly
             val lineCount = it.lineCount
             if (maxLines != null &&
@@ -119,36 +100,30 @@
             } else {
                 it.height.toFloat()
             }
-        } ?: 0.0f
+        }
 
     override val maxIntrinsicWidth: Float
-        get() = layoutIntrinsics.maxIntrinsicWidth
+        get() = paragraphIntrinsics.maxIntrinsicWidth
 
     override val minIntrinsicWidth: Float
-        get() = layoutIntrinsics.minIntrinsicWidth
-
-    private val textDirectionHeuristic: Int
-        get() = resolveTextDirectionHeuristics(
-            layoutDirection,
-            paragraphStyle.textDirectionAlgorithm
-        )
+        get() = paragraphIntrinsics.minIntrinsicWidth
 
     override val firstBaseline: Float
-        get() = layout?.getLineBaseline(0) ?: 0.0f
+        get() = ensureLayout.getLineBaseline(0)
 
     override val lastBaseline: Float
         get() = if (maxLines != null && maxLines >= 0 && maxLines < lineCount) {
-            layout?.getLineBaseline(maxLines - 1) ?: 0.0f
+            ensureLayout.getLineBaseline(maxLines - 1)
         } else {
-            layout?.getLineBaseline(lineCount - 1) ?: 0.0f
+            ensureLayout.getLineBaseline(lineCount - 1)
         }
 
     override val didExceedMaxLines: Boolean
-        get() = layout?.didExceedMaxLines ?: false
+        get() = ensureLayout.didExceedMaxLines
 
     @VisibleForTesting
     internal val textLocale: JavaLocale
-        get() = textPaint.textLocale
+        get() = paragraphIntrinsics.textPaint.textLocale
 
     override val lineCount: Int
         get() = ensureLayout.lineCount
@@ -161,34 +136,15 @@
         }
 
     @VisibleForTesting
-    internal val underlyingText: CharSequence
-        get() = ensureLayout.text
+    internal val charSequence: CharSequence
+        get() = paragraphIntrinsics.charSequence
 
-    private val charSequence: CharSequence
-    private val layoutIntrinsics: LayoutIntrinsics
-
-    init {
-        val notAppliedStyle = textPaint.applyTextStyle(style, typefaceAdapter, density)
-
-        charSequence = createStyledText(
-            text = text,
-            textIndent = paragraphStyle.textIndent,
-            textStyles = listOf(
-                AnnotatedString.Item(
-                    notAppliedStyle,
-                    0,
-                    text.length
-                )
-            ) + textStyles,
-            density = density,
-            typefaceAdapter = typefaceAdapter
-        )
-
-        layoutIntrinsics = LayoutIntrinsics(charSequence, textPaint, textDirectionHeuristic)
-    }
+    @VisibleForTesting
+    internal val textPaint: TextPaint
+        get() = paragraphIntrinsics.textPaint
 
     override fun layout(constraints: ParagraphConstraints) {
-        val width = constraints.width
+        val paragraphStyle = paragraphIntrinsics.paragraphStyle
 
         val alignment = toLayoutAlign(paragraphStyle.textAlign)
 
@@ -207,18 +163,18 @@
         }
 
         layout = TextLayout(
-            charSequence = charSequence,
-            width = width,
+            charSequence = paragraphIntrinsics.charSequence,
+            width = constraints.width,
             textPaint = textPaint,
             ellipsize = ellipsize,
             alignment = alignment,
-            textDirectionHeuristic = textDirectionHeuristic,
+            textDirectionHeuristic = paragraphIntrinsics.textDirectionHeuristic,
             lineSpacingMultiplier = lineSpacingMultiplier,
             maxLines = maxLines,
             justificationMode = justificationMode,
-            layoutIntrinsics = layoutIntrinsics
+            layoutIntrinsics = paragraphIntrinsics.layoutIntrinsics
         )
-        this.width = width
+        this.width = constraints.width
     }
 
     override fun getOffsetForPosition(position: PxPosition): Int {
@@ -243,9 +199,10 @@
     }
 
     override fun getPathForRange(start: Int, end: Int): Path {
-        if (start !in 0..end || end > text.length) {
+        if (start !in 0..end || end > charSequence.length) {
             throw AssertionError(
-                "Start($start) or End($end) is out of Range(0..${text.length}), or start > end!"
+                "Start($start) or End($end) is out of Range(0..${charSequence.length})," +
+                        " or start > end!"
             )
         }
         val path = android.graphics.Path()
@@ -254,8 +211,8 @@
     }
 
     override fun getCursorRect(offset: Int): Rect {
-        if (offset !in 0..text.length) {
-            throw AssertionError("offset($offset) is out of bounds (0,${text.length}")
+        if (offset !in 0..charSequence.length) {
+            throw AssertionError("offset($offset) is out of bounds (0,${charSequence.length}")
         }
         // TODO(nona): Support cursor drawable.
         val cursorWidth = 4.0f
@@ -306,6 +263,7 @@
     override fun getBidiRunDirection(offset: Int): TextDirection {
         return if (ensureLayout.isRtlCharAt(offset)) TextDirection.Rtl else TextDirection.Ltr
     }
+
     /**
      * @return true if the given line is ellipsized, else false.
      */
@@ -325,296 +283,6 @@
     }
 }
 
-private fun createTypeface(style: TextStyle, typefaceAdapter: TypefaceAdapter): Typeface {
-    return typefaceAdapter.create(
-        fontFamily = style.fontFamily,
-        fontWeight = style.fontWeight ?: FontWeight.normal,
-        fontStyle = style.fontStyle ?: FontStyle.Normal,
-        fontSynthesis = style.fontSynthesis ?: FontSynthesis.All
-    )
-}
-
-private fun createStyledText(
-    text: String,
-    textIndent: TextIndent?,
-    textStyles: List<AnnotatedString.Item<TextStyle>>,
-    density: Density,
-    typefaceAdapter: TypefaceAdapter
-): CharSequence {
-    if (textStyles.isEmpty() && textIndent == null) return text
-    val spannableString = SpannableString(text)
-
-    textIndent?.let { indent ->
-        if (indent.firstLine == 0.px && indent.restLine == 0.px) return@let
-        spannableString.setSpan(
-            LeadingMarginSpan.Standard(
-                indent.firstLine.value.toInt(),
-                indent.restLine.value.toInt()
-            ),
-            0,
-            text.length,
-            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-        )
-    }
-
-    for (textStyle in textStyles) {
-        val start = textStyle.start
-        val end = textStyle.end
-        val style = textStyle.style
-
-        if (start < 0 || start >= text.length || end <= start || end > text.length) continue
-
-        // Be aware that SuperscriptSpan needs to be applied before all other spans which
-        // affect FontMetrics
-        style.baselineShift?.let {
-            spannableString.setSpan(
-                BaselineShiftSpan(it.multiplier),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-
-        style.color?.let {
-            spannableString.setSpan(
-                ForegroundColorSpan(it.toArgb()),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-
-        style.decoration?.let {
-            if (it.contains(TextDecoration.Underline)) {
-                spannableString.setSpan(
-                    UnderlineSpan(),
-                    start,
-                    end,
-                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-                )
-            }
-            if (it.contains(TextDecoration.LineThrough)) {
-                spannableString.setSpan(
-                    StrikethroughSpan(),
-                    start,
-                    end,
-                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-                )
-            }
-        }
-
-        style.fontSize?.let {
-            withDensity(density) {
-                spannableString.setSpan(
-                    AbsoluteSizeSpan(it.toPx().value.roundToInt()),
-                    start,
-                    end,
-                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-                )
-            }
-        }
-
-        // Be aware that fontSizeScale must be applied after fontSize.
-        style.fontSizeScale?.let {
-            spannableString.setSpan(
-                RelativeSizeSpan(it),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-
-        style.fontFeatureSettings?.let {
-            spannableString.setSpan(
-                FontFeatureSpan(it),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-
-        if (style.hasFontAttributes()) {
-            spannableString.setSpan(
-                TypefaceSpan(createTypeface(style, typefaceAdapter)),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-
-        // TODO(Migration/haoyuchang): implement textBaseLine
-        style.textGeometricTransform?.scaleX?.let {
-            spannableString.setSpan(
-                ScaleXSpan(it),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-
-        style.textGeometricTransform?.skewX?.let {
-            spannableString.setSpan(
-                SkewXSpan(it),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-
-        // TODO(Migration/haoyuchang): support letter spacing with pixel.
-        style.letterSpacing?.let {
-            spannableString.setSpan(
-                LetterSpacingSpan(it),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-        // TODO(Migration/haoyuchang): implement height
-        style.localeList?.let {
-            spannableString.setSpan(
-                if (Build.VERSION.SDK_INT >= 24) {
-                    LocaleSpan(it.toAndroidLocaleList())
-                } else {
-                    val locale = if (it.isEmpty()) Locale.current else it[0]
-                    LocaleSpan(locale.toJavaLocale())
-                },
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-        // TODO(Migration/haoyuchang): framework only support background color now
-        style.background?.let {
-            spannableString.setSpan(
-                BackgroundColorSpan(it.toArgb()),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-        // TODO(Migration/haoyuchang): implement foreground or decide if we really need it
-        style.shadow?.let {
-            spannableString.setSpan(
-                ShadowSpan(it.color.toArgb(), it.offset.dx, it.offset.dy, it.blurRadius.value),
-                start,
-                end,
-                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
-            )
-        }
-    }
-    return spannableString
-}
-
-private fun TextPaint.applyTextStyle(
-    style: TextStyle,
-    typefaceAdapter: TypefaceAdapter,
-    density: Density
-): TextStyle {
-    // TODO(haoyuchang) remove this engine.ParagraphStyle
-    style.fontSize?.let {
-        withDensity(density) {
-            textSize = it.toPx().value
-        }
-    }
-
-    // fontSizeScale must be applied after fontSize is applied.
-    style.fontSizeScale?.let {
-        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)
-    }
-
-    style.localeList?.let {
-        if (Build.VERSION.SDK_INT >= 24) {
-            textLocales = it.toAndroidLocaleList()
-        } else {
-            val locale = if (it.isEmpty()) Locale.current else it[0]
-            textLocale = locale.toJavaLocale()
-        }
-    }
-
-    style.color?.let {
-        color = it.toArgb()
-    }
-
-    style.letterSpacing?.let {
-        letterSpacing = it
-    }
-
-    style.fontFeatureSettings?.let {
-        fontFeatureSettings = it
-    }
-
-    style.textGeometricTransform?.scaleX?.let {
-        textScaleX *= it
-    }
-
-    style.textGeometricTransform?.skewX?.let {
-        textSkewX += it
-    }
-
-    style.shadow?.let {
-        setShadowLayer(
-            it.blurRadius.value,
-            it.offset.dx,
-            it.offset.dy,
-            it.color.toArgb()
-        )
-    }
-
-    style.decoration?.let {
-        if (it.contains(TextDecoration.Underline)) {
-            isUnderlineText = true
-        }
-        if (it.contains(TextDecoration.LineThrough)) {
-            isStrikeThruText = true
-        }
-    }
-
-    // baselineShift and bgColor is reset in the Android Layout constructor.
-    // therefore we cannot apply them on paint, have to use spans.
-    return TextStyle(
-        background = style.background,
-        baselineShift = style.baselineShift
-    )
-}
-
-/**
- * For a given [TextDirectionAlgorithm] return [TextLayout] constants for text direction
- * heuristics.
- */
-internal fun resolveTextDirectionHeuristics(
-    layoutDirection: LayoutDirection,
-    textDirectionAlgorithm: TextDirectionAlgorithm?
-): Int {
-    if (textDirectionAlgorithm == null) {
-        return if (layoutDirection == LayoutDirection.Ltr) {
-            TEXT_DIRECTION_FIRST_STRONG_LTR
-        } else {
-            TEXT_DIRECTION_FIRST_STRONG_RTL
-        }
-    }
-
-    return when (textDirectionAlgorithm) {
-        TextDirectionAlgorithm.ContentOrLtr -> TEXT_DIRECTION_FIRST_STRONG_LTR
-        TextDirectionAlgorithm.ContentOrRtl -> TEXT_DIRECTION_FIRST_STRONG_RTL
-        TextDirectionAlgorithm.ForceLtr -> TEXT_DIRECTION_LTR
-        TextDirectionAlgorithm.ForceRtl -> TEXT_DIRECTION_RTL
-    }
-}
-/**
- * Returns true if this [TextStyle] contains any font style attributes set.
- */
-private fun TextStyle.hasFontAttributes(): Boolean {
-    return fontFamily != null || fontStyle != null || fontWeight != null
-}
-
 /**
  * Converts [TextAlign] into [TextLayout] alignment constants.
  */
@@ -626,9 +294,3 @@
     TextAlign.End -> ALIGN_OPPOSITE
     else -> DEFAULT_ALIGNMENT
 }
-
-private fun Locale.toJavaLocale(): JavaLocale = (platformLocale as AndroidLocale).javaLocale
-
-@RequiresApi(api = 24)
-private fun LocaleList.toAndroidLocaleList(): AndroidLocaleList =
-    AndroidLocaleList(*map { it.toJavaLocale() }.toTypedArray())
\ No newline at end of file
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
new file mode 100644
index 0000000..35441ea
--- /dev/null
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphHelper.kt
@@ -0,0 +1,356 @@
+/*
+ * 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.platform
+
+import android.graphics.Typeface
+import android.os.Build
+import android.os.LocaleList as AndroidLocaleList
+import android.text.SpannableString
+import android.text.Spanned
+import android.text.TextPaint
+import android.text.style.AbsoluteSizeSpan
+import android.text.style.BackgroundColorSpan
+import android.text.style.ForegroundColorSpan
+import android.text.style.LeadingMarginSpan
+import android.text.style.LocaleSpan
+import android.text.style.RelativeSizeSpan
+import android.text.style.ScaleXSpan
+import android.text.style.StrikethroughSpan
+import android.text.style.UnderlineSpan
+import androidx.annotation.RequiresApi
+import androidx.text.LayoutCompat
+import androidx.text.TextLayout
+import androidx.text.style.BaselineShiftSpan
+import androidx.text.style.FontFeatureSpan
+import androidx.text.style.LetterSpacingSpan
+import androidx.text.style.ShadowSpan
+import androidx.text.style.SkewXSpan
+import androidx.text.style.TypefaceSpan
+import androidx.ui.core.Density
+import androidx.ui.core.LayoutDirection
+import androidx.ui.core.px
+import androidx.ui.core.withDensity
+import androidx.ui.graphics.toArgb
+import androidx.ui.text.AnnotatedString
+import androidx.ui.text.Locale
+import androidx.ui.text.LocaleList
+import androidx.ui.text.TextStyle
+import androidx.ui.text.font.FontStyle
+import androidx.ui.text.font.FontSynthesis
+import androidx.ui.text.font.FontWeight
+import androidx.ui.text.style.TextDecoration
+import androidx.ui.text.style.TextDirectionAlgorithm
+import androidx.ui.text.style.TextIndent
+import kotlin.math.roundToInt
+import java.util.Locale as JavaLocale
+
+internal fun TextPaint.applyTextStyle(
+    style: TextStyle,
+    typefaceAdapter: TypefaceAdapter,
+    density: Density
+): TextStyle {
+    // TODO(haoyuchang) remove this engine.ParagraphStyle
+    style.fontSize?.let {
+        withDensity(density) {
+            textSize = it.toPx().value
+        }
+    }
+
+    // fontSizeScale must be applied after fontSize is applied.
+    style.fontSizeScale?.let {
+        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)
+    }
+
+    style.localeList?.let {
+        if (Build.VERSION.SDK_INT >= 24) {
+            textLocales = it.toAndroidLocaleList()
+        } else {
+            val locale = if (it.isEmpty()) Locale.current else it[0]
+            textLocale = locale.toJavaLocale()
+        }
+    }
+
+    style.color?.let {
+        color = it.toArgb()
+    }
+
+    style.letterSpacing?.let {
+        letterSpacing = it
+    }
+
+    style.fontFeatureSettings?.let {
+        fontFeatureSettings = it
+    }
+
+    style.textGeometricTransform?.scaleX?.let {
+        textScaleX *= it
+    }
+
+    style.textGeometricTransform?.skewX?.let {
+        textSkewX += it
+    }
+
+    style.shadow?.let {
+        setShadowLayer(
+            it.blurRadius.value,
+            it.offset.dx,
+            it.offset.dy,
+            it.color.toArgb()
+        )
+    }
+
+    style.decoration?.let {
+        if (it.contains(TextDecoration.Underline)) {
+            isUnderlineText = true
+        }
+        if (it.contains(TextDecoration.LineThrough)) {
+            isStrikeThruText = true
+        }
+    }
+
+    // baselineShift and bgColor is reset in the Android Layout constructor.
+    // therefore we cannot apply them on paint, have to use spans.
+    return TextStyle(
+        background = style.background,
+        baselineShift = style.baselineShift
+    )
+}
+
+internal fun createStyledText(
+    text: String,
+    textIndent: TextIndent?,
+    textStyles: List<AnnotatedString.Item<TextStyle>>,
+    density: Density,
+    typefaceAdapter: TypefaceAdapter
+): CharSequence {
+    if (textStyles.isEmpty() && textIndent == null) return text
+    val spannableString = SpannableString(text)
+
+    textIndent?.let { indent ->
+        if (indent.firstLine == 0.px && indent.restLine == 0.px) return@let
+        spannableString.setSpan(
+            LeadingMarginSpan.Standard(
+                indent.firstLine.value.toInt(),
+                indent.restLine.value.toInt()
+            ),
+            0,
+            text.length,
+            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+        )
+    }
+
+    for (textStyle in textStyles) {
+        val start = textStyle.start
+        val end = textStyle.end
+        val style = textStyle.style
+
+        if (start < 0 || start >= text.length || end <= start || end > text.length) continue
+
+        // Be aware that SuperscriptSpan needs to be applied before all other spans which
+        // affect FontMetrics
+        style.baselineShift?.let {
+            spannableString.setSpan(
+                BaselineShiftSpan(it.multiplier),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+
+        style.color?.let {
+            spannableString.setSpan(
+                ForegroundColorSpan(it.toArgb()),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+
+        style.decoration?.let {
+            if (it.contains(TextDecoration.Underline)) {
+                spannableString.setSpan(
+                    UnderlineSpan(),
+                    start,
+                    end,
+                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                )
+            }
+            if (it.contains(TextDecoration.LineThrough)) {
+                spannableString.setSpan(
+                    StrikethroughSpan(),
+                    start,
+                    end,
+                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                )
+            }
+        }
+
+        style.fontSize?.let {
+            withDensity(density) {
+                spannableString.setSpan(
+                    AbsoluteSizeSpan(it.toPx().value.roundToInt(), true),
+                    start,
+                    end,
+                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                )
+            }
+        }
+
+        // Be aware that fontSizeScale must be applied after fontSize.
+        style.fontSizeScale?.let {
+            spannableString.setSpan(
+                RelativeSizeSpan(it),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+
+        style.fontFeatureSettings?.let {
+            spannableString.setSpan(
+                FontFeatureSpan(it),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+
+        if (style.hasFontAttributes()) {
+            spannableString.setSpan(
+                TypefaceSpan(createTypeface(style, typefaceAdapter)),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+
+        // TODO(Migration/haoyuchang): implement textBaseLine
+        style.textGeometricTransform?.scaleX?.let {
+            spannableString.setSpan(
+                ScaleXSpan(it),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+
+        style.textGeometricTransform?.skewX?.let {
+            spannableString.setSpan(
+                SkewXSpan(it),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+
+        // TODO(Migration/haoyuchang): support letter spacing with pixel.
+        style.letterSpacing?.let {
+            spannableString.setSpan(
+                LetterSpacingSpan(it),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+        // TODO(Migration/haoyuchang): implement height
+        style.localeList?.let {
+            spannableString.setSpan(
+                if (Build.VERSION.SDK_INT >= 24) {
+                    LocaleSpan(it.toAndroidLocaleList())
+                } else {
+                    val locale = if (it.isEmpty()) Locale.current else it[0]
+                    LocaleSpan(locale.toJavaLocale())
+                },
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+        // TODO(Migration/haoyuchang): framework only support background color now
+        style.background?.let {
+            spannableString.setSpan(
+                BackgroundColorSpan(it.toArgb()),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+        // TODO(Migration/haoyuchang): implement foreground or decide if we really need it
+        style.shadow?.let {
+            spannableString.setSpan(
+                ShadowSpan(it.color.toArgb(), it.offset.dx, it.offset.dy, it.blurRadius.value),
+                start,
+                end,
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+            )
+        }
+    }
+    return spannableString
+}
+
+/**
+ * Returns true if this [TextStyle] contains any font style attributes set.
+ */
+private fun TextStyle.hasFontAttributes(): Boolean {
+    return fontFamily != null || fontStyle != null || fontWeight != null
+}
+
+private fun createTypeface(style: TextStyle, typefaceAdapter: TypefaceAdapter): Typeface {
+    return typefaceAdapter.create(
+        fontFamily = style.fontFamily,
+        fontWeight = style.fontWeight ?: FontWeight.normal,
+        fontStyle = style.fontStyle ?: FontStyle.Normal,
+        fontSynthesis = style.fontSynthesis ?: FontSynthesis.All
+    )
+}
+
+/**
+ * For a given [TextDirectionAlgorithm] return [TextLayout] constants for text direction
+ * heuristics.
+ */
+internal fun resolveTextDirectionHeuristics(
+    layoutDirection: LayoutDirection,
+    textDirectionAlgorithm: TextDirectionAlgorithm?
+): Int {
+    if (textDirectionAlgorithm == null) {
+        return if (layoutDirection == LayoutDirection.Ltr) {
+            LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
+        } else {
+            LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
+        }
+    }
+
+    return when (textDirectionAlgorithm) {
+        TextDirectionAlgorithm.ContentOrLtr -> LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
+        TextDirectionAlgorithm.ContentOrRtl -> LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
+        TextDirectionAlgorithm.ForceLtr -> LayoutCompat.TEXT_DIRECTION_LTR
+        TextDirectionAlgorithm.ForceRtl -> LayoutCompat.TEXT_DIRECTION_RTL
+    }
+}
+
+private fun Locale.toJavaLocale(): JavaLocale = (platformLocale as AndroidLocale).javaLocale
+
+@RequiresApi(api = 24)
+private fun LocaleList.toAndroidLocaleList(): AndroidLocaleList =
+    AndroidLocaleList(*map { it.toJavaLocale() }.toTypedArray())
\ No newline at end of file
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
new file mode 100644
index 0000000..e8b8b6ac
--- /dev/null
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
@@ -0,0 +1,76 @@
+/*
+ * 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.platform
+
+import android.graphics.Paint
+import android.text.TextPaint
+import androidx.text.LayoutIntrinsics
+import androidx.ui.core.Density
+import androidx.ui.core.LayoutDirection
+import androidx.ui.text.AnnotatedString
+import androidx.ui.text.ParagraphIntrinsics
+import androidx.ui.text.ParagraphStyle
+import androidx.ui.text.TextStyle
+
+internal class AndroidParagraphIntrinsics(
+    val text: String,
+    val style: TextStyle,
+    val paragraphStyle: ParagraphStyle,
+    val textStyles: List<AnnotatedString.Item<TextStyle>>,
+    val typefaceAdapter: TypefaceAdapter,
+    val density: Density,
+    // TODO(siyamed) move layoutDirection and text direction resolve to TextDelegate
+    val layoutDirection: LayoutDirection
+) : ParagraphIntrinsics {
+
+    internal val textPaint = TextPaint(Paint.ANTI_ALIAS_FLAG)
+
+    internal val charSequence: CharSequence
+
+    internal val layoutIntrinsics: LayoutIntrinsics
+
+    override val maxIntrinsicWidth: Float
+        get() = layoutIntrinsics.maxIntrinsicWidth
+
+    override val minIntrinsicWidth: Float
+        get() = layoutIntrinsics.minIntrinsicWidth
+
+    internal val textDirectionHeuristic = resolveTextDirectionHeuristics(
+        layoutDirection,
+        paragraphStyle.textDirectionAlgorithm
+    )
+
+    init {
+        val notAppliedStyle = textPaint.applyTextStyle(style, typefaceAdapter, density)
+
+        charSequence = createStyledText(
+            text = text,
+            textIndent = paragraphStyle.textIndent,
+            textStyles = listOf(
+                AnnotatedString.Item(
+                    notAppliedStyle,
+                    0,
+                    text.length
+                )
+            ) + textStyles,
+            density = density,
+            typefaceAdapter = typefaceAdapter
+        )
+
+        layoutIntrinsics = LayoutIntrinsics(charSequence, textPaint, textDirectionHeuristic)
+    }
+}
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/TextDelegateTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextDelegateTest.kt
index 893b59b..2e26f49 100644
--- a/ui/ui-text/src/test/java/androidx/ui/text/TextDelegateTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/TextDelegateTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.core.Density
 import androidx.ui.core.LayoutDirection
-import androidx.ui.painting.Canvas
+import androidx.ui.graphics.Canvas
 import androidx.ui.text.font.Font
 import androidx.ui.text.style.TextOverflow
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text/src/test/java/androidx/ui/text/TextStyleTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextStyleTest.kt
index a9effe5..443e61b 100644
--- a/ui/ui-text/src/test/java/androidx/ui/text/TextStyleTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/TextStyleTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.text.style.lerp
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.lerp
-import androidx.ui.painting.Shadow
+import androidx.ui.graphics.Shadow
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-vector/src/main/java/androidx/ui/graphics/vector/Vector.kt b/ui/ui-vector/src/main/java/androidx/ui/graphics/vector/Vector.kt
index 5c34c66..2c01d31 100644
--- a/ui/ui-vector/src/main/java/androidx/ui/graphics/vector/Vector.kt
+++ b/ui/ui-vector/src/main/java/androidx/ui/graphics/vector/Vector.kt
@@ -18,17 +18,16 @@
 
 import android.graphics.Matrix
 import androidx.ui.engine.geometry.Offset
-import androidx.ui.painting.Canvas
-import androidx.ui.painting.Image
-import androidx.ui.painting.Paint
-import androidx.ui.painting.PaintingStyle
-import androidx.ui.painting.Path
-import androidx.ui.painting.StrokeCap
-import androidx.ui.painting.StrokeJoin
+import androidx.ui.graphics.Canvas
+import androidx.ui.graphics.Image
+import androidx.ui.graphics.Paint
+import androidx.ui.graphics.PaintingStyle
+import androidx.ui.graphics.Path
+import androidx.ui.graphics.StrokeCap
+import androidx.ui.graphics.StrokeJoin
 import androidx.ui.core.Px
 import androidx.ui.graphics.Brush
-import androidx.ui.graphics.EmptyBrush
-import androidx.ui.painting.withSave
+import androidx.ui.graphics.withSave
 import kotlin.math.ceil
 
 const val DefaultGroupName = ""
@@ -48,15 +47,11 @@
  */
 internal val EmptyPaint = Paint()
 
-class PathDelegate(val delegate: PathBuilder.() -> Unit)
-
-// TODO figure out how to use UNIONTYPE with a Lambda receiver. Cannot cast to KClass which is what
-// UnionType is expecting
-// TODO uncomment usage of UnionType when Compose can be accessed across modules
-typealias PathData = /*@UnionType(String::class, PathDelegate::class, Array<PathNode>::class)*/ Any?
-
-// TODO (njawad) change to color int
-typealias BrushType = /*@UnionType(Int::class, Brush::class)*/ Any
+inline fun PathData(block: PathBuilder.() -> Unit): Array<PathNode> =
+    with(PathBuilder()) {
+        block()
+        getNodes()
+    }
 
 const val DefaultPathName = ""
 const val DefaultAlpha = 1.0f
@@ -129,11 +124,11 @@
 
 class PathComponent(val name: String) : VNode() {
 
-    var fill: Brush = EmptyBrush
+    var fill: Brush? = null
         set(value) {
             field = value
             updateFillPaint {
-                field.applyBrush(this)
+                field?.applyTo(this)
             }
         }
 
@@ -145,7 +140,7 @@
             }
         }
 
-    var pathNodes: Array<PathNode> = emptyArray()
+    var pathData: Array<PathNode> = emptyArray()
         set(value) {
             field = value
             isPathDirty = true
@@ -167,11 +162,11 @@
             }
         }
 
-    var stroke: Brush = EmptyBrush
+    var stroke: Brush? = null
         set(value) {
             field = value
             updateStrokePaint {
-                field.applyBrush(this)
+                field?.applyTo(this)
             }
         }
 
@@ -208,7 +203,7 @@
 
     private val parser = PathParser()
 
-    private fun updateStrokePaint(strokePaintUpdater: Paint.() -> Unit) {
+    private inline fun updateStrokePaint(strokePaintUpdater: Paint.() -> Unit) {
         if (strokePaint == null) {
             strokePaint = createStrokePaint()
         } else {
@@ -224,7 +219,7 @@
         strokeCap = strokeLineCap
         strokeJoin = strokeLineJoin
         strokeMiterLimit = strokeLineMiter
-        stroke.applyBrush(this)
+        stroke?.applyTo(this)
     }
 
     private fun updateFillPaint(fillPaintUpdater: Paint.() -> Unit) {
@@ -239,13 +234,13 @@
         isAntiAlias = true
         alpha = fillAlpha
         style = PaintingStyle.fill
-        fill.applyBrush(this)
+        fill?.applyTo(this)
     }
 
     private fun updatePath() {
         parser.clear()
         path.reset()
-        parser.addPathNodes(pathNodes).toPath(path)
+        parser.addPathNodes(pathData).toPath(path)
     }
 
     override fun draw(canvas: Canvas) {
@@ -255,7 +250,7 @@
         }
 
         val fillBrush = fill
-        if (fillBrush !== EmptyBrush) {
+        if (fillBrush != null) {
             var targetFillPaint = fillPaint
             if (targetFillPaint == null) {
                 targetFillPaint = createFillPaint()
@@ -265,7 +260,7 @@
         }
 
         val strokeBrush = stroke
-        if (strokeBrush !== EmptyBrush) {
+        if (strokeBrush != null) {
             var targetStrokePaint = strokePaint
             if (targetStrokePaint == null) {
                 targetStrokePaint = createStrokePaint()
@@ -286,14 +281,14 @@
 
     private val children = mutableListOf<VNode>()
 
-    var clipPathNodes: Array<PathNode> = EmptyPath
+    var clipPathData: Array<PathNode> = EmptyPath
         set(value) {
             field = value
             isClipPathDirty = true
         }
 
     private val willClipPath: Boolean
-        get() = clipPathNodes.isNotEmpty()
+        get() = clipPathData.isNotEmpty()
 
     private var isClipPathDirty = true
 
@@ -318,7 +313,7 @@
                 targetClip.reset()
             }
 
-            targetParser.addPathNodes(clipPathNodes).toPath(targetClip)
+            targetParser.addPathNodes(clipPathData).toPath(targetClip)
         }
     }
 
@@ -457,17 +452,3 @@
         return sb.toString()
     }
 }
-
-fun createPath(pathData: PathData): Array<PathNode> {
-    @Suppress("UNCHECKED_CAST")
-    return when (pathData) {
-        is Array<*> -> pathData as Array<PathNode>
-        is PathDelegate -> {
-            with(PathBuilder()) {
-                pathData.delegate(this)
-                getNodes()
-            }
-        }
-        else -> throw IllegalArgumentException("Must be array of PathNodes or PathDelegate")
-    }
-}
\ No newline at end of file
diff --git a/viewpager2/build.gradle b/viewpager2/build.gradle
index 9d0aa55..80d6cc9 100644
--- a/viewpager2/build.gradle
+++ b/viewpager2/build.gradle
@@ -28,7 +28,7 @@
 dependencies {
     api("androidx.annotation:annotation:1.1.0")
     implementation("androidx.core:core:1.1.0")
-    api("androidx.fragment:fragment:1.1.0-rc01")
+    api("androidx.fragment:fragment:1.1.0")
     api(project(":recyclerview:recyclerview"))
     implementation("androidx.collection:collection:1.1.0")
 
diff --git a/viewpager2/integration-tests/testapp/build.gradle b/viewpager2/integration-tests/testapp/build.gradle
index 00fbbe0..6cdafa6 100644
--- a/viewpager2/integration-tests/testapp/build.gradle
+++ b/viewpager2/integration-tests/testapp/build.gradle
@@ -36,7 +36,7 @@
 dependencies {
     api(KOTLIN_STDLIB)
     implementation(project(":viewpager2"))
-    implementation("androidx.activity:activity-ktx:1.0.0-rc01")
+    implementation("androidx.activity:activity-ktx:1.0.0")
     implementation("com.google.android.material:material:1.1.0-alpha08") {
         exclude group: 'androidx.viewpager2', module: 'viewpager2'
     }
diff --git a/webkit/integration-tests/testapp/src/main/assets/www/ajax_requests.html b/webkit/integration-tests/testapp/src/main/assets/www/ajax_requests.html
index 66d4564..12299b1 100644
--- a/webkit/integration-tests/testapp/src/main/assets/www/ajax_requests.html
+++ b/webkit/integration-tests/testapp/src/main/assets/www/ajax_requests.html
@@ -18,26 +18,38 @@
 
     <!-- Load html file from android_assets -->
     <script type="text/javascript">
-        fetch('https://example.com/androidx_webkit/example/assets/www/some_text.html')
-            .then(response => response.text())
-            .then(response => {
-                document.getElementById("assets_html").innerHTML = response;
-            })
-            .catch(err => {
-                document.getElementById("assets_html").innerHTML = "Loading file from assets failed";
-            })
+        var xhr = new XMLHttpRequest();
+        xhr.onreadystatechange = function() {
+            if (this.readyState === 4 && this.status === 200) {
+                document.getElementById("assets_html").innerHTML = this.responseText;
+            } else if (this.status !== 200) {
+                document.getElementById("assets_html").innerHTML =
+                        "Loading file from assets failed (status=" + this.status + ")";
+            }
+        };
+        xhr.onerror = function() {
+            document.getElementById("assets_html").innerHTML = "Loading file from assets failed";
+        };
+        xhr.open("GET", 'https://example.com/androidx_webkit/example/assets/www/some_text.html', true);
+        xhr.send();
     </script>
 
     <!-- Load html file from android_resources -->
     <script type="text/javascript">
-        fetch('https://example.com/androidx_webkit/example/res/raw/some_text.html')
-            .then(response => response.text())
-            .then(response => {
-                document.getElementById("res_html").innerHTML = response;
-            })
-            .catch(err => {
-                document.getElementById("res_html").innerHTML = "Loading file from resources failed";
-            })
+        var xhr = new XMLHttpRequest();
+        xhr.onreadystatechange = function() {
+            if (this.readyState === 4 && this.status === 200) {
+                document.getElementById("res_html").innerHTML = this.responseText;
+            } else if (this.status !== 200) {
+                document.getElementById("res_html").innerHTML =
+                        "Loading file from resources failed (status=" + this.status + ")";
+            }
+        };
+        xhr.onerror = function() {
+            document.getElementById("res_html").innerHTML = "Loading file from resources failed";
+        };
+        xhr.open("GET", 'https://example.com/androidx_webkit/example/res/raw/some_text.html', true);
+        xhr.send();
     </script>
 </head>
 
diff --git a/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt b/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
index f127aba..8a66493 100644
--- a/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
+++ b/work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
@@ -24,16 +24,25 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.work.Configuration
+import androidx.work.OneTimeWorkRequest
 import androidx.work.impl.WorkManagerImpl
 import androidx.work.impl.utils.SerialExecutor
 import androidx.work.impl.utils.SynchronousExecutor
+import androidx.work.impl.utils.WorkTimer
 import com.google.android.gms.gcm.GcmNetworkManager
 import com.google.android.gms.gcm.TaskParams
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.any
+import org.mockito.ArgumentMatchers.anyLong
+import org.mockito.ArgumentMatchers.eq
 import org.mockito.Mockito.`when`
+import org.mockito.Mockito.atLeastOnce
 import org.mockito.Mockito.mock
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
 import java.util.concurrent.Executor
 
 @RunWith(AndroidJUnit4::class)
@@ -42,6 +51,7 @@
     lateinit var mContext: Context
     lateinit var mExecutor: Executor
     lateinit var mWorkManager: WorkManagerImpl
+    lateinit var mWorkTimer: WorkTimer
     lateinit var mDispatcher: WorkManagerGcmDispatcher
 
     @Before
@@ -89,7 +99,8 @@
 
         mWorkManager = WorkManagerImpl(mContext, configuration, workTaskExecutor, true)
         WorkManagerImpl.setDelegate(mWorkManager)
-        mDispatcher = WorkManagerGcmDispatcher(mContext)
+        mWorkTimer = spy(WorkTimer())
+        mDispatcher = WorkManagerGcmDispatcher(mContext, mWorkTimer)
     }
 
     @Test
@@ -107,4 +118,16 @@
         val result = mDispatcher.onRunTask(taskParams)
         assert(result == GcmNetworkManager.RESULT_FAILURE)
     }
+
+    @Test
+    fun testWorkSpecTimer() {
+        val request = OneTimeWorkRequest.Builder(TestWorker::class.java).build()
+        mWorkManager.workDatabase.workSpecDao().insertWorkSpec(request.workSpec)
+        val taskParams = mock(TaskParams::class.java)
+        `when`(taskParams.tag).thenReturn(request.workSpec.id)
+        val result = mDispatcher.onRunTask(taskParams)
+        assert(result == GcmNetworkManager.RESULT_SUCCESS)
+        verify(mWorkTimer, times(1)).startTimer(eq(request.workSpec.id), anyLong(), any())
+        verify(mWorkTimer, atLeastOnce()).stopTimer(eq(request.workSpec.id))
+    }
 }
diff --git a/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java b/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
index 77b2ca9..9a73084 100644
--- a/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
+++ b/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcher.java
@@ -18,6 +18,7 @@
 
 
 import android.content.Context;
+import android.os.PowerManager;
 
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
@@ -29,6 +30,8 @@
 import androidx.work.impl.WorkDatabase;
 import androidx.work.impl.WorkManagerImpl;
 import androidx.work.impl.model.WorkSpec;
+import androidx.work.impl.utils.WakeLocks;
+import androidx.work.impl.utils.WorkTimer;
 
 import com.google.android.gms.gcm.GcmNetworkManager;
 import com.google.android.gms.gcm.TaskParams;
@@ -46,11 +49,18 @@
     static final String TAG = Logger.tagWithPrefix("WrkMgrGcmDispatcher");
 
     private static final long AWAIT_TIME_IN_MINUTES = 10;
+    private static final long AWAIT_TIME_IN_MILLISECONDS = AWAIT_TIME_IN_MINUTES * 60 * 1000;
+
+    private final Context mContext;
+    private final WorkTimer mWorkTimer;
 
     // Synthetic access
     WorkManagerImpl mWorkManagerImpl;
 
-    public WorkManagerGcmDispatcher(@NonNull Context context) {
+
+    public WorkManagerGcmDispatcher(@NonNull Context context, @NonNull WorkTimer workTimer) {
+        mContext = context.getApplicationContext();
+        mWorkTimer = workTimer;
         mWorkManagerImpl = WorkManagerImpl.getInstance(context);
     }
 
@@ -89,17 +99,25 @@
         }
 
         WorkSpecExecutionListener listener = new WorkSpecExecutionListener(workSpecId);
+        WorkSpecTimeLimitExceededListener timeLimitExceededListener =
+                new WorkSpecTimeLimitExceededListener(mWorkManagerImpl);
         Processor processor = mWorkManagerImpl.getProcessor();
         processor.addExecutionListener(listener);
+        String wakeLockTag = String.format("WorkGcm-onRunTask (%s)", workSpecId);
+        PowerManager.WakeLock wakeLock = WakeLocks.newWakeLock(mContext, wakeLockTag);
         mWorkManagerImpl.startWork(workSpecId);
+        mWorkTimer.startTimer(workSpecId, AWAIT_TIME_IN_MILLISECONDS, timeLimitExceededListener);
 
         try {
+            wakeLock.acquire();
             listener.getLatch().await(AWAIT_TIME_IN_MINUTES, TimeUnit.MINUTES);
         } catch (InterruptedException exception) {
             Logger.get().debug(TAG, String.format("Rescheduling WorkSpec %s", workSpecId));
             return reschedule(workSpecId);
         } finally {
             processor.removeExecutionListener(listener);
+            mWorkTimer.stopTimer(workSpecId);
+            wakeLock.release();
         }
 
         if (listener.needsReschedule()) {
@@ -132,6 +150,13 @@
         }
     }
 
+    /**
+     * Cleans up resources when the {@link WorkManagerGcmDispatcher} is no longer in use.
+     */
+    public void onDestroy() {
+        mWorkTimer.onDestroy();
+    }
+
     private int reschedule(@NonNull String workSpecId) {
         WorkDatabase workDatabase = mWorkManagerImpl.getWorkDatabase();
         workDatabase.beginTransaction();
@@ -156,6 +181,22 @@
         return GcmNetworkManager.RESULT_SUCCESS;
     }
 
+    static class WorkSpecTimeLimitExceededListener implements WorkTimer.TimeLimitExceededListener {
+        private static final String TAG = Logger.tagWithPrefix("WrkTimeLimitExceededLstnr");
+
+        private final WorkManagerImpl mWorkManager;
+
+        WorkSpecTimeLimitExceededListener(@NonNull WorkManagerImpl workManager) {
+            mWorkManager = workManager;
+        }
+
+        @Override
+        public void onTimeLimitExceeded(@NonNull String workSpecId) {
+            Logger.get().debug(TAG, String.format("WorkSpec time limit exceeded %s", workSpecId));
+            mWorkManager.stopWork(workSpecId);
+        }
+    }
+
     static class WorkSpecExecutionListener implements ExecutionListener {
         private static final String TAG = Logger.tagWithPrefix("WorkSpecExecutionListener");
         private final String mWorkSpecId;
diff --git a/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmService.java b/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmService.java
index 7ef2ba0..2d9d5bd 100644
--- a/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmService.java
+++ b/work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmService.java
@@ -19,6 +19,8 @@
 
 import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
+import androidx.work.Logger;
+import androidx.work.impl.utils.WorkTimer;
 
 import com.google.android.gms.gcm.GcmTaskService;
 import com.google.android.gms.gcm.TaskParams;
@@ -28,17 +30,22 @@
  * {@link androidx.work.WorkRequest}s.
  */
 public class WorkManagerGcmService extends GcmTaskService {
+
+    private static final String TAG = "WorkManagerGcmService";
+
+    private boolean mIsShutdown;
     private WorkManagerGcmDispatcher mGcmDispatcher;
 
     @Override
     public void onCreate() {
         super.onCreate();
-        mGcmDispatcher = new WorkManagerGcmDispatcher(getApplicationContext());
+        initializeDispatcher();
     }
 
     @Override
     @MainThread
     public void onInitializeTasks() {
+        checkDispatcher();
         // Reschedule all eligible work, as all tasks have been cleared in GCMNetworkManager.
         // This typically happens after an upgrade.
         mGcmDispatcher.onInitializeTasks();
@@ -46,6 +53,28 @@
 
     @Override
     public int onRunTask(@NonNull TaskParams taskParams) {
+        checkDispatcher();
         return mGcmDispatcher.onRunTask(taskParams);
     }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mIsShutdown = true;
+        mGcmDispatcher.onDestroy();
+    }
+
+    @MainThread
+    private void checkDispatcher() {
+        if (mIsShutdown) {
+            Logger.get().debug(TAG, "Re-initializing dispatcher after a request to shutdown");
+            initializeDispatcher();
+        }
+    }
+
+    @MainThread
+    private void initializeDispatcher() {
+        mIsShutdown = false;
+        mGcmDispatcher = new WorkManagerGcmDispatcher(getApplicationContext(), new WorkTimer());
+    }
 }
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java
index f67ea77..43c60eb 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/background/systemalarm/WorkTimerTest.java
@@ -25,6 +25,7 @@
 import androidx.annotation.NonNull;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.LargeTest;
+import androidx.work.impl.utils.WorkTimer;
 
 import org.junit.Before;
 import org.junit.Test;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/Processor.java b/work/workmanager/src/main/java/androidx/work/impl/Processor.java
index 5f774ea..1dc6631 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/Processor.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/Processor.java
@@ -149,6 +149,7 @@
                     workSpecId));
             if (mForegroundLock == null) {
                 mForegroundLock = WakeLocks.newWakeLock(mAppContext, FOREGROUND_WAKELOCK_TAG);
+                mForegroundLock.acquire();
             }
             WorkerWrapper wrapper = mEnqueuedWorkMap.remove(workSpecId);
             if (wrapper != null) {
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
index 8fcfd26..a31a0a07 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/DelayMetCommandHandler.java
@@ -32,6 +32,7 @@
 import androidx.work.impl.constraints.WorkConstraintsTracker;
 import androidx.work.impl.model.WorkSpec;
 import androidx.work.impl.utils.WakeLocks;
+import androidx.work.impl.utils.WorkTimer;
 import androidx.work.impl.utils.taskexecutor.TaskExecutor;
 
 import java.util.Collections;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
index 5ddb288..8c1b5e5 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
@@ -34,6 +34,7 @@
 import androidx.work.impl.WorkManagerImpl;
 import androidx.work.impl.utils.SerialExecutor;
 import androidx.work.impl.utils.WakeLocks;
+import androidx.work.impl.utils.WorkTimer;
 import androidx.work.impl.utils.taskexecutor.TaskExecutor;
 
 import java.util.ArrayList;
diff --git a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/WorkTimer.java b/work/workmanager/src/main/java/androidx/work/impl/utils/WorkTimer.java
similarity index 73%
rename from work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/WorkTimer.java
rename to work/workmanager/src/main/java/androidx/work/impl/utils/WorkTimer.java
index d1b8491..b6922cf 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/WorkTimer.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/utils/WorkTimer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2018 The Android Open Source Project
+ * 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.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.work.impl.background.systemalarm;
+package androidx.work.impl.utils;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.RestrictTo;
@@ -37,7 +37,7 @@
  * @hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class WorkTimer {
+public class WorkTimer {
 
     private static final String TAG = Logger.tagWithPrefix("WorkTimer");
 
@@ -60,15 +60,25 @@
     final Map<String, TimeLimitExceededListener> mListeners;
     final Object mLock;
 
-    WorkTimer() {
+    public WorkTimer() {
         mTimerMap = new HashMap<>();
         mListeners = new HashMap<>();
         mLock = new Object();
         mExecutorService = Executors.newSingleThreadScheduledExecutor(mBackgroundThreadFactory);
     }
 
+    /**
+     * Keeps track of execution time for a given {@link androidx.work.impl.model.WorkSpec}.
+     * The {@link TimeLimitExceededListener} is notified when the execution time exceeds {@code
+     * processingTimeMillis}.
+     *
+     * @param workSpecId           The {@link androidx.work.impl.model.WorkSpec} id
+     * @param processingTimeMillis The allocated time for execution in milliseconds
+     * @param listener             The listener which is notified when the execution time exceeds
+     *                             {@code processingTimeMillis}
+     */
     @SuppressWarnings("FutureReturnValueIgnored")
-    void startTimer(@NonNull final String workSpecId,
+    public void startTimer(@NonNull final String workSpecId,
             long processingTimeMillis,
             @NonNull TimeLimitExceededListener listener) {
 
@@ -83,7 +93,12 @@
         }
     }
 
-    void stopTimer(@NonNull final String workSpecId) {
+    /**
+     * Stops tracking the execution time for a given {@link androidx.work.impl.model.WorkSpec}.
+     *
+     * @param workSpecId The {@link androidx.work.impl.model.WorkSpec} id
+     */
+    public void stopTimer(@NonNull final String workSpecId) {
         synchronized (mLock) {
             WorkTimerRunnable removed = mTimerMap.remove(workSpecId);
             if (removed != null) {
@@ -97,7 +112,7 @@
      * This method needs to be idempotent. This could be called more than once, and therefore,
      * this method should only perform cleanup when necessary.
      */
-    void onDestroy() {
+    public void onDestroy() {
         if (!mExecutorService.isShutdown()) {
             // Calling shutdown() waits for pending scheduled WorkTimerRunnable's which is not
             // something we care about. Hence call shutdownNow().
@@ -106,24 +121,30 @@
     }
 
     @VisibleForTesting
-    synchronized Map<String, WorkTimerRunnable> getTimerMap() {
+    @NonNull
+    public synchronized Map<String, WorkTimerRunnable> getTimerMap() {
         return mTimerMap;
     }
 
     @VisibleForTesting
-    synchronized Map<String, TimeLimitExceededListener> getListeners() {
+    @NonNull
+    public synchronized Map<String, TimeLimitExceededListener> getListeners() {
         return mListeners;
     }
 
     @VisibleForTesting
-    ScheduledExecutorService getExecutorService() {
+    @NonNull
+    public ScheduledExecutorService getExecutorService() {
         return mExecutorService;
     }
 
     /**
      * The actual runnable scheduled on the scheduled executor.
+     *
+     * @hide
      */
-    static class WorkTimerRunnable implements Runnable {
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public static class WorkTimerRunnable implements Runnable {
         static final String TAG = "WrkTimerRunnable";
 
         private final WorkTimer mWorkTimer;
@@ -152,7 +173,17 @@
         }
     }
 
-    interface TimeLimitExceededListener {
+    /**
+     * @hide
+     */
+    @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+    public interface TimeLimitExceededListener {
+        /**
+         * The time limit exceeded listener.
+         *
+         * @param workSpecId The {@link androidx.work.impl.model.WorkSpec} id for which time limit
+         *                   has exceeded.
+         */
         void onTimeLimitExceeded(@NonNull String workSpecId);
     }
 }