diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 102a6f5..4dd58da 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -128,7 +128,7 @@
 
 Here is what a typical pull request workflow looks like:
 
-1.  Create a GitHub pull request from **your forked repository **to the androidx-master-dev branch on GitHub.
+1.  Create a GitHub pull request from **your forked repository** to the androidx-master-dev branch on GitHub.
 2.  Sign the Contributor’s License Agreement at https://cla.developers.google.com/ to get @googlebot to give you the `cla: yes` label.
 3.  Your PR will be reviewed using the GitHub pull request flow. You can address the comments / suggestions in your forked repository and update the pull request as normal.
 4.  Once the changes look good, a Googler will Approve your pull request on GitHub.
diff --git a/activity/activity/api/1.2.0-alpha07.txt b/activity/activity/api/1.2.0-alpha07.txt
index e2b5aed..6883231 100644
--- a/activity/activity/api/1.2.0-alpha07.txt
+++ b/activity/activity/api/1.2.0-alpha07.txt
@@ -1,9 +1,10 @@
 // Signature format: 3.0
 package androidx.activity {
 
-  public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+  public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
     ctor public ComponentActivity();
     ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method @Deprecated public Object? getLastCustomNonConfigurationInstance();
@@ -17,6 +18,7 @@
     method public final Object? onRetainNonConfigurationInstance();
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
     method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
@@ -46,6 +48,26 @@
 
 }
 
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper(androidx.activity.contextaware.ContextAware);
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void dispatchOnContextAvailable(android.content.Context, android.os.Bundle?);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(androidx.activity.contextaware.ContextAware, android.content.Context, android.os.Bundle?);
+  }
+
+}
+
 package androidx.activity.result {
 
   public final class ActivityResult implements android.os.Parcelable {
diff --git a/activity/activity/api/current.txt b/activity/activity/api/current.txt
index e2b5aed..6883231 100644
--- a/activity/activity/api/current.txt
+++ b/activity/activity/api/current.txt
@@ -1,9 +1,10 @@
 // Signature format: 3.0
 package androidx.activity {
 
-  public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+  public class ComponentActivity extends android.app.Activity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
     ctor public ComponentActivity();
     ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method @Deprecated public Object? getLastCustomNonConfigurationInstance();
@@ -17,6 +18,7 @@
     method public final Object? onRetainNonConfigurationInstance();
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
     method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
@@ -46,6 +48,26 @@
 
 }
 
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper(androidx.activity.contextaware.ContextAware);
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void dispatchOnContextAvailable(android.content.Context, android.os.Bundle?);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(androidx.activity.contextaware.ContextAware, android.content.Context, android.os.Bundle?);
+  }
+
+}
+
 package androidx.activity.result {
 
   public final class ActivityResult implements android.os.Parcelable {
diff --git a/activity/activity/api/public_plus_experimental_1.2.0-alpha07.txt b/activity/activity/api/public_plus_experimental_1.2.0-alpha07.txt
index 1daf641..c40287f 100644
--- a/activity/activity/api/public_plus_experimental_1.2.0-alpha07.txt
+++ b/activity/activity/api/public_plus_experimental_1.2.0-alpha07.txt
@@ -1,9 +1,10 @@
 // Signature format: 3.0
 package androidx.activity {
 
-  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
     ctor public ComponentActivity();
     ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method @Deprecated public Object? getLastCustomNonConfigurationInstance();
@@ -16,6 +17,7 @@
     method public final Object? onRetainNonConfigurationInstance();
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
     method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
@@ -45,6 +47,26 @@
 
 }
 
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper(androidx.activity.contextaware.ContextAware);
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void dispatchOnContextAvailable(android.content.Context, android.os.Bundle?);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(androidx.activity.contextaware.ContextAware, android.content.Context, android.os.Bundle?);
+  }
+
+}
+
 package androidx.activity.result {
 
   public final class ActivityResult implements android.os.Parcelable {
diff --git a/activity/activity/api/public_plus_experimental_current.txt b/activity/activity/api/public_plus_experimental_current.txt
index 1daf641..c40287f 100644
--- a/activity/activity/api/public_plus_experimental_current.txt
+++ b/activity/activity/api/public_plus_experimental_current.txt
@@ -1,9 +1,10 @@
 // Signature format: 3.0
 package androidx.activity {
 
-  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
     ctor public ComponentActivity();
     ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method @Deprecated public Object? getLastCustomNonConfigurationInstance();
@@ -16,6 +17,7 @@
     method public final Object? onRetainNonConfigurationInstance();
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
     method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
@@ -45,6 +47,26 @@
 
 }
 
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper(androidx.activity.contextaware.ContextAware);
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void dispatchOnContextAvailable(android.content.Context, android.os.Bundle?);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(androidx.activity.contextaware.ContextAware, android.content.Context, android.os.Bundle?);
+  }
+
+}
+
 package androidx.activity.result {
 
   public final class ActivityResult implements android.os.Parcelable {
diff --git a/activity/activity/api/restricted_1.2.0-alpha07.txt b/activity/activity/api/restricted_1.2.0-alpha07.txt
index 1daf641..c40287f 100644
--- a/activity/activity/api/restricted_1.2.0-alpha07.txt
+++ b/activity/activity/api/restricted_1.2.0-alpha07.txt
@@ -1,9 +1,10 @@
 // Signature format: 3.0
 package androidx.activity {
 
-  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
     ctor public ComponentActivity();
     ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method @Deprecated public Object? getLastCustomNonConfigurationInstance();
@@ -16,6 +17,7 @@
     method public final Object? onRetainNonConfigurationInstance();
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
     method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
@@ -45,6 +47,26 @@
 
 }
 
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper(androidx.activity.contextaware.ContextAware);
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void dispatchOnContextAvailable(android.content.Context, android.os.Bundle?);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(androidx.activity.contextaware.ContextAware, android.content.Context, android.os.Bundle?);
+  }
+
+}
+
 package androidx.activity.result {
 
   public final class ActivityResult implements android.os.Parcelable {
diff --git a/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index 1daf641..c40287f 100644
--- a/activity/activity/api/restricted_current.txt
+++ b/activity/activity/api/restricted_current.txt
@@ -1,9 +1,10 @@
 // Signature format: 3.0
 package androidx.activity {
 
-  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
+  public class ComponentActivity extends androidx.core.app.ComponentActivity implements androidx.activity.result.ActivityResultCaller androidx.activity.result.ActivityResultRegistryOwner androidx.activity.contextaware.ContextAware androidx.lifecycle.HasDefaultViewModelProviderFactory androidx.lifecycle.LifecycleOwner androidx.activity.OnBackPressedDispatcherOwner androidx.savedstate.SavedStateRegistryOwner androidx.lifecycle.ViewModelStoreOwner {
     ctor public ComponentActivity();
     ctor @ContentView public ComponentActivity(@LayoutRes int);
+    method public final void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method public final androidx.activity.result.ActivityResultRegistry getActivityResultRegistry();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
     method @Deprecated public Object? getLastCustomNonConfigurationInstance();
@@ -16,6 +17,7 @@
     method public final Object? onRetainNonConfigurationInstance();
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultRegistry, androidx.activity.result.ActivityResultCallback<O!>);
     method public final <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerForActivityResult(androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public final void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int);
     method @Deprecated public void startActivityForResult(android.content.Intent!, int, android.os.Bundle?);
     method @Deprecated public void startIntentSenderForResult(android.content.IntentSender!, int, android.content.Intent?, int, int, int) throws android.content.IntentSender.SendIntentException;
@@ -45,6 +47,26 @@
 
 }
 
+package androidx.activity.contextaware {
+
+  public interface ContextAware {
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public final class ContextAwareHelper {
+    ctor public ContextAwareHelper(androidx.activity.contextaware.ContextAware);
+    method public void addOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+    method public void dispatchOnContextAvailable(android.content.Context, android.os.Bundle?);
+    method public void removeOnContextAvailableListener(androidx.activity.contextaware.OnContextAvailableListener);
+  }
+
+  public interface OnContextAvailableListener {
+    method public void onContextAvailable(androidx.activity.contextaware.ContextAware, android.content.Context, android.os.Bundle?);
+  }
+
+}
+
 package androidx.activity.result {
 
   public final class ActivityResult implements android.os.Parcelable {
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
index 09de5e3..d8ac2bf 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityLifecycleTest.kt
@@ -28,6 +28,7 @@
 import org.junit.runner.RunWith
 
 internal enum class LifecycleSource {
+    CONTEXT_AWARE,
     ACTIVITY,
     ACTIVITY_CALLBACK
 }
@@ -48,6 +49,7 @@
         // followed by the activity's lifecycle observers
         assertThat(events)
             .containsExactly(
+                LifecycleSource.CONTEXT_AWARE to Lifecycle.Event.ON_CREATE,
                 LifecycleSource.ACTIVITY_CALLBACK to Lifecycle.Event.ON_CREATE,
                 LifecycleSource.ACTIVITY to Lifecycle.Event.ON_CREATE,
                 LifecycleSource.ACTIVITY_CALLBACK to Lifecycle.Event.ON_START,
@@ -69,6 +71,9 @@
     internal val events = mutableListOf<Pair<LifecycleSource, Lifecycle.Event>>()
 
     init {
+        addOnContextAvailableListener { _, _, _ ->
+            events.add(LifecycleSource.CONTEXT_AWARE to Lifecycle.Event.ON_CREATE)
+        }
         lifecycle.addObserver(LifecycleEventObserver { _, event ->
             events.add(LifecycleSource.ACTIVITY to event)
         })
diff --git a/activity/activity/src/androidTest/java/androidx/activity/contextaware/ContextAwareHelperTest.kt b/activity/activity/src/androidTest/java/androidx/activity/contextaware/ContextAwareHelperTest.kt
new file mode 100644
index 0000000..3087989
--- /dev/null
+++ b/activity/activity/src/androidTest/java/androidx/activity/contextaware/ContextAwareHelperTest.kt
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2020 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.activity.contextaware
+
+import android.content.Context
+import android.os.Bundle
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SmallTest
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidJUnit4::class)
+class ContextAwareHelperTest {
+    private val contextAware = TestContextAware()
+
+    @Test
+    fun addOnContextAvailableListener() {
+        var receivedContextAware: ContextAware? = null
+        val listener = OnContextAvailableListener { contextAware, _, _ ->
+            receivedContextAware = contextAware
+        }
+        contextAware.addOnContextAvailableListener(listener)
+        contextAware.dispatchOnContextAvailable()
+
+        assertThat(receivedContextAware).isSameInstanceAs(contextAware)
+    }
+
+    @Test
+    fun removeOnContextAvailableListener() {
+        var callbackCount = 0
+        val listener = OnContextAvailableListener { _, _, _ ->
+            callbackCount++
+        }
+        contextAware.addOnContextAvailableListener(listener)
+        contextAware.dispatchOnContextAvailable()
+
+        assertThat(callbackCount).isEqualTo(1)
+
+        // Now remove the listener and check that the count doesn't increase
+        contextAware.removeOnContextAvailableListener(listener)
+        contextAware.dispatchOnContextAvailable()
+
+        assertThat(callbackCount).isEqualTo(1)
+    }
+
+    @Test
+    fun reentrantRemove() {
+        var callbackCount = 0
+        val listener = object : OnContextAvailableListener {
+            override fun onContextAvailable(
+                contextAware: ContextAware,
+                context: Context,
+                savedInstanceState: Bundle?
+            ) {
+                callbackCount++
+                contextAware.removeOnContextAvailableListener(this)
+            }
+        }
+        contextAware.addOnContextAvailableListener(listener)
+        contextAware.dispatchOnContextAvailable()
+
+        assertThat(callbackCount).isEqualTo(1)
+
+        callbackCount = 0
+        contextAware.dispatchOnContextAvailable()
+
+        assertThat(callbackCount).isEqualTo(0)
+    }
+}
+
+class TestContextAware : ContextAware {
+    private val contextAwareHelper = ContextAwareHelper(this)
+
+    override fun addOnContextAvailableListener(listener: OnContextAvailableListener) {
+        contextAwareHelper.addOnContextAvailableListener(listener)
+    }
+
+    override fun removeOnContextAvailableListener(listener: OnContextAvailableListener) {
+        contextAwareHelper.removeOnContextAvailableListener(listener)
+    }
+
+    fun dispatchOnContextAvailable(savedInstanceState: Bundle? = null) {
+        contextAwareHelper.dispatchOnContextAvailable(
+            ApplicationProvider.getApplicationContext(), savedInstanceState)
+    }
+}
\ No newline at end of file
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index 24a4863..60ddd6b 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -43,6 +43,9 @@
 import android.view.ViewGroup;
 import android.view.Window;
 
+import androidx.activity.contextaware.ContextAware;
+import androidx.activity.contextaware.ContextAwareHelper;
+import androidx.activity.contextaware.OnContextAvailableListener;
 import androidx.activity.result.ActivityResultCallback;
 import androidx.activity.result.ActivityResultCaller;
 import androidx.activity.result.ActivityResultLauncher;
@@ -87,6 +90,7 @@
  * without enforcing a deep Activity class hierarchy or strong coupling between components.
  */
 public class ComponentActivity extends androidx.core.app.ComponentActivity implements
+        ContextAware,
         LifecycleOwner,
         ViewModelStoreOwner,
         HasDefaultViewModelProviderFactory,
@@ -100,6 +104,7 @@
         ViewModelStore viewModelStore;
     }
 
+    private final ContextAwareHelper mContextAwareHelper = new ContextAwareHelper(this);
     private final LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
     private final SavedStateRegistryController mSavedStateRegistryController =
             SavedStateRegistryController.create(this);
@@ -279,6 +284,7 @@
      */
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
+        mContextAwareHelper.dispatchOnContextAvailable(this, savedInstanceState);
         super.onCreate(savedInstanceState);
         mSavedStateRegistryController.performRestore(savedInstanceState);
         mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);
@@ -397,6 +403,26 @@
 
     /**
      * {@inheritDoc}
+     *
+     * Any listener added here will receive a callback as part of
+     * <code>super.onCreate()</code>, but importantly <strong>before</strong> any other
+     * logic is done (including calling through to the framework
+     * {@link Activity#onCreate(Bundle)}.
+     */
+    @Override
+    public final void addOnContextAvailableListener(
+            @NonNull OnContextAvailableListener listener) {
+        mContextAwareHelper.addOnContextAvailableListener(listener);
+    }
+
+    @Override
+    public final void removeOnContextAvailableListener(
+            @NonNull OnContextAvailableListener listener) {
+        mContextAwareHelper.removeOnContextAvailableListener(listener);
+    }
+
+    /**
+     * {@inheritDoc}
      * <p>
      * Overriding this method is no longer supported and this method will be made
      * <code>final</code> in a future version of ComponentActivity. If you do override
diff --git a/activity/activity/src/main/java/androidx/activity/contextaware/ContextAware.java b/activity/activity/src/main/java/androidx/activity/contextaware/ContextAware.java
new file mode 100644
index 0000000..a8dde12
--- /dev/null
+++ b/activity/activity/src/main/java/androidx/activity/contextaware/ContextAware.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2020 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.activity.contextaware;
+
+import androidx.annotation.NonNull;
+
+/**
+ * A <code>ContextAware</code> class is associated with a {@link android.content.Context} as
+ * a part of its lifecycle.
+ *
+ * @see ContextAwareHelper
+ */
+public interface ContextAware {
+
+    /**
+     * Add a new {@link OnContextAvailableListener} for receiving a callback for when
+     * this class is associated with a {@link android.content.Context}.
+     * <p>
+     * This will only receive a callback when associated with a new Context: no callback
+     * will be triggered if this is already associated with a Context.
+     *
+     * @param listener The listener that should be added.
+     * @see #removeOnContextAvailableListener(OnContextAvailableListener)
+     */
+    void addOnContextAvailableListener(@NonNull OnContextAvailableListener listener);
+
+    /**
+     * Remove a {@link OnContextAvailableListener} previously added via
+     * {@link #addOnContextAvailableListener(OnContextAvailableListener)}.
+     *
+     * @param listener The listener that should be removed.
+     * @see #addOnContextAvailableListener(OnContextAvailableListener)
+     */
+    void removeOnContextAvailableListener(@NonNull OnContextAvailableListener listener);
+}
diff --git a/activity/activity/src/main/java/androidx/activity/contextaware/ContextAwareHelper.java b/activity/activity/src/main/java/androidx/activity/contextaware/ContextAwareHelper.java
new file mode 100644
index 0000000..3e21c20
--- /dev/null
+++ b/activity/activity/src/main/java/androidx/activity/contextaware/ContextAwareHelper.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2020 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.activity.contextaware;
+
+import android.content.Context;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * Helper class for implementing {@link ContextAware}. Classes using this helper should
+ * call {@link #addOnContextAvailableListener(OnContextAvailableListener)} and
+ * {@link #removeOnContextAvailableListener(OnContextAvailableListener)} as the respective
+ * methods of {@link ContextAware} are called.
+ * <p>
+ * You must call {@link #dispatchOnContextAvailable(Context, Bundle)} once the
+ * {@link Context} is available to dispatch the callbacks to all registered listeners.
+ */
+public final class ContextAwareHelper {
+
+    private final ContextAware mContextAware;
+
+    private final Set<OnContextAvailableListener> mListeners = new CopyOnWriteArraySet<>();
+
+    /**
+     * Construct a new ContextAwareHelper for the given {@link ContextAware} instance.
+     *
+     * @param contextAware The ContextAware instance that listeners are being added to.
+     */
+    public ContextAwareHelper(@NonNull ContextAware contextAware) {
+        mContextAware = contextAware;
+    }
+
+    /**
+     * Add a new {@link OnContextAvailableListener} for receiving a callback for when
+     * this class is associated with a {@link android.content.Context}.
+     *
+     * @param listener The listener that should be added.
+     * @see #removeOnContextAvailableListener(OnContextAvailableListener)
+     */
+    public void addOnContextAvailableListener(@NonNull OnContextAvailableListener listener) {
+        mListeners.add(listener);
+    }
+
+    /**
+     * Remove a {@link OnContextAvailableListener} previously added via
+     * {@link #addOnContextAvailableListener(OnContextAvailableListener)}.
+     *
+     * @param listener The listener that should be removed.
+     * @see #addOnContextAvailableListener(OnContextAvailableListener)
+     */
+    public void removeOnContextAvailableListener(@NonNull OnContextAvailableListener listener) {
+        mListeners.remove(listener);
+    }
+
+    /**
+     * Dispatch the callback of {@link OnContextAvailableListener#onContextAvailable} to
+     * all currently added listeners.
+     *
+     * @param context The {@link Context} the {@link ContextAware} object is now associated with.
+     * @param savedInstanceState The saved instance state, if any.
+     */
+    public void dispatchOnContextAvailable(@NonNull Context context,
+            @Nullable Bundle savedInstanceState) {
+        for (OnContextAvailableListener listener : mListeners) {
+            listener.onContextAvailable(mContextAware, context, savedInstanceState);
+        }
+    }
+}
diff --git a/activity/activity/src/main/java/androidx/activity/contextaware/OnContextAvailableListener.java b/activity/activity/src/main/java/androidx/activity/contextaware/OnContextAvailableListener.java
new file mode 100644
index 0000000..00614a2
--- /dev/null
+++ b/activity/activity/src/main/java/androidx/activity/contextaware/OnContextAvailableListener.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2020 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.activity.contextaware;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * Listener for receiving a callback at the first moment a {@link Context} is made
+ * available to the {@link ContextAware} class.
+ *
+ * @see ContextAware#addOnContextAvailableListener(OnContextAvailableListener)
+ */
+public interface OnContextAvailableListener {
+
+    /**
+     * Called when the given {@link ContextAware} object is associated to a {@link Context}.
+     *
+     * @param contextAware The object that this listener for added to.
+     * @param context The {@link Context} the {@link ContextAware} object is now associated with.
+     * @param savedInstanceState The saved instance state, if any.
+     */
+    void onContextAvailable(@NonNull ContextAware contextAware,
+            @SuppressLint("ContextFirst") /* The object being operated on should be first */
+            @NonNull Context context,
+            @Nullable Bundle savedInstanceState);
+}
diff --git a/annotation/annotation/api/restricted_1.1.0-alpha03.txt b/annotation/annotation/api/restricted_1.1.0-alpha03.txt
deleted file mode 100644
index 917e705..0000000
--- a/annotation/annotation/api/restricted_1.1.0-alpha03.txt
+++ /dev/null
@@ -1,444 +0,0 @@
-// 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 ComplexLayoutReceiver {
-    method public void layout(kotlin.jvm.functions.Function3<? super androidx.ui.core.LayoutBlockReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,kotlin.Unit> layoutBlock);
-    method public void maxIntrinsicHeight(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicHeightBlock);
-    method public void maxIntrinsicWidth(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicWidthBlock);
-    method public void minIntrinsicHeight(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> minIntrinsicHeightBlock);
-    method public void minIntrinsicWidth(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? 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.Function0<kotlin.Unit> children = {}, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawScope,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-  }
-
-  public final class DrawScope implements androidx.ui.core.DensityReceiver {
-    method public void drawChildren();
-    method public androidx.ui.core.Density getDensity();
-    property public androidx.ui.core.Density density;
-  }
-
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color compositionColor, 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.graphics.Color component3();
-    method public androidx.ui.core.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color compositionColor, androidx.ui.graphics.Color selectionColor);
-    method public androidx.ui.graphics.Color getCompositionColor();
-    method public androidx.ui.graphics.Color getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
-  public final class InputFieldKt {
-    ctor public InputFieldKt();
-    method public static void InputField(androidx.ui.input.EditorState value, androidx.ui.core.EditorStyle editorStyle, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorState,kotlin.Unit> onValueChange = {}, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> onEditorActionPerformed = {});
-  }
-
-  public final class IntrinsicMeasurementsReceiver implements androidx.ui.core.DensityReceiver {
-    method public androidx.ui.core.Density getDensity();
-    method public androidx.ui.core.IntPx maxIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx maxIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    method public androidx.ui.core.IntPx minIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx minIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    property public androidx.ui.core.Density density;
-  }
-
-  public final class LayoutBlockReceiver implements androidx.ui.core.DensityReceiver {
-    method public androidx.ui.core.Density getDensity();
-    method public void layoutResult(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height, kotlin.jvm.functions.Function1<? super androidx.ui.core.PositioningBlockReceiver,kotlin.Unit> block);
-    method public androidx.ui.core.IntPx maxIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx maxIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.IntPx minIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx minIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    property public androidx.ui.core.Density density;
-  }
-
-  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);
-    property public abstract androidx.ui.core.PxPosition position;
-    property public abstract androidx.ui.core.PxSize size;
-  }
-
-  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.ComplexLayoutReceiver,kotlin.Unit> block);
-    method public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.LayoutReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,kotlin.Unit> layoutBlock);
-    method public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit>![] childrenArray, kotlin.jvm.functions.Function3<? super androidx.ui.core.LayoutReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,kotlin.Unit> layoutBlock);
-    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 LayoutReceiver implements androidx.ui.core.DensityReceiver {
-    method public operator java.util.List<androidx.ui.core.Measurable> get(java.util.List<? extends androidx.ui.core.Measurable>, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public androidx.ui.core.Density getDensity();
-    method public void layout(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height, kotlin.jvm.functions.Function1<? super androidx.ui.core.PositioningBlockReceiver,kotlin.Unit> block);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
-  }
-
-  public interface Measurable {
-    method public Object? getParentData();
-    property public abstract Object? parentData;
-  }
-
-  public final class ParentDataKt {
-    ctor public ParentDataKt();
-    method public static void ParentData(Object data, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-  }
-
-  public abstract class Placeable {
-    ctor public Placeable();
-    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 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 PositioningBlockReceiver {
-    ctor public PositioningBlockReceiver();
-    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);
-  }
-
-  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 SemanticsKt {
-    ctor public SemanticsKt();
-    method public static void Semantics(boolean container = false, boolean explicitChildNodes = false, Boolean? enabled = null, Boolean? checked = null, Boolean? selected = null, Boolean? button = null, Boolean? inMutuallyExclusiveGroup = null, Boolean? hidden = null, String? label = null, String? value = null, androidx.ui.text.style.TextDirection? textDirection = null, String? testTag = null, java.util.List<? extends androidx.ui.core.semantics.SemanticsAction<?>> actions = emptyList(), 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 TextKt {
-    ctor public TextKt();
-    method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.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();
-  }
-
-  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 CraneWrapper(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.CompositionContext? composeIntoActivity(android.app.Activity activity, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.compose.Ambient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.Ambient<androidx.ui.core.Density> getDensityAmbient();
-    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 DragGestureDetectorKt {
-    ctor public DragGestureDetectorKt();
-    method public static void DragGestureDetector(kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean>? canDrag = null, androidx.ui.core.gesture.DragObserver? dragObserver = null, 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 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);
-  }
-
-}
-
-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.engine.geometry.Rect startOffset, androidx.ui.engine.geometry.Rect endOffset, androidx.ui.core.LayoutCoordinates? startLayoutCoordinates, androidx.ui.core.LayoutCoordinates? endLayoutCoordinates);
-    method public androidx.ui.engine.geometry.Rect component1();
-    method public androidx.ui.engine.geometry.Rect component2();
-    method public androidx.ui.core.LayoutCoordinates? component3();
-    method public androidx.ui.core.LayoutCoordinates? component4();
-    method public androidx.ui.core.selection.Selection copy(androidx.ui.engine.geometry.Rect startOffset, androidx.ui.engine.geometry.Rect endOffset, androidx.ui.core.LayoutCoordinates? startLayoutCoordinates, androidx.ui.core.LayoutCoordinates? endLayoutCoordinates);
-    method public androidx.ui.core.LayoutCoordinates? getEndLayoutCoordinates();
-    method public androidx.ui.engine.geometry.Rect getEndOffset();
-    method public androidx.ui.core.LayoutCoordinates? getStartLayoutCoordinates();
-    method public androidx.ui.engine.geometry.Rect getStartOffset();
-  }
-
-  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 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.core.vectorgraphics {
-
-  public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-  }
-
-  public final class BrushKt {
-    ctor public BrushKt();
-    method public static androidx.ui.core.vectorgraphics.Brush getEmptyBrush();
-    method public static androidx.ui.core.vectorgraphics.Brush obtainBrush(Object? brush);
-  }
-
-  public final class LinearGradient implements androidx.ui.core.vectorgraphics.Brush {
-    ctor public LinearGradient(kotlin.Pair<androidx.ui.graphics.Color,java.lang.Float>![] colorStops, float startX, float startY, float endX, float endY, androidx.ui.painting.TileMode tileMode);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public float getEndX();
-    method public float getEndY();
-    method public float getStartX();
-    method public float getStartY();
-    method public androidx.ui.painting.TileMode getTileMode();
-  }
-
-  public final class PathBuilder {
-    ctor public PathBuilder();
-    method public androidx.ui.core.vectorgraphics.PathBuilder arcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, float largeArcFlag, float sweepFlag, float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder arcToRelative(float a, float b, float theta, float largeArcFlag, float sweepFlag, float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder close();
-    method public androidx.ui.core.vectorgraphics.PathBuilder curveTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.core.vectorgraphics.PathBuilder curveToRelative(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
-    method public androidx.ui.core.vectorgraphics.PathNode![] getNodes();
-    method public androidx.ui.core.vectorgraphics.PathBuilder horizontalLineTo(float x);
-    method public androidx.ui.core.vectorgraphics.PathBuilder horizontalLineToRelative(float x);
-    method public androidx.ui.core.vectorgraphics.PathBuilder lineTo(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder lineToRelative(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder moveTo(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder moveToRelative(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder quadTo(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder quadToRelative(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveCurveTo(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveCurveToRelative(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveQuadTo(float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveQuadToRelative(float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder verticalLineTo(float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder verticalLineToRelative(float y);
-  }
-
-  public enum PathCommand {
-    method public final char toKey();
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand ArcTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand Close;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand CurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand HorizontalLineTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand LineTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand MoveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand QuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand ReflectiveCurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand ReflectiveQuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeArcTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeClose;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeCurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeHorizontalTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeLineTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeMoveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeQuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeReflectiveCurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeReflectiveQuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeVerticalTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand VerticalLineTo;
-  }
-
-  public final class PathCommandKt {
-    ctor public PathCommandKt();
-    method public static androidx.ui.core.vectorgraphics.PathCommand toPathCommand(char) throws java.lang.IllegalArgumentException;
-  }
-
-  public final class PathDelegate {
-    ctor public PathDelegate(kotlin.jvm.functions.Function1<? super androidx.ui.core.vectorgraphics.PathBuilder,kotlin.Unit> delegate);
-    method public kotlin.jvm.functions.Function1<androidx.ui.core.vectorgraphics.PathBuilder,kotlin.Unit> getDelegate();
-  }
-
-  public final class PathNode {
-    ctor public PathNode(androidx.ui.core.vectorgraphics.PathCommand command, float[] args);
-    method public androidx.ui.core.vectorgraphics.PathCommand component1();
-    method public float[] component2();
-    method public androidx.ui.core.vectorgraphics.PathNode copy(androidx.ui.core.vectorgraphics.PathCommand command, float[] args);
-    method public float[] getArgs();
-    method public androidx.ui.core.vectorgraphics.PathCommand getCommand();
-  }
-
-  public final class PathNodeKt {
-    ctor public PathNodeKt();
-    method public static operator StringBuilder plus(StringBuilder, androidx.ui.core.vectorgraphics.PathNode node);
-  }
-
-  public final class PathParser {
-    ctor public PathParser();
-    method public androidx.ui.core.vectorgraphics.PathParser addPathNodes(androidx.ui.core.vectorgraphics.PathNode![] nodes);
-    method public void clear();
-    method public androidx.ui.core.vectorgraphics.PathParser parsePathString(String pathData) throws java.lang.IllegalArgumentException, java.lang.NumberFormatException;
-    method public androidx.ui.core.vectorgraphics.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = Path());
-  }
-
-  public final class PathParserKt {
-    ctor public PathParserKt();
-  }
-
-  public final class RadialGradient implements androidx.ui.core.vectorgraphics.Brush {
-    ctor public RadialGradient(kotlin.Pair<androidx.ui.graphics.Color,java.lang.Float>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-  }
-
-  public final class SolidColor implements androidx.ui.core.vectorgraphics.Brush {
-    ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-  }
-
-  public final class VectorKt {
-    ctor public VectorKt();
-    method public static androidx.ui.core.vectorgraphics.PathNode![] addPathNodes(String? pathStr);
-    method public static android.view.View? adoptVectorGraphic(Object? parent, Object? child);
-    method public static androidx.ui.painting.StrokeCap getDefaultStrokeLineCap();
-    method public static androidx.ui.painting.StrokeJoin getDefaultStrokeLineJoin();
-    method public static androidx.ui.core.vectorgraphics.PathNode![] getEmptyPath();
-    method public static void group(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translateX = 0.0f, float translateY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> childNodes);
-    method public static void path(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 vector(String name = "", float viewportWidth, float viewportHeight, float defaultWidth = viewportWidth, float defaultHeight = viewportHeight, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    field public static final float DefaultAlpha = 1.0f;
-    field public static final String DefaultGroupName = "";
-    field public static final String DefaultPathName = "";
-    field public static final float DefaultPivotX = 0.0f;
-    field public static final float DefaultPivotY = 0.0f;
-    field public static final float DefaultRotate = 0.0f;
-    field public static final float DefaultScaleX = 1.0f;
-    field public static final float DefaultScaleY = 1.0f;
-    field public static final float DefaultStrokeLineMiter = 4.0f;
-    field public static final float DefaultStrokeLineWidth = 0.0f;
-    field public static final float DefaultTranslateX = 0.0f;
-    field public static final float DefaultTranslateY = 0.0f;
-  }
-
-}
-
-package androidx.ui.core.vectorgraphics.compat {
-
-  public final class VectorResourceKt {
-    ctor public VectorResourceKt();
-    method public static void vectorResource(android.content.res.Resources res, int resId);
-  }
-
-}
-
diff --git a/annotation/annotation/api/restricted_1.1.0-beta02.txt b/annotation/annotation/api/restricted_1.1.0-beta02.txt
deleted file mode 100644
index 917e705..0000000
--- a/annotation/annotation/api/restricted_1.1.0-beta02.txt
+++ /dev/null
@@ -1,444 +0,0 @@
-// 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 ComplexLayoutReceiver {
-    method public void layout(kotlin.jvm.functions.Function3<? super androidx.ui.core.LayoutBlockReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,kotlin.Unit> layoutBlock);
-    method public void maxIntrinsicHeight(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicHeightBlock);
-    method public void maxIntrinsicWidth(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> maxIntrinsicWidthBlock);
-    method public void minIntrinsicHeight(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.IntPx,androidx.ui.core.IntPx> minIntrinsicHeightBlock);
-    method public void minIntrinsicWidth(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasurementsReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? 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.Function0<kotlin.Unit> children = {}, kotlin.jvm.functions.Function3<? super androidx.ui.core.DrawScope,? super androidx.ui.painting.Canvas,? super androidx.ui.core.PxSize,kotlin.Unit> onPaint);
-  }
-
-  public final class DrawScope implements androidx.ui.core.DensityReceiver {
-    method public void drawChildren();
-    method public androidx.ui.core.Density getDensity();
-    property public androidx.ui.core.Density density;
-  }
-
-  public final class EditorStyle {
-    ctor public EditorStyle(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color compositionColor, 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.graphics.Color component3();
-    method public androidx.ui.core.EditorStyle copy(androidx.ui.text.TextStyle? textStyle, androidx.ui.graphics.Color compositionColor, androidx.ui.graphics.Color selectionColor);
-    method public androidx.ui.graphics.Color getCompositionColor();
-    method public androidx.ui.graphics.Color getSelectionColor();
-    method public androidx.ui.text.TextStyle? getTextStyle();
-  }
-
-  public final class InputFieldKt {
-    ctor public InputFieldKt();
-    method public static void InputField(androidx.ui.input.EditorState value, androidx.ui.core.EditorStyle editorStyle, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorState,kotlin.Unit> onValueChange = {}, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> onEditorActionPerformed = {});
-  }
-
-  public final class IntrinsicMeasurementsReceiver implements androidx.ui.core.DensityReceiver {
-    method public androidx.ui.core.Density getDensity();
-    method public androidx.ui.core.IntPx maxIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx maxIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    method public androidx.ui.core.IntPx minIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx minIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    property public androidx.ui.core.Density density;
-  }
-
-  public final class LayoutBlockReceiver implements androidx.ui.core.DensityReceiver {
-    method public androidx.ui.core.Density getDensity();
-    method public void layoutResult(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height, kotlin.jvm.functions.Function1<? super androidx.ui.core.PositioningBlockReceiver,kotlin.Unit> block);
-    method public androidx.ui.core.IntPx maxIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx maxIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.IntPx minIntrinsicHeight(androidx.ui.core.Measurable, androidx.ui.core.IntPx w);
-    method public androidx.ui.core.IntPx minIntrinsicWidth(androidx.ui.core.Measurable, androidx.ui.core.IntPx h);
-    property public androidx.ui.core.Density density;
-  }
-
-  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);
-    property public abstract androidx.ui.core.PxPosition position;
-    property public abstract androidx.ui.core.PxSize size;
-  }
-
-  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.ComplexLayoutReceiver,kotlin.Unit> block);
-    method public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.LayoutReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,kotlin.Unit> layoutBlock);
-    method public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit>![] childrenArray, kotlin.jvm.functions.Function3<? super androidx.ui.core.LayoutReceiver,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,kotlin.Unit> layoutBlock);
-    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 LayoutReceiver implements androidx.ui.core.DensityReceiver {
-    method public operator java.util.List<androidx.ui.core.Measurable> get(java.util.List<? extends androidx.ui.core.Measurable>, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public androidx.ui.core.Density getDensity();
-    method public void layout(androidx.ui.core.IntPx width, androidx.ui.core.IntPx height, kotlin.jvm.functions.Function1<? super androidx.ui.core.PositioningBlockReceiver,kotlin.Unit> block);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
-  }
-
-  public interface Measurable {
-    method public Object? getParentData();
-    property public abstract Object? parentData;
-  }
-
-  public final class ParentDataKt {
-    ctor public ParentDataKt();
-    method public static void ParentData(Object data, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-  }
-
-  public abstract class Placeable {
-    ctor public Placeable();
-    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 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 PositioningBlockReceiver {
-    ctor public PositioningBlockReceiver();
-    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);
-  }
-
-  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 SemanticsKt {
-    ctor public SemanticsKt();
-    method public static void Semantics(boolean container = false, boolean explicitChildNodes = false, Boolean? enabled = null, Boolean? checked = null, Boolean? selected = null, Boolean? button = null, Boolean? inMutuallyExclusiveGroup = null, Boolean? hidden = null, String? label = null, String? value = null, androidx.ui.text.style.TextDirection? textDirection = null, String? testTag = null, java.util.List<? extends androidx.ui.core.semantics.SemanticsAction<?>> actions = emptyList(), 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 TextKt {
-    ctor public TextKt();
-    method public static void CurrentTextStyleProvider(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static void Text(androidx.ui.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();
-  }
-
-  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 CraneWrapper(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.CompositionContext? composeIntoActivity(android.app.Activity activity, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static androidx.compose.Ambient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.Ambient<androidx.ui.core.Density> getDensityAmbient();
-    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 DragGestureDetectorKt {
-    ctor public DragGestureDetectorKt();
-    method public static void DragGestureDetector(kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean>? canDrag = null, androidx.ui.core.gesture.DragObserver? dragObserver = null, 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 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);
-  }
-
-}
-
-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.engine.geometry.Rect startOffset, androidx.ui.engine.geometry.Rect endOffset, androidx.ui.core.LayoutCoordinates? startLayoutCoordinates, androidx.ui.core.LayoutCoordinates? endLayoutCoordinates);
-    method public androidx.ui.engine.geometry.Rect component1();
-    method public androidx.ui.engine.geometry.Rect component2();
-    method public androidx.ui.core.LayoutCoordinates? component3();
-    method public androidx.ui.core.LayoutCoordinates? component4();
-    method public androidx.ui.core.selection.Selection copy(androidx.ui.engine.geometry.Rect startOffset, androidx.ui.engine.geometry.Rect endOffset, androidx.ui.core.LayoutCoordinates? startLayoutCoordinates, androidx.ui.core.LayoutCoordinates? endLayoutCoordinates);
-    method public androidx.ui.core.LayoutCoordinates? getEndLayoutCoordinates();
-    method public androidx.ui.engine.geometry.Rect getEndOffset();
-    method public androidx.ui.core.LayoutCoordinates? getStartLayoutCoordinates();
-    method public androidx.ui.engine.geometry.Rect getStartOffset();
-  }
-
-  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 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.core.vectorgraphics {
-
-  public interface Brush {
-    method public void applyBrush(androidx.ui.painting.Paint p);
-  }
-
-  public final class BrushKt {
-    ctor public BrushKt();
-    method public static androidx.ui.core.vectorgraphics.Brush getEmptyBrush();
-    method public static androidx.ui.core.vectorgraphics.Brush obtainBrush(Object? brush);
-  }
-
-  public final class LinearGradient implements androidx.ui.core.vectorgraphics.Brush {
-    ctor public LinearGradient(kotlin.Pair<androidx.ui.graphics.Color,java.lang.Float>![] colorStops, float startX, float startY, float endX, float endY, androidx.ui.painting.TileMode tileMode);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-    method public float getEndX();
-    method public float getEndY();
-    method public float getStartX();
-    method public float getStartY();
-    method public androidx.ui.painting.TileMode getTileMode();
-  }
-
-  public final class PathBuilder {
-    ctor public PathBuilder();
-    method public androidx.ui.core.vectorgraphics.PathBuilder arcTo(float horizontalEllipseRadius, float verticalEllipseRadius, float theta, float largeArcFlag, float sweepFlag, float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder arcToRelative(float a, float b, float theta, float largeArcFlag, float sweepFlag, float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder close();
-    method public androidx.ui.core.vectorgraphics.PathBuilder curveTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.core.vectorgraphics.PathBuilder curveToRelative(float dx1, float dy1, float dx2, float dy2, float dx3, float dy3);
-    method public androidx.ui.core.vectorgraphics.PathNode![] getNodes();
-    method public androidx.ui.core.vectorgraphics.PathBuilder horizontalLineTo(float x);
-    method public androidx.ui.core.vectorgraphics.PathBuilder horizontalLineToRelative(float x);
-    method public androidx.ui.core.vectorgraphics.PathBuilder lineTo(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder lineToRelative(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder moveTo(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder moveToRelative(float x, float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder quadTo(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder quadToRelative(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveCurveTo(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveCurveToRelative(float x1, float y1, float x2, float y2);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveQuadTo(float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder reflectiveQuadToRelative(float x1, float y1);
-    method public androidx.ui.core.vectorgraphics.PathBuilder verticalLineTo(float y);
-    method public androidx.ui.core.vectorgraphics.PathBuilder verticalLineToRelative(float y);
-  }
-
-  public enum PathCommand {
-    method public final char toKey();
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand ArcTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand Close;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand CurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand HorizontalLineTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand LineTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand MoveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand QuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand ReflectiveCurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand ReflectiveQuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeArcTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeClose;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeCurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeHorizontalTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeLineTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeMoveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeQuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeReflectiveCurveTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeReflectiveQuadTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand RelativeVerticalTo;
-    enum_constant public static final androidx.ui.core.vectorgraphics.PathCommand VerticalLineTo;
-  }
-
-  public final class PathCommandKt {
-    ctor public PathCommandKt();
-    method public static androidx.ui.core.vectorgraphics.PathCommand toPathCommand(char) throws java.lang.IllegalArgumentException;
-  }
-
-  public final class PathDelegate {
-    ctor public PathDelegate(kotlin.jvm.functions.Function1<? super androidx.ui.core.vectorgraphics.PathBuilder,kotlin.Unit> delegate);
-    method public kotlin.jvm.functions.Function1<androidx.ui.core.vectorgraphics.PathBuilder,kotlin.Unit> getDelegate();
-  }
-
-  public final class PathNode {
-    ctor public PathNode(androidx.ui.core.vectorgraphics.PathCommand command, float[] args);
-    method public androidx.ui.core.vectorgraphics.PathCommand component1();
-    method public float[] component2();
-    method public androidx.ui.core.vectorgraphics.PathNode copy(androidx.ui.core.vectorgraphics.PathCommand command, float[] args);
-    method public float[] getArgs();
-    method public androidx.ui.core.vectorgraphics.PathCommand getCommand();
-  }
-
-  public final class PathNodeKt {
-    ctor public PathNodeKt();
-    method public static operator StringBuilder plus(StringBuilder, androidx.ui.core.vectorgraphics.PathNode node);
-  }
-
-  public final class PathParser {
-    ctor public PathParser();
-    method public androidx.ui.core.vectorgraphics.PathParser addPathNodes(androidx.ui.core.vectorgraphics.PathNode![] nodes);
-    method public void clear();
-    method public androidx.ui.core.vectorgraphics.PathParser parsePathString(String pathData) throws java.lang.IllegalArgumentException, java.lang.NumberFormatException;
-    method public androidx.ui.core.vectorgraphics.PathNode![] toNodes();
-    method public androidx.ui.painting.Path toPath(androidx.ui.painting.Path target = Path());
-  }
-
-  public final class PathParserKt {
-    ctor public PathParserKt();
-  }
-
-  public final class RadialGradient implements androidx.ui.core.vectorgraphics.Brush {
-    ctor public RadialGradient(kotlin.Pair<androidx.ui.graphics.Color,java.lang.Float>![] colorStops, float centerX, float centerY, float radius, androidx.ui.painting.TileMode tileMode);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-  }
-
-  public final class SolidColor implements androidx.ui.core.vectorgraphics.Brush {
-    ctor public SolidColor(androidx.ui.graphics.Color value);
-    method public void applyBrush(androidx.ui.painting.Paint p);
-  }
-
-  public final class VectorKt {
-    ctor public VectorKt();
-    method public static androidx.ui.core.vectorgraphics.PathNode![] addPathNodes(String? pathStr);
-    method public static android.view.View? adoptVectorGraphic(Object? parent, Object? child);
-    method public static androidx.ui.painting.StrokeCap getDefaultStrokeLineCap();
-    method public static androidx.ui.painting.StrokeJoin getDefaultStrokeLineJoin();
-    method public static androidx.ui.core.vectorgraphics.PathNode![] getEmptyPath();
-    method public static void group(String name = "", float rotate = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translateX = 0.0f, float translateY = 0.0f, Object? clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> childNodes);
-    method public static void path(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 vector(String name = "", float viewportWidth, float viewportHeight, float defaultWidth = viewportWidth, float defaultHeight = viewportHeight, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    field public static final float DefaultAlpha = 1.0f;
-    field public static final String DefaultGroupName = "";
-    field public static final String DefaultPathName = "";
-    field public static final float DefaultPivotX = 0.0f;
-    field public static final float DefaultPivotY = 0.0f;
-    field public static final float DefaultRotate = 0.0f;
-    field public static final float DefaultScaleX = 1.0f;
-    field public static final float DefaultScaleY = 1.0f;
-    field public static final float DefaultStrokeLineMiter = 4.0f;
-    field public static final float DefaultStrokeLineWidth = 0.0f;
-    field public static final float DefaultTranslateX = 0.0f;
-    field public static final float DefaultTranslateY = 0.0f;
-  }
-
-}
-
-package androidx.ui.core.vectorgraphics.compat {
-
-  public final class VectorResourceKt {
-    ctor public VectorResourceKt();
-    method public static void vectorResource(android.content.res.Resources res, int resId);
-  }
-
-}
-
diff --git a/appcompat/appcompat/build.gradle b/appcompat/appcompat/build.gradle
index bdd7054..1afec62 100644
--- a/appcompat/appcompat/build.gradle
+++ b/appcompat/appcompat/build.gradle
@@ -15,7 +15,10 @@
     api(project(":core:core"))
     implementation("androidx.collection:collection:1.0.0")
     api("androidx.cursoradapter:cursoradapter:1.0.0")
-    api("androidx.fragment:fragment:1.1.0")
+    api(project(":activity:activity"))
+    // Activity 1.2 requires depending on Fragment 1.3, so we need project dependencies on both
+    // despite only directly requiring new APIs in Activity 1.2
+    api(project(":fragment:fragment"))
     api(project(":appcompat:appcompat-resources"))
     api("androidx.drawerlayout:drawerlayout:1.0.0")
     implementation(project(":lifecycle:lifecycle-runtime"))
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/KeyEventsTestCaseWithWindowDecor.java b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/KeyEventsTestCaseWithWindowDecor.java
index 49a9488..e830b1e 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/KeyEventsTestCaseWithWindowDecor.java
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/KeyEventsTestCaseWithWindowDecor.java
@@ -46,7 +46,7 @@
         final HandlerView mockView2 = new HandlerView(mActivityTestRule.getActivity());
         Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
 
-        // Sanity check: should work before any unhandled stuff is used. This just needs to run
+        // Validity check: should work before any unhandled stuff is used. This just needs to run
         // without causing a crash
         mActivityTestRule.runOnUiThread(new Runnable() {
             @Override
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
index 664d69f..8c35ee4 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatActivity.java
@@ -30,6 +30,8 @@
 import android.view.ViewGroup;
 import android.view.Window;
 
+import androidx.activity.contextaware.ContextAware;
+import androidx.activity.contextaware.OnContextAvailableListener;
 import androidx.annotation.CallSuper;
 import androidx.annotation.ContentView;
 import androidx.annotation.IdRes;
@@ -88,6 +90,7 @@
      */
     public AppCompatActivity() {
         super();
+        initDelegate();
     }
 
     /**
@@ -103,6 +106,19 @@
     @ContentView
     public AppCompatActivity(@LayoutRes int contentLayoutId) {
         super(contentLayoutId);
+        initDelegate();
+    }
+
+    private void initDelegate() {
+        addOnContextAvailableListener(new OnContextAvailableListener() {
+            @Override
+            public void onContextAvailable(@NonNull ContextAware contextAware,
+                    @NonNull Context context, @Nullable Bundle savedInstanceState) {
+                final AppCompatDelegate delegate = getDelegate();
+                delegate.installViewFactory();
+                delegate.onCreate(savedInstanceState);
+            }
+        });
     }
 
     @Override
@@ -111,14 +127,6 @@
     }
 
     @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        final AppCompatDelegate delegate = getDelegate();
-        delegate.installViewFactory();
-        delegate.onCreate(savedInstanceState);
-        super.onCreate(savedInstanceState);
-    }
-
-    @Override
     public void setTheme(@StyleRes final int resId) {
         super.setTheme(resId);
         getDelegate().setTheme(resId);
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
index 819f56c..f898efc 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/ToolbarActionBar.java
@@ -532,7 +532,7 @@
         public View onCreatePanelView(int featureId) {
             if (featureId == Window.FEATURE_OPTIONS_PANEL) {
                 // This gets called by PhoneWindow.preparePanel. Since this already manages
-                // its own panel, we return a dummy view here to prevent PhoneWindow from
+                // its own panel, we return a placeholder view here to prevent PhoneWindow from
                 // preparing a default one.
                 return new View(mDecorToolbar.getContext());
             }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
index 79e129d..3190ebc 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatAutoCompleteTextView.java
@@ -22,7 +22,6 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.view.ActionMode;
 import android.view.inputmethod.EditorInfo;
@@ -123,9 +122,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -154,9 +150,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
index 5169d2a..7f3a37e 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatButton.java
@@ -23,7 +23,6 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.view.ActionMode;
 import android.view.accessibility.AccessibilityEvent;
@@ -110,9 +109,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -141,9 +137,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
index 4c2c159..1adf364 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatCheckBox.java
@@ -22,7 +22,6 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.CheckBox;
@@ -111,9 +110,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportButtonTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mCompoundButtonHelper != null) {
             mCompoundButtonHelper.setSupportButtonTintList(tint);
         }
@@ -165,9 +161,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -196,9 +189,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
index 6b1fcb2..73874b8 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatEditText.java
@@ -137,9 +137,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -168,9 +165,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
index 16d10bc..fe65b79 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageButton.java
@@ -24,7 +24,6 @@
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.widget.ImageButton;
 import android.widget.ImageView;
@@ -139,9 +138,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -170,9 +166,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
index 473b2bb..ba964d9 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatImageView.java
@@ -24,7 +24,6 @@
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.widget.ImageView;
 
@@ -149,9 +148,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -180,9 +176,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
@@ -211,9 +204,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportImageTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mImageHelper != null) {
             mImageHelper.setSupportImageTintList(tint);
         }
@@ -242,9 +232,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportImageTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mImageHelper != null) {
             mImageHelper.setSupportImageTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
index 4b00138..3910f28 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatMultiAutoCompleteTextView.java
@@ -22,7 +22,6 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
@@ -121,9 +120,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -152,9 +148,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
index bc9fcc9..2550334 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatRadioButton.java
@@ -22,7 +22,6 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.RadioButton;
@@ -161,9 +160,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -192,9 +188,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
index 43ef5ec..a7751b1 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatSpinner.java
@@ -498,9 +498,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -530,9 +527,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
index b140c87..3edf849 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatTextView.java
@@ -138,9 +138,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -169,9 +166,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
index f2b61fb..f03aab1 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/AppCompatToggleButton.java
@@ -22,7 +22,6 @@
 import android.content.res.ColorStateList;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.widget.ToggleButton;
 
@@ -99,9 +98,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintList(@Nullable ColorStateList tint) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintList(tint);
         }
@@ -130,9 +126,6 @@
     @RestrictTo(LIBRARY_GROUP_PREFIX)
     @Override
     public void setSupportBackgroundTintMode(@Nullable PorterDuff.Mode tintMode) {
-        if (Build.VERSION.SDK_INT >= 21) {
-            return;
-        }
         if (mBackgroundTintHelper != null) {
             mBackgroundTintHelper.setSupportBackgroundTintMode(tintMode);
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
index fcefd9e..f654893 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/ContentFrameLayout.java
@@ -21,7 +21,6 @@
 import static android.view.View.MeasureSpec.getMode;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
-import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
 import android.content.Context;
 import android.graphics.Rect;
@@ -74,7 +73,7 @@
     /**
      * @hide
      */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public void dispatchFitSystemWindows(Rect insets) {
         fitSystemWindows(insets);
     }
@@ -89,7 +88,7 @@
      *
      * @hide
      */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public void setDecorPadding(int left, int top, int right, int bottom) {
         mDecorPadding.set(left, top, right, bottom);
         if (ViewCompat.isLaidOut(this)) {
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
index e02541f..8343040 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/widget/LinearLayoutCompat.java
@@ -798,7 +798,7 @@
 
                 float childExtra = lp.weight;
                 if (childExtra > 0) {
-                    // Child said it could absorb extra space -- give him his share
+                    // Child said it could absorb extra space -- give them their share
                     int share = (int) (childExtra * delta / weightSum);
                     weightSum -= childExtra;
                     delta -= share;
@@ -1186,7 +1186,7 @@
 
                 float childExtra = lp.weight;
                 if (childExtra > 0) {
-                    // Child said it could absorb extra space -- give him his share
+                    // Child said it could absorb extra space -- give them their share
                     int share = (int) (childExtra * delta / weightSum);
                     weightSum -= childExtra;
                     delta -= share;
diff --git a/appcompat/appcompat/src/main/res/drawable/abc_cab_background_top_material.xml b/appcompat/appcompat/src/main/res/drawable/abc_cab_background_top_material.xml
index f20add7..0922395 100644
--- a/appcompat/appcompat/src/main/res/drawable/abc_cab_background_top_material.xml
+++ b/appcompat/appcompat/src/main/res/drawable/abc_cab_background_top_material.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 
-<!-- This is a dummy drawable so that we can refer to the drawable ID -->
+<!-- This is a fake drawable so that we can refer to the drawable ID -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <solid android:color="@android:color/white"/>
 </shape>
diff --git a/appsearch/appsearch/build.gradle b/appsearch/appsearch/build.gradle
index adb893e..92dc7b3 100644
--- a/appsearch/appsearch/build.gradle
+++ b/appsearch/appsearch/build.gradle
@@ -31,10 +31,12 @@
         targetCompatibility = JavaVersion.VERSION_1_8
     }
     buildTypes.all {
-        minifyEnabled true
-        proguardFiles getDefaultProguardFile(
-                'proguard-android-optimize.txt'),
-                'proguard-rules.pro'
+        // TODO(b/161836669): Minifiation is currently disabled because if it is on, the aar gets
+        //   desugared twice in some workflows, which fails. Decide how to handle this (e.g.
+        //   splitting targets, continuing with the consumerProguardFiles solution here, fixing the
+        //   flows that perform duplicate desugaring, or something else).
+        minifyEnabled false
+        consumerProguardFiles 'proguard-rules.pro'
     }
     // TODO(b/161205849): We've had to move libicing.so compilation into appsearch:appsearch to get
     //  it included into the exported aar. Find a proper solution for bundling libicing.so into
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
index d2fd6be..f29bb66 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/AppSearchResult.java
@@ -107,16 +107,19 @@
     }
 
     /**
-     * Returns the returned value associated with this result.
+     * Returns the result value associated with this result, if it was successful.
      *
-     * <p>If {@link #isSuccess} is {@code false}, the result value is always {@code null}. The value
-     * may be {@code null} even if {@link #isSuccess} is {@code true}. See the documentation of the
-     * particular {@code AppSearchManager} call producing this {@link AppSearchResult} for what is
-     * returned by {@link #getResultValue}.
+     * <p>See the documentation of the particular {@code AppSearchManager} call producing this
+     * {@link AppSearchResult} for what is placed in the result value by that call.
+     *
+     * @throws IllegalStateException if this {@link AppSearchResult} is not successful.
      */
     // TODO(b/157082794): Linkify AppSearchManager once that API is public
     @Nullable
     public ValueType getResultValue() {
+        if (!isSuccess()) {
+            throw new IllegalStateException("AppSearchResult is a failure: " + this);
+        }
         return mResultValue;
     }
 
@@ -134,16 +137,6 @@
         return mErrorMessage;
     }
 
-    /**
-     * Asserts that this {@link AppSearchResult} is successful.
-     * @hide
-     */
-    public void checkSuccess() {
-        if (!isSuccess()) {
-            throw new IllegalStateException("AppSearchResult is a failure: " + this);
-        }
-    }
-
     @Override
     public boolean equals(@Nullable Object other) {
         if (this == other) {
diff --git a/biometric/biometric/api/1.1.0-alpha02.txt b/biometric/biometric/api/1.1.0-alpha02.txt
index 97d7f04..4a73a63 100644
--- a/biometric/biometric/api/1.1.0-alpha02.txt
+++ b/biometric/biometric/api/1.1.0-alpha02.txt
@@ -40,6 +40,7 @@
     field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb
     field public static final int ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
     field public static final int ERROR_NO_SPACE = 4; // 0x4
+    field public static final int ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int ERROR_TIMEOUT = 3; // 0x3
     field public static final int ERROR_UNABLE_TO_PROCESS = 2; // 0x2
     field public static final int ERROR_USER_CANCELED = 10; // 0xa
diff --git a/biometric/biometric/api/current.txt b/biometric/biometric/api/current.txt
index 97d7f04..4a73a63 100644
--- a/biometric/biometric/api/current.txt
+++ b/biometric/biometric/api/current.txt
@@ -40,6 +40,7 @@
     field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb
     field public static final int ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
     field public static final int ERROR_NO_SPACE = 4; // 0x4
+    field public static final int ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int ERROR_TIMEOUT = 3; // 0x3
     field public static final int ERROR_UNABLE_TO_PROCESS = 2; // 0x2
     field public static final int ERROR_USER_CANCELED = 10; // 0xa
diff --git a/biometric/biometric/api/public_plus_experimental_1.1.0-alpha02.txt b/biometric/biometric/api/public_plus_experimental_1.1.0-alpha02.txt
index 97d7f04..4a73a63 100644
--- a/biometric/biometric/api/public_plus_experimental_1.1.0-alpha02.txt
+++ b/biometric/biometric/api/public_plus_experimental_1.1.0-alpha02.txt
@@ -40,6 +40,7 @@
     field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb
     field public static final int ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
     field public static final int ERROR_NO_SPACE = 4; // 0x4
+    field public static final int ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int ERROR_TIMEOUT = 3; // 0x3
     field public static final int ERROR_UNABLE_TO_PROCESS = 2; // 0x2
     field public static final int ERROR_USER_CANCELED = 10; // 0xa
diff --git a/biometric/biometric/api/public_plus_experimental_current.txt b/biometric/biometric/api/public_plus_experimental_current.txt
index 97d7f04..4a73a63 100644
--- a/biometric/biometric/api/public_plus_experimental_current.txt
+++ b/biometric/biometric/api/public_plus_experimental_current.txt
@@ -40,6 +40,7 @@
     field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb
     field public static final int ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
     field public static final int ERROR_NO_SPACE = 4; // 0x4
+    field public static final int ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int ERROR_TIMEOUT = 3; // 0x3
     field public static final int ERROR_UNABLE_TO_PROCESS = 2; // 0x2
     field public static final int ERROR_USER_CANCELED = 10; // 0xa
diff --git a/biometric/biometric/api/restricted_1.1.0-alpha02.txt b/biometric/biometric/api/restricted_1.1.0-alpha02.txt
index 97d7f04..4a73a63 100644
--- a/biometric/biometric/api/restricted_1.1.0-alpha02.txt
+++ b/biometric/biometric/api/restricted_1.1.0-alpha02.txt
@@ -40,6 +40,7 @@
     field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb
     field public static final int ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
     field public static final int ERROR_NO_SPACE = 4; // 0x4
+    field public static final int ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int ERROR_TIMEOUT = 3; // 0x3
     field public static final int ERROR_UNABLE_TO_PROCESS = 2; // 0x2
     field public static final int ERROR_USER_CANCELED = 10; // 0xa
diff --git a/biometric/biometric/api/restricted_current.txt b/biometric/biometric/api/restricted_current.txt
index 97d7f04..4a73a63 100644
--- a/biometric/biometric/api/restricted_current.txt
+++ b/biometric/biometric/api/restricted_current.txt
@@ -40,6 +40,7 @@
     field public static final int ERROR_NO_BIOMETRICS = 11; // 0xb
     field public static final int ERROR_NO_DEVICE_CREDENTIAL = 14; // 0xe
     field public static final int ERROR_NO_SPACE = 4; // 0x4
+    field public static final int ERROR_SECURITY_UPDATE_REQUIRED = 15; // 0xf
     field public static final int ERROR_TIMEOUT = 3; // 0x3
     field public static final int ERROR_UNABLE_TO_PROCESS = 2; // 0x2
     field public static final int ERROR_USER_CANCELED = 10; // 0xa
diff --git a/biometric/biometric/src/main/java/androidx/biometric/BiometricConstants.java b/biometric/biometric/src/main/java/androidx/biometric/BiometricConstants.java
index eb8c1ae..19534f5 100644
--- a/biometric/biometric/src/main/java/androidx/biometric/BiometricConstants.java
+++ b/biometric/biometric/src/main/java/androidx/biometric/BiometricConstants.java
@@ -113,6 +113,12 @@
     int ERROR_NO_DEVICE_CREDENTIAL = 14;
 
     /**
+     * A security vulnerability has been discovered with one or more hardware sensors. The
+     * affected sensor(s) are unavailable until a security update has addressed the issue.
+     */
+    int ERROR_SECURITY_UPDATE_REQUIRED = 15;
+
+    /**
      * @hide
      */
     @RestrictTo(RestrictTo.Scope.LIBRARY)
diff --git a/biometric/biometric/src/main/java/androidx/biometric/ErrorUtils.java b/biometric/biometric/src/main/java/androidx/biometric/ErrorUtils.java
index 923516d..8b10b4f 100644
--- a/biometric/biometric/src/main/java/androidx/biometric/ErrorUtils.java
+++ b/biometric/biometric/src/main/java/androidx/biometric/ErrorUtils.java
@@ -37,19 +37,20 @@
      */
     static boolean isKnownError(int errorCode) {
         switch (errorCode) {
-            case BiometricPrompt.ERROR_CANCELED:
-            case BiometricPrompt.ERROR_HW_NOT_PRESENT:
             case BiometricPrompt.ERROR_HW_UNAVAILABLE:
-            case BiometricPrompt.ERROR_LOCKOUT:
-            case BiometricPrompt.ERROR_LOCKOUT_PERMANENT:
-            case BiometricPrompt.ERROR_NEGATIVE_BUTTON:
-            case BiometricPrompt.ERROR_NO_BIOMETRICS:
-            case BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL:
-            case BiometricPrompt.ERROR_NO_SPACE:
-            case BiometricPrompt.ERROR_TIMEOUT:
             case BiometricPrompt.ERROR_UNABLE_TO_PROCESS:
-            case BiometricPrompt.ERROR_USER_CANCELED:
+            case BiometricPrompt.ERROR_TIMEOUT:
+            case BiometricPrompt.ERROR_NO_SPACE:
+            case BiometricPrompt.ERROR_CANCELED:
+            case BiometricPrompt.ERROR_LOCKOUT:
             case BiometricPrompt.ERROR_VENDOR:
+            case BiometricPrompt.ERROR_LOCKOUT_PERMANENT:
+            case BiometricPrompt.ERROR_USER_CANCELED:
+            case BiometricPrompt.ERROR_NO_BIOMETRICS:
+            case BiometricPrompt.ERROR_HW_NOT_PRESENT:
+            case BiometricPrompt.ERROR_NEGATIVE_BUTTON:
+            case BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL:
+            case BiometricPrompt.ERROR_SECURITY_UPDATE_REQUIRED:
                 return true;
             default:
                 return false;
diff --git a/biometric/biometric/src/test/java/androidx/biometric/ErrorUtilsTest.java b/biometric/biometric/src/test/java/androidx/biometric/ErrorUtilsTest.java
index 0e188c7..7d6a360 100644
--- a/biometric/biometric/src/test/java/androidx/biometric/ErrorUtilsTest.java
+++ b/biometric/biometric/src/test/java/androidx/biometric/ErrorUtilsTest.java
@@ -44,6 +44,8 @@
         assertThat(ErrorUtils.isKnownError(BiometricPrompt.ERROR_HW_NOT_PRESENT)).isTrue();
         assertThat(ErrorUtils.isKnownError(BiometricPrompt.ERROR_NEGATIVE_BUTTON)).isTrue();
         assertThat(ErrorUtils.isKnownError(BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL)).isTrue();
+        assertThat(ErrorUtils.isKnownError(BiometricPrompt.ERROR_SECURITY_UPDATE_REQUIRED))
+                .isTrue();
     }
 
     @Test
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index 2348369..62e145f 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -60,7 +60,7 @@
     val ENTERPRISE = Version("1.1.0-alpha01")
     val EXIFINTERFACE = Version("1.3.0-alpha02")
     val FRAGMENT = Version("1.3.0-alpha07")
-    val FUTURES = Version("1.1.0-rc01")
+    val FUTURES = Version("1.2.0-alpha01")
     val GRIDLAYOUT = Version("1.1.0-alpha01")
     val HEIFWRITER = Version("1.1.0-alpha01")
     val HILT = Version("1.0.0-alpha02")
@@ -121,5 +121,5 @@
     val WEBKIT = Version("1.4.0-alpha01")
     val WINDOW = Version("1.0.0-alpha02")
     val WINDOW_SIDECAR = Version("0.1.0-alpha01")
-    val WORK = Version("2.4.0-rc01")
+    val WORK = Version("2.5.0-alpha01")
 }
diff --git a/camera/camera-core/api/1.0.0-beta05.txt b/camera/camera-core/api/1.0.0-beta05.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/1.0.0-beta05.txt
+++ b/camera/camera-core/api/1.0.0-beta05.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/1.0.0-beta06.txt b/camera/camera-core/api/1.0.0-beta06.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/1.0.0-beta06.txt
+++ b/camera/camera-core/api/1.0.0-beta06.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/1.0.0-beta07.txt b/camera/camera-core/api/1.0.0-beta07.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/1.0.0-beta07.txt
+++ b/camera/camera-core/api/1.0.0-beta07.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/current.txt b/camera/camera-core/api/current.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/current.txt
+++ b/camera/camera-core/api/current.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/public_plus_experimental_1.0.0-beta05.txt b/camera/camera-core/api/public_plus_experimental_1.0.0-beta05.txt
index 2b746ba..9b348d20 100644
--- a/camera/camera-core/api/public_plus_experimental_1.0.0-beta05.txt
+++ b/camera/camera-core/api/public_plus_experimental_1.0.0-beta05.txt
@@ -22,10 +22,6 @@
   public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
   }
 
-  @androidx.camera.core.ExperimentalCameraFilter public interface CameraFilter {
-    method public void filter(java.util.LinkedHashSet<androidx.camera.core.Camera!>);
-  }
-
   public interface CameraInfo {
     method public int getSensorRotationDegrees();
     method public int getSensorRotationDegrees(int);
@@ -46,9 +42,8 @@
 
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
-    method @androidx.camera.core.ExperimentalCameraFilter public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter);
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
@@ -84,9 +79,6 @@
     ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float);
   }
 
-  @experimental.Experimental @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCameraFilter {
-  }
-
   @experimental.Experimental @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCustomizableThreads {
   }
 
diff --git a/camera/camera-core/api/public_plus_experimental_1.0.0-beta06.txt b/camera/camera-core/api/public_plus_experimental_1.0.0-beta06.txt
index 6e77917..7893556 100644
--- a/camera/camera-core/api/public_plus_experimental_1.0.0-beta06.txt
+++ b/camera/camera-core/api/public_plus_experimental_1.0.0-beta06.txt
@@ -48,7 +48,7 @@
     ctor public CameraSelector.Builder();
     method @androidx.camera.core.ExperimentalCameraFilter public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter);
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/public_plus_experimental_1.0.0-beta07.txt b/camera/camera-core/api/public_plus_experimental_1.0.0-beta07.txt
index 4b119c0..11f834b 100644
--- a/camera/camera-core/api/public_plus_experimental_1.0.0-beta07.txt
+++ b/camera/camera-core/api/public_plus_experimental_1.0.0-beta07.txt
@@ -48,7 +48,7 @@
     ctor public CameraSelector.Builder();
     method @androidx.camera.core.ExperimentalCameraFilter public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter);
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/public_plus_experimental_current.txt b/camera/camera-core/api/public_plus_experimental_current.txt
index 4b119c0..11f834b 100644
--- a/camera/camera-core/api/public_plus_experimental_current.txt
+++ b/camera/camera-core/api/public_plus_experimental_current.txt
@@ -48,7 +48,7 @@
     ctor public CameraSelector.Builder();
     method @androidx.camera.core.ExperimentalCameraFilter public androidx.camera.core.CameraSelector.Builder addCameraFilter(androidx.camera.core.CameraFilter);
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/restricted_1.0.0-beta05.txt b/camera/camera-core/api/restricted_1.0.0-beta05.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/restricted_1.0.0-beta05.txt
+++ b/camera/camera-core/api/restricted_1.0.0-beta05.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/restricted_1.0.0-beta06.txt b/camera/camera-core/api/restricted_1.0.0-beta06.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/restricted_1.0.0-beta06.txt
+++ b/camera/camera-core/api/restricted_1.0.0-beta06.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/restricted_1.0.0-beta07.txt b/camera/camera-core/api/restricted_1.0.0-beta07.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/restricted_1.0.0-beta07.txt
+++ b/camera/camera-core/api/restricted_1.0.0-beta07.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-core/api/restricted_current.txt b/camera/camera-core/api/restricted_current.txt
index 59da60e..1b9883a 100644
--- a/camera/camera-core/api/restricted_current.txt
+++ b/camera/camera-core/api/restricted_current.txt
@@ -43,7 +43,7 @@
   public static final class CameraSelector.Builder {
     ctor public CameraSelector.Builder();
     method public androidx.camera.core.CameraSelector build();
-    method @experimental.UseExperimental(markerClass=ExperimentalCameraFilter.class) public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
   }
 
   public class CameraUnavailableException extends java.lang.Exception {
diff --git a/camera/camera-lifecycle/api/1.0.0-beta06.txt b/camera/camera-lifecycle/api/1.0.0-beta06.txt
index 8278c48..88187bc6 100644
--- a/camera/camera-lifecycle/api/1.0.0-beta06.txt
+++ b/camera/camera-lifecycle/api/1.0.0-beta06.txt
@@ -2,7 +2,7 @@
 package androidx.camera.lifecycle {
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
     method public boolean isBound(androidx.camera.core.UseCase);
diff --git a/camera/camera-lifecycle/api/1.0.0-beta07.txt b/camera/camera-lifecycle/api/1.0.0-beta07.txt
index 8278c48..88187bc6 100644
--- a/camera/camera-lifecycle/api/1.0.0-beta07.txt
+++ b/camera/camera-lifecycle/api/1.0.0-beta07.txt
@@ -2,7 +2,7 @@
 package androidx.camera.lifecycle {
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
     method public boolean isBound(androidx.camera.core.UseCase);
diff --git a/camera/camera-lifecycle/api/current.txt b/camera/camera-lifecycle/api/current.txt
index 8278c48..88187bc6 100644
--- a/camera/camera-lifecycle/api/current.txt
+++ b/camera/camera-lifecycle/api/current.txt
@@ -2,7 +2,7 @@
 package androidx.camera.lifecycle {
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
     method public boolean isBound(androidx.camera.core.UseCase);
diff --git a/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta06.txt b/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta06.txt
index b28a42b..d317ea5 100644
--- a/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta06.txt
+++ b/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta06.txt
@@ -8,8 +8,8 @@
   }
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) @androidx.camera.lifecycle.ExperimentalUseCaseGroupLifecycle public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread @androidx.camera.lifecycle.ExperimentalUseCaseGroupLifecycle public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
     method @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
diff --git a/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta07.txt b/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta07.txt
index b28a42b..d317ea5 100644
--- a/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta07.txt
+++ b/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-beta07.txt
@@ -8,8 +8,8 @@
   }
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) @androidx.camera.lifecycle.ExperimentalUseCaseGroupLifecycle public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread @androidx.camera.lifecycle.ExperimentalUseCaseGroupLifecycle public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
     method @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
diff --git a/camera/camera-lifecycle/api/public_plus_experimental_current.txt b/camera/camera-lifecycle/api/public_plus_experimental_current.txt
index b28a42b..d317ea5 100644
--- a/camera/camera-lifecycle/api/public_plus_experimental_current.txt
+++ b/camera/camera-lifecycle/api/public_plus_experimental_current.txt
@@ -8,8 +8,8 @@
   }
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) @androidx.camera.lifecycle.ExperimentalUseCaseGroupLifecycle public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread @androidx.camera.lifecycle.ExperimentalUseCaseGroupLifecycle public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCaseGroup);
     method @androidx.camera.lifecycle.ExperimentalCameraProviderConfiguration public static void configureInstance(androidx.camera.core.CameraXConfig);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
diff --git a/camera/camera-lifecycle/api/restricted_1.0.0-beta06.txt b/camera/camera-lifecycle/api/restricted_1.0.0-beta06.txt
index 8278c48..88187bc6 100644
--- a/camera/camera-lifecycle/api/restricted_1.0.0-beta06.txt
+++ b/camera/camera-lifecycle/api/restricted_1.0.0-beta06.txt
@@ -2,7 +2,7 @@
 package androidx.camera.lifecycle {
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
     method public boolean isBound(androidx.camera.core.UseCase);
diff --git a/camera/camera-lifecycle/api/restricted_1.0.0-beta07.txt b/camera/camera-lifecycle/api/restricted_1.0.0-beta07.txt
index 8278c48..88187bc6 100644
--- a/camera/camera-lifecycle/api/restricted_1.0.0-beta07.txt
+++ b/camera/camera-lifecycle/api/restricted_1.0.0-beta07.txt
@@ -2,7 +2,7 @@
 package androidx.camera.lifecycle {
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
     method public boolean isBound(androidx.camera.core.UseCase);
diff --git a/camera/camera-lifecycle/api/restricted_current.txt b/camera/camera-lifecycle/api/restricted_current.txt
index 8278c48..88187bc6 100644
--- a/camera/camera-lifecycle/api/restricted_current.txt
+++ b/camera/camera-lifecycle/api/restricted_current.txt
@@ -2,7 +2,7 @@
 package androidx.camera.lifecycle {
 
   public final class ProcessCameraProvider {
-    method @MainThread @experimental.UseExperimental(markerClass=ExperimentalUseCaseGroup.class) public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @MainThread public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
     method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
     method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
     method public boolean isBound(androidx.camera.core.UseCase);
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
index b848e96..5ad9bf0 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import kotlin.random.Random
 
 val blackBackground = Modifier.background(color = Color.Black)
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
index 1c9369d..4d46770 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
@@ -24,7 +24,7 @@
 import androidx.compose.getValue
 import androidx.compose.setValue
 import androidx.compose.state
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.ui.material.Button
 
 @Composable
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
index 3541075..01bf602 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
@@ -25,7 +25,7 @@
 import androidx.compose.mutableStateListOf
 import androidx.compose.state
 import androidx.compose.foundation.Text
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.ui.material.Button
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
index fb45ffd..8d3b211 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
@@ -25,7 +25,7 @@
 import androidx.compose.mutableStateMapOf
 import androidx.compose.state
 import androidx.compose.foundation.Text
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.ui.material.Button
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RecomposerTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RecomposerTests.kt
index 590efdf..4b0cb26 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RecomposerTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RecomposerTests.kt
@@ -40,6 +40,7 @@
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
+import kotlin.test.assertNotNull
 
 @MediumTest
 @RunWith(AndroidJUnit4::class)
@@ -422,6 +423,44 @@
         }
     }
 
+    @Test // regression test for b/161892016
+    fun testMultipleRecompose() {
+        class A
+
+        var state1 by mutableStateOf(1)
+        var state2 by mutableStateOf(1)
+
+        @Composable fun validate(a: A?) {
+            assertNotNull(a)
+        }
+
+        @Composable fun use(@Suppress("UNUSED_PARAMETER") i: Int) { }
+
+        @Composable fun useA(a: A = A()) {
+            validate(a)
+            use(state2)
+        }
+
+        @Composable fun test() {
+            use(state1)
+            useA()
+        }
+
+        compose {
+            test()
+        }.then {
+            // Recompose test() skipping useA()
+            state1 = 2
+        }.then {
+            // Recompose useA(). In the bug this causes validate() to be passed a null because
+            // the recompose scope is updated with a lambda that captures the parameters when the
+            // default parameter expressions are skipped.
+            state2 = 2
+        }.then {
+            // force recompose to validate a.
+        }
+    }
+
     @Test
     @OptIn(ExperimentalComposeApi::class)
     fun testFrameTransition() {
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composer.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composer.kt
index 21d4e87..f2e82eb 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composer.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composer.kt
@@ -1720,6 +1720,7 @@
     @ComposeCompilerApi
     fun skipToGroupEnd() {
         check(groupNodeCount == 0) { "No nodes can be emitted before calling skipAndEndGroup" }
+        currentRecomposeScope?.used = false
         if (invalidations.isEmpty()) {
             skipReaderToGroupEnd()
         } else {
diff --git a/concurrent/futures-ktx/api/1.2.0-alpha01.txt b/concurrent/futures-ktx/api/1.2.0-alpha01.txt
new file mode 100644
index 0000000..6c14320
--- /dev/null
+++ b/concurrent/futures-ktx/api/1.2.0-alpha01.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    method public static suspend <T> Object? await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/api/public_plus_experimental_1.2.0-alpha01.txt b/concurrent/futures-ktx/api/public_plus_experimental_1.2.0-alpha01.txt
new file mode 100644
index 0000000..6c14320
--- /dev/null
+++ b/concurrent/futures-ktx/api/public_plus_experimental_1.2.0-alpha01.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    method public static suspend <T> Object? await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures-ktx/api/restricted_1.2.0-alpha01.txt b/concurrent/futures-ktx/api/restricted_1.2.0-alpha01.txt
new file mode 100644
index 0000000..6c14320
--- /dev/null
+++ b/concurrent/futures-ktx/api/restricted_1.2.0-alpha01.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class ListenableFutureKt {
+    method public static suspend <T> Object? await(com.google.common.util.concurrent.ListenableFuture<T>, kotlin.coroutines.Continuation<? super T> p);
+  }
+
+}
+
diff --git a/concurrent/futures/api/1.2.0-alpha01.txt b/concurrent/futures/api/1.2.0-alpha01.txt
new file mode 100644
index 0000000..beb76bd
--- /dev/null
+++ b/concurrent/futures/api/1.2.0-alpha01.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class CallbackToFutureAdapter {
+    method public static <T> com.google.common.util.concurrent.ListenableFuture<T!> getFuture(androidx.concurrent.futures.CallbackToFutureAdapter.Resolver<T!>);
+  }
+
+  public static final class CallbackToFutureAdapter.Completer<T> {
+    method public void addCancellationListener(Runnable, java.util.concurrent.Executor);
+    method protected void finalize();
+    method public boolean set(T!);
+    method public boolean setCancelled();
+    method public boolean setException(Throwable);
+  }
+
+  public static interface CallbackToFutureAdapter.Resolver<T> {
+    method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
+  }
+
+}
+
diff --git a/concurrent/futures/api/public_plus_experimental_1.2.0-alpha01.txt b/concurrent/futures/api/public_plus_experimental_1.2.0-alpha01.txt
new file mode 100644
index 0000000..beb76bd
--- /dev/null
+++ b/concurrent/futures/api/public_plus_experimental_1.2.0-alpha01.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  public final class CallbackToFutureAdapter {
+    method public static <T> com.google.common.util.concurrent.ListenableFuture<T!> getFuture(androidx.concurrent.futures.CallbackToFutureAdapter.Resolver<T!>);
+  }
+
+  public static final class CallbackToFutureAdapter.Completer<T> {
+    method public void addCancellationListener(Runnable, java.util.concurrent.Executor);
+    method protected void finalize();
+    method public boolean set(T!);
+    method public boolean setCancelled();
+    method public boolean setException(Throwable);
+  }
+
+  public static interface CallbackToFutureAdapter.Resolver<T> {
+    method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
+  }
+
+}
+
diff --git a/concurrent/futures/api/restricted_1.2.0-alpha01.txt b/concurrent/futures/api/restricted_1.2.0-alpha01.txt
new file mode 100644
index 0000000..6dabf0b
--- /dev/null
+++ b/concurrent/futures/api/restricted_1.2.0-alpha01.txt
@@ -0,0 +1,45 @@
+// Signature format: 3.0
+package androidx.concurrent.futures {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public abstract class AbstractResolvableFuture<V> implements com.google.common.util.concurrent.ListenableFuture<V> {
+    ctor protected AbstractResolvableFuture();
+    method public final void addListener(Runnable!, java.util.concurrent.Executor!);
+    method protected void afterDone();
+    method public final boolean cancel(boolean);
+    method public final V! get(long, java.util.concurrent.TimeUnit!) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public final V! get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method protected void interruptTask();
+    method public final boolean isCancelled();
+    method public final boolean isDone();
+    method protected String? pendingToString();
+    method protected boolean set(V?);
+    method protected boolean setException(Throwable!);
+    method protected boolean setFuture(com.google.common.util.concurrent.ListenableFuture<? extends V>!);
+    method protected final boolean wasInterrupted();
+  }
+
+  public final class CallbackToFutureAdapter {
+    method public static <T> com.google.common.util.concurrent.ListenableFuture<T!> getFuture(androidx.concurrent.futures.CallbackToFutureAdapter.Resolver<T!>);
+  }
+
+  public static final class CallbackToFutureAdapter.Completer<T> {
+    method public void addCancellationListener(Runnable, java.util.concurrent.Executor);
+    method protected void finalize();
+    method public boolean set(T!);
+    method public boolean setCancelled();
+    method public boolean setException(Throwable);
+  }
+
+  public static interface CallbackToFutureAdapter.Resolver<T> {
+    method public Object? attachCompleter(androidx.concurrent.futures.CallbackToFutureAdapter.Completer<T!>) throws java.lang.Exception;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public final class ResolvableFuture<V> extends androidx.concurrent.futures.AbstractResolvableFuture<V> {
+    method public static <V> androidx.concurrent.futures.ResolvableFuture<V!>! create();
+    method public boolean set(V?);
+    method public boolean setException(Throwable!);
+    method public boolean setFuture(com.google.common.util.concurrent.ListenableFuture<? extends V>!);
+  }
+
+}
+
diff --git a/development/build_log_simplifier.py b/development/build_log_simplifier.py
index 4f838e4..49afe1d 100755
--- a/development/build_log_simplifier.py
+++ b/development/build_log_simplifier.py
@@ -79,7 +79,16 @@
       "Note: Some input files use or override a deprecated API.",
       "Note: Recompile with -Xlint:deprecation for details.",
       "Note: Some input files use unchecked or unsafe operations.",
-      "Note: Recompile with -Xlint:unchecked for details."
+      "Note: Recompile with -Xlint:unchecked for details.",
+
+      "w: ATTENTION!",
+      "This build uses unsafe internal compiler arguments:",
+      "-XXLanguage:+NonParenthesizedAnnotationsOnFunctionalTypes",
+      "-XXLanguage:-NewInference",
+      "-XXLanguage:+InlineClasses",
+      "This mode is not recommended for production use,",
+      "as no stability/compatibility guarantees are given on",
+      "compiler or generated code. Use it at your own risk!"
   }
   skipPrefixes = [
       "See the profiling report at:",
diff --git a/development/diagnose-build-failure/diagnose-build-failure.sh b/development/diagnose-build-failure/diagnose-build-failure.sh
index 5df67c5..2d60256 100755
--- a/development/diagnose-build-failure/diagnose-build-failure.sh
+++ b/development/diagnose-build-failure/diagnose-build-failure.sh
@@ -5,14 +5,24 @@
 scriptName="$(basename $0)"
 
 function usage() {
-  echo "usage: $0 <tasks>"
-  echo "Attempts to diagnose why "'`'"./gradlew <tasks>"'`'" fails"
+  echo "NAME"
+  echo "  diagnose-build-failure.sh"
   echo
-  echo "For example:"
+  echo "SYNOPSIS"
+  echo "  ./development/diagnose-build-failure/diagnose-build-failure.sh [--message <message>] '<tasks>'"
   echo
+  echo "DESCRIPTION"
+  echo "  Attempts to identify why "'`'"./gradlew <tasks>"'`'" fails"
+  echo
+  echo "OPTIONS"
+  echo "--message <message>"
+  echo "  Replaces the requirement for "'`'"./gradlew <tasks>"'`'" to fail with the requirement that it produces the given message"
+  echo
+  echo "SAMPLE USAGE"
   echo "  $0 assembleDebug # or any other arguments you would normally give to ./gradlew"
   echo
-  echo "These are the types of diagnoses that $scriptName can make:"
+  echo "OUTPUT"
+  echo "  diagnose-build-failure will conclude one of the following:"
   echo
   echo "  A) Some state saved in memory by the Gradle daemon is triggering an error"
   echo "  B) Your source files have been changed"
@@ -23,11 +33,30 @@
   exit 1
 }
 
-gradleArgs="$*"
+expectedMessage=""
+while true; do
+  if [ "$#" -lt 1 ]; then
+    usage
+  fi
+  arg="$1"
+  shift
+  if [ "$arg" == "--message" ]; then
+    expectedMessage="$1"
+    shift
+    continue
+  fi
+  gradleArgs="$arg"
+  break
+done
 if [ "$gradleArgs" == "" ]; then
   usage
 fi
 
+if [ "$#" -gt 0 ]; then
+  echo "Unrecognized argument: $1"
+  exit 1
+fi
+
 workingDir="$(pwd)"
 if [ ! -e "$workingDir/gradlew" ]; then
   echo "Error; ./gradlew does not exist. Must cd to a dir containing a ./gradlew first"
@@ -64,19 +93,28 @@
 }
 
 function runBuild() {
-  echo -e "$COLOR_GREEN"
-  args="$*"
+  if [ "$expectedMessage" == "" ]; then
+    echo -e "$COLOR_GREEN"
+    testCommand="$*"
+    returnOnSuccess=0
+    returnOnFailure=1
+  else
+    testCommand="$* 2>&1 | grep '$expectedMessage'"
+    # invert the return value because the presence of this message indicates a problem in the build
+    returnOnSuccess=1
+    returnOnFailure=0
+  fi
   cd "$workingDir"
-  if eval $args; then
+  if eval $testCommand; then
     echo -e "$COLOR_WHITE"
     echo
-    echo '`'$args'`' succeeded
-    return 0
+    echo '`'$testCommand'`' succeeded
+    return $returnOnSuccess
   else
     echo -e "$COLOR_WHITE"
     echo
-    echo '`'$args'`' failed
-    return 1
+    echo '`'$testCommand'`' failed
+    return $returnOnFailure
   fi
 }
 
@@ -146,8 +184,8 @@
   backupState "$tempDir/clean"
 else
   echo
-  echo "The clean build also failed."
-  echo "This may mean that the build is failing for everyone"
+  echo "The clean build also reproduced the issue."
+  echo "This may mean that everyone is observing this issue"
   echo "This may mean that something about your checkout is different from others'"
   echo "You may be interested in running development/simplify-build-failure/simplify-build-failure.sh to identify the minimal set of source files required to reproduce this error"
   echo "Checking the status of your checkout:"
diff --git a/docs-fake/build.gradle b/docs-fake/build.gradle
index 35618cb..3ea38d6 100644
--- a/docs-fake/build.gradle
+++ b/docs-fake/build.gradle
@@ -67,6 +67,10 @@
         }
     }
     flavorDimensions "library-group"
+
+    lintOptions {
+        checkReleaseBuilds false
+    }
 }
 
 configurations.all {
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentActivity.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentActivity.java
index 8085a9c..0c1a46a 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentActivity.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentActivity.java
@@ -38,6 +38,8 @@
 import androidx.activity.ComponentActivity;
 import androidx.activity.OnBackPressedDispatcher;
 import androidx.activity.OnBackPressedDispatcherOwner;
+import androidx.activity.contextaware.ContextAware;
+import androidx.activity.contextaware.OnContextAvailableListener;
 import androidx.activity.result.ActivityResultCallback;
 import androidx.activity.result.ActivityResultRegistry;
 import androidx.activity.result.ActivityResultRegistryOwner;
@@ -99,6 +101,7 @@
      */
     public FragmentActivity() {
         super();
+        init();
     }
 
     /**
@@ -114,6 +117,22 @@
     @ContentView
     public FragmentActivity(@LayoutRes int contentLayoutId) {
         super(contentLayoutId);
+        init();
+    }
+
+    private void init() {
+        addOnContextAvailableListener(new OnContextAvailableListener() {
+            @Override
+            public void onContextAvailable(@NonNull ContextAware contextAware,
+                    @NonNull Context context, @Nullable Bundle savedInstanceState) {
+                mFragments.attachHost(null /*parent*/);
+
+                if (savedInstanceState != null) {
+                    Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
+                    mFragments.restoreSaveState(p);
+                }
+            }
+        });
     }
 
     // ------------------------------------------------------------------------
@@ -230,13 +249,6 @@
      */
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
-        mFragments.attachHost(null /*parent*/);
-
-        if (savedInstanceState != null) {
-            Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);
-            mFragments.restoreSaveState(p);
-        }
-
         super.onCreate(savedInstanceState);
 
         mFragmentLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java
index a40ba25..ef58362 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/app/MediaRouteDynamicControllerDialog.java
@@ -577,7 +577,8 @@
     List<MediaRouter.RouteInfo> getCurrentGroupableRoutes() {
         List<MediaRouter.RouteInfo> groupableRoutes = new ArrayList<>();
         for (MediaRouter.RouteInfo route : mSelectedRoute.getProvider().getRoutes()) {
-            MediaRouter.RouteInfo.DynamicGroupState state = route.getDynamicGroupState();
+            MediaRouter.RouteInfo.DynamicGroupState state =
+                    mSelectedRoute.getDynamicGroupState(route);
             if (state != null && state.isGroupable()) {
                 groupableRoutes.add(route);
             }
@@ -625,7 +626,8 @@
 
         mMemberRoutes.addAll(mSelectedRoute.getMemberRoutes());
         for (MediaRouter.RouteInfo route : mSelectedRoute.getProvider().getRoutes()) {
-            MediaRouter.RouteInfo.DynamicGroupState state = route.getDynamicGroupState();
+            MediaRouter.RouteInfo.DynamicGroupState state =
+                    mSelectedRoute.getDynamicGroupState(route);
             if (state == null) continue;
 
             if (state.isGroupable()) {
@@ -1176,7 +1178,8 @@
                 if (route.isSelected()) {
                     return true;
                 }
-                MediaRouter.RouteInfo.DynamicGroupState state = route.getDynamicGroupState();
+                MediaRouter.RouteInfo.DynamicGroupState state =
+                        mSelectedRoute.getDynamicGroupState(route);
                 return state != null && state.getSelectionState()
                         == MediaRouteProvider.DynamicGroupRouteController
                         .DynamicRouteDescriptor.SELECTED;
@@ -1193,7 +1196,8 @@
                 }
                 // Selected route that can't be unselected has to be disabled.
                 if (isSelected(route)) {
-                    MediaRouter.RouteInfo.DynamicGroupState state = route.getDynamicGroupState();
+                    MediaRouter.RouteInfo.DynamicGroupState state =
+                            mSelectedRoute.getDynamicGroupState(route);
                     return state != null && state.isUnselectable();
                 }
                 return true;
@@ -1349,13 +1353,13 @@
         @Override
         public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo route) {
             boolean shouldRefreshRoute = false;
-            if (route == mSelectedRoute && route.getDynamicGroupState() != null) {
+            if (route == mSelectedRoute && route.getDynamicGroupController() != null) {
                 for (MediaRouter.RouteInfo memberRoute : route.getProvider().getRoutes()) {
                     if (mSelectedRoute.getMemberRoutes().contains(memberRoute)) {
                         continue;
                     }
                     MediaRouter.RouteInfo.DynamicGroupState state =
-                            memberRoute.getDynamicGroupState();
+                            mSelectedRoute.getDynamicGroupState(memberRoute);
 
                     // Refresh items only when a new groupable route is found.
                     if (state != null && state.isGroupable()
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteProvider.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteProvider.java
index 8934254..4c59b4d 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteProvider.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouteProvider.java
@@ -549,12 +549,13 @@
         }
 
         /**
-         * Sets the dynamic route descriptors for routes.
+         * Sets the dynamic route descriptors for the dynamic group.
          * <p>
-         * The dynamic group controller must call this method to notify the current
-         * dynamic group state of routes.
+         * The dynamic group controller should call this method to notify the current
+         * dynamic group state.
          * </p>
          * @param routes The dynamic route descriptors for published routes.
+         *               At least a selected or selecting route must be included.
          * @deprecated Use {@link #notifyDynamicRoutesChanged(MediaRouteDescriptor, Collection)}
          * instead to notify information of the group.
          */
@@ -580,13 +581,15 @@
         }
 
         /**
-         * Sets the group route descriptor and the dynamic route descriptors for dynamicRoutes.
+         * Sets the group route descriptor and the dynamic route descriptors for the dynamic group.
          * <p>
-         * The dynamic group controller must call this method to notify the current
-         * dynamic group state of dynamicRoutes.
+         * The dynamic group controller should call this method to notify the current
+         * dynamic group state.
          * </p>
          * @param groupRoute The media route descriptor describing the dynamic group.
+         *                   The name, description, and volume information are used.
          * @param dynamicRoutes The dynamic route descriptors for published routes.
+         *                      At least a selected or selecting route must be included.
          */
         public final void notifyDynamicRoutesChanged(
                 @NonNull MediaRouteDescriptor groupRoute,
diff --git a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
index 505ca8b..9fbd86a 100644
--- a/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
+++ b/mediarouter/mediarouter/src/main/java/androidx/mediarouter/media/MediaRouter.java
@@ -43,6 +43,7 @@
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.RestrictTo;
+import androidx.collection.ArrayMap;
 import androidx.core.app.ActivityManagerCompat;
 import androidx.core.content.ContextCompat;
 import androidx.core.hardware.display.DisplayManagerCompat;
@@ -942,9 +943,8 @@
         private IntentSender mSettingsIntent;
         MediaRouteDescriptor mDescriptor;
 
-        DynamicRouteDescriptor mDynamicDescriptor;
-        private DynamicGroupState mDynamicGroupState;
         private List<RouteInfo> mMemberRoutes = new ArrayList<>();
+        private Map<String, DynamicRouteDescriptor> mDynamicGroupDescriptors;
 
         @IntDef({CONNECTION_STATE_DISCONNECTED, CONNECTION_STATE_CONNECTING,
                 CONNECTION_STATE_CONNECTED})
@@ -1598,16 +1598,17 @@
         }
 
         /**
-         * Gets dynamic group state of the route
+         * Gets the dynamic group state of the given route.
          * @hide
          */
-        @Nullable
         @RestrictTo(LIBRARY)
-        public DynamicGroupState getDynamicGroupState() {
-            if (mDynamicGroupState == null && mDynamicDescriptor != null) {
-                mDynamicGroupState = new DynamicGroupState();
+        @Nullable
+        public DynamicGroupState getDynamicGroupState(RouteInfo route) {
+            if (mDynamicGroupDescriptors != null
+                    && mDynamicGroupDescriptors.containsKey(route.mUniqueId)) {
+                return new DynamicGroupState(mDynamicGroupDescriptors.get(route.mUniqueId));
             }
-            return mDynamicGroupState;
+            return null;
         }
 
         /**
@@ -1839,14 +1840,18 @@
 
         void updateDynamicDescriptors(Collection<DynamicRouteDescriptor> dynamicDescriptors) {
             mMemberRoutes.clear();
+            if (mDynamicGroupDescriptors == null) {
+                mDynamicGroupDescriptors = new ArrayMap<>();
+            }
+            mDynamicGroupDescriptors.clear();
 
-            for (DynamicRouteDescriptor dynamicDescriptor :
-                    dynamicDescriptors) {
+            for (DynamicRouteDescriptor dynamicDescriptor : dynamicDescriptors) {
                 RouteInfo route = findRouteByDynamicRouteDescriptor(dynamicDescriptor);
                 if (route == null) {
                     continue;
                 }
-                route.mDynamicDescriptor = dynamicDescriptor;
+                mDynamicGroupDescriptors.put(route.mUniqueId, dynamicDescriptor);
+
                 if ((dynamicDescriptor.getSelectionState() == DynamicRouteDescriptor.SELECTING)
                         || (dynamicDescriptor.getSelectionState()
                         == DynamicRouteDescriptor.SELECTED)) {
@@ -1867,7 +1872,12 @@
          * @hide
          */
         @RestrictTo(LIBRARY)
-        public class DynamicGroupState {
+        public static final class DynamicGroupState {
+            final DynamicRouteDescriptor mDynamicDescriptor;
+
+            DynamicGroupState(DynamicRouteDescriptor descriptor) {
+                mDynamicDescriptor = descriptor;
+            }
             /**
              * Gets the selection state of the route when the {@link MediaRouteProvider} of the
              * route supports
@@ -2247,6 +2257,7 @@
          * @param data Error data, or null if none.
          * Contents depend on the {@link MediaControlIntent media control action}.
          */
+        @SuppressLint("UnknownNullness")
         public void onError(String error, Bundle data) {
         }
     }
@@ -2511,12 +2522,17 @@
             return mSelectedRoute;
         }
 
+        @Nullable
+        RouteInfo.DynamicGroupState getDynamicGroupState(RouteInfo route) {
+            return mSelectedRoute.getDynamicGroupState(route);
+        }
+
         void addMemberToDynamicGroup(@NonNull RouteInfo route) {
             if (!(mSelectedRouteController instanceof DynamicGroupRouteController)) {
                 throw new IllegalStateException("There is no currently selected "
                         + "dynamic group route.");
             }
-            RouteInfo.DynamicGroupState state = route.getDynamicGroupState();
+            RouteInfo.DynamicGroupState state = getDynamicGroupState(route);
             if (mSelectedRoute.getMemberRoutes().contains(route)
                     || state == null || !state.isGroupable()) {
                 Log.w(TAG, "Ignoring attemp to add a non-groupable route to dynamic group : "
@@ -2532,7 +2548,7 @@
                 throw new IllegalStateException("There is no currently selected "
                         + "dynamic group route.");
             }
-            RouteInfo.DynamicGroupState state = route.getDynamicGroupState();
+            RouteInfo.DynamicGroupState state = getDynamicGroupState(route);
             if (!mSelectedRoute.getMemberRoutes().contains(route)
                     || state == null || !state.isUnselectable()) {
                 Log.w(TAG, "Ignoring attempt to remove a non-unselectable member route : "
@@ -2552,7 +2568,7 @@
                 throw new IllegalStateException("There is no currently selected dynamic group "
                         + "route.");
             }
-            RouteInfo.DynamicGroupState state = route.getDynamicGroupState();
+            RouteInfo.DynamicGroupState state = getDynamicGroupState(route);
             if (state == null || !state.isTransferable()) {
                 Log.w(TAG, "Ignoring attempt to transfer to a non-transferable route.");
                 return;
diff --git a/paging/common/api/3.0.0-alpha04.txt b/paging/common/api/3.0.0-alpha04.txt
index 80803ed..3715c51 100644
--- a/paging/common/api/3.0.0-alpha04.txt
+++ b/paging/common/api/3.0.0-alpha04.txt
@@ -273,6 +273,7 @@
     method public static <T> androidx.paging.PagingData<T> empty();
     method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+    method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
     method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
     method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
@@ -282,6 +283,7 @@
 
   public static final class PagingData.Companion {
     method public <T> androidx.paging.PagingData<T> empty();
+    method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
   }
 
diff --git a/paging/common/api/current.txt b/paging/common/api/current.txt
index 80803ed..3715c51 100644
--- a/paging/common/api/current.txt
+++ b/paging/common/api/current.txt
@@ -273,6 +273,7 @@
     method public static <T> androidx.paging.PagingData<T> empty();
     method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+    method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
     method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
     method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
@@ -282,6 +283,7 @@
 
   public static final class PagingData.Companion {
     method public <T> androidx.paging.PagingData<T> empty();
+    method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
   }
 
diff --git a/paging/common/api/public_plus_experimental_3.0.0-alpha04.txt b/paging/common/api/public_plus_experimental_3.0.0-alpha04.txt
index e6aeb78..e631244 100644
--- a/paging/common/api/public_plus_experimental_3.0.0-alpha04.txt
+++ b/paging/common/api/public_plus_experimental_3.0.0-alpha04.txt
@@ -275,6 +275,7 @@
     method public static <T> androidx.paging.PagingData<T> empty();
     method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+    method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
     method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
     method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
@@ -284,6 +285,7 @@
 
   public static final class PagingData.Companion {
     method public <T> androidx.paging.PagingData<T> empty();
+    method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
   }
 
diff --git a/paging/common/api/public_plus_experimental_current.txt b/paging/common/api/public_plus_experimental_current.txt
index e6aeb78..e631244 100644
--- a/paging/common/api/public_plus_experimental_current.txt
+++ b/paging/common/api/public_plus_experimental_current.txt
@@ -275,6 +275,7 @@
     method public static <T> androidx.paging.PagingData<T> empty();
     method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+    method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
     method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
     method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
@@ -284,6 +285,7 @@
 
   public static final class PagingData.Companion {
     method public <T> androidx.paging.PagingData<T> empty();
+    method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
   }
 
diff --git a/paging/common/api/restricted_3.0.0-alpha04.txt b/paging/common/api/restricted_3.0.0-alpha04.txt
index 80803ed..3715c51 100644
--- a/paging/common/api/restricted_3.0.0-alpha04.txt
+++ b/paging/common/api/restricted_3.0.0-alpha04.txt
@@ -273,6 +273,7 @@
     method public static <T> androidx.paging.PagingData<T> empty();
     method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+    method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
     method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
     method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
@@ -282,6 +283,7 @@
 
   public static final class PagingData.Companion {
     method public <T> androidx.paging.PagingData<T> empty();
+    method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
   }
 
diff --git a/paging/common/api/restricted_current.txt b/paging/common/api/restricted_current.txt
index 80803ed..3715c51 100644
--- a/paging/common/api/restricted_current.txt
+++ b/paging/common/api/restricted_current.txt
@@ -273,6 +273,7 @@
     method public static <T> androidx.paging.PagingData<T> empty();
     method @CheckResult public androidx.paging.PagingData<T> filter(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method @CheckResult public <R> androidx.paging.PagingData<R> flatMap(kotlin.jvm.functions.Function1<? super T,? extends java.lang.Iterable<? extends R>> transform);
+    method public static <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public androidx.paging.PagingData<T> insertFooterItem(T item);
     method @CheckResult public androidx.paging.PagingData<T> insertHeaderItem(T item);
     method @CheckResult public static <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
@@ -282,6 +283,7 @@
 
   public static final class PagingData.Companion {
     method public <T> androidx.paging.PagingData<T> empty();
+    method public <T> androidx.paging.PagingData<T> from(java.util.List<? extends T> data);
     method @CheckResult public <T extends R, R> androidx.paging.PagingData<R> insertSeparators(androidx.paging.PagingData<T> pagingData, kotlin.jvm.functions.Function2<? super T,? super T,? extends R> generator);
   }
 
diff --git a/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt b/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt
index a4c38b3..828d8a0 100644
--- a/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/CachedPagingData.kt
@@ -66,6 +66,11 @@
  * upon configuration change (e.g. rotation), then new Activity will receive the existing data
  * immediately rather than fetching it from scratch.
  *
+ * Calling [cachedIn] is required to allow calling
+ * [submitData][androidx.paging.AsyncPagingDataAdapter] on the same instance of [PagingData]
+ * emitted by [Pager] or any of its transformed derivatives, as reloading data from scratch on the
+ * same generation of [PagingData] is an unsupported operation.
+ *
  * Note that this does not turn the `Flow<PagingData>` into a hot stream. It won't execute any
  * unnecessary code unless it is being collected.
  *
diff --git a/paging/common/src/main/kotlin/androidx/paging/PagingData.kt b/paging/common/src/main/kotlin/androidx/paging/PagingData.kt
index c73c34b..31d8b97 100644
--- a/paging/common/src/main/kotlin/androidx/paging/PagingData.kt
+++ b/paging/common/src/main/kotlin/androidx/paging/PagingData.kt
@@ -115,15 +115,46 @@
             override fun refresh() {}
         }
 
-        private val EMPTY = PagingData<Any>(
+        @Suppress("MemberVisibilityCanBePrivate") // synthetic access
+        internal val EMPTY = PagingData<Any>(
             flow = flowOf(PageEvent.Insert.EMPTY_REFRESH_LOCAL),
             receiver = NOOP_RECEIVER
         )
 
-        @Suppress("UNCHECKED_CAST", "SyntheticAccessor")
+        /**
+         * Create a [PagingData] that immediately displays an empty list of items when submitted to
+         * [AsyncPagingDataAdapter][androidx.paging.AsyncPagingDataAdapter].
+         */
+        @Suppress("UNCHECKED_CAST")
         @JvmStatic // Convenience for Java developers.
         fun <T : Any> empty() = EMPTY as PagingData<T>
 
+        /**
+         * Create a [PagingData] that immediately displays a static list of items when submitted to
+         * [AsyncPagingDataAdapter][androidx.paging.AsyncPagingDataAdapter].
+         *
+         * @param data Static list of [T] to display.
+         */
+        @JvmStatic // Convenience for Java developers.
+        fun <T : Any> from(data: List<T>) = PagingData(
+            flow = flowOf(
+                PageEvent.Insert.Refresh(
+                    pages = listOf(TransformablePage(originalPageOffset = 0, data = data)),
+                    placeholdersBefore = 0,
+                    placeholdersAfter = 0,
+                    combinedLoadStates = CombinedLoadStates(
+                        source = LoadStates(
+                            refresh = LoadState.NotLoading.Incomplete,
+                            prepend = LoadState.NotLoading.Complete,
+                            append = LoadState.NotLoading.Complete
+                        )
+                    )
+
+                )
+            ),
+            receiver = NOOP_RECEIVER
+        )
+
         // NOTE: samples in the doc below are manually imported from Java code in the samples
         // project, since Java cannot be linked with @sample.
         // DO NOT CHANGE THE BELOW COMMENT WITHOUT MAKING THE CORRESPONDING CHANGE IN `samples/`
diff --git a/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt b/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
index 931c7f3..67e669b 100644
--- a/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
+++ b/paging/common/src/test/kotlin/androidx/paging/PagingDataDifferTest.kt
@@ -22,9 +22,9 @@
 import androidx.paging.PageEvent.Insert.Companion.Append
 import androidx.paging.PageEvent.Insert.Companion.Prepend
 import androidx.paging.PageEvent.Insert.Companion.Refresh
+import androidx.testutils.MainDispatcherRule
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.CoroutineDispatcher
-import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.flow.collect
@@ -34,11 +34,8 @@
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlinx.coroutines.test.TestCoroutineScope
-import kotlinx.coroutines.test.resetMain
 import kotlinx.coroutines.test.runBlockingTest
-import kotlinx.coroutines.test.setMain
-import org.junit.After
-import org.junit.Before
+import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
@@ -53,17 +50,10 @@
 class PagingDataDifferTest {
     private val testScope = TestCoroutineScope()
 
-    @Before
-    fun setup() {
-        Dispatchers.setMain(
-            testScope.coroutineContext[ContinuationInterceptor] as CoroutineDispatcher
-        )
-    }
-
-    @After
-    fun tearDown() {
-        Dispatchers.resetMain()
-    }
+    @get:Rule
+    val dispatcherRule = MainDispatcherRule(
+        testScope.coroutineContext[ContinuationInterceptor] as CoroutineDispatcher
+    )
 
     @Test
     fun collectFrom_static() = testScope.runBlockingTest {
diff --git a/paging/runtime/src/main/java/androidx/paging/PagingLiveData.kt b/paging/runtime/src/main/java/androidx/paging/PagingLiveData.kt
index 3c3805a..d4f549f 100644
--- a/paging/runtime/src/main/java/androidx/paging/PagingLiveData.kt
+++ b/paging/runtime/src/main/java/androidx/paging/PagingLiveData.kt
@@ -35,6 +35,15 @@
 /**
  * Operator which caches a [LiveData] of [PagingData] within the scope of a [Lifecycle].
  *
+ * [cachedIn] multicasts pages loaded and transformed by a [PagingData], allowing multiple
+ * observers on the same instance of [PagingData] to receive the same events, avoiding redundant
+ * work, but comes at the cost of buffering those events in memory.
+ *
+ * Calling [cachedIn] is required to allow calling
+ * [submitData][androidx.paging.AsyncPagingDataAdapter] on the same instance of [PagingData]
+ * emitted by [Pager] or any of its transformed derivatives, as reloading data from scratch on the
+ * same generation of [PagingData] is an unsupported operation.
+ *
  * @param lifecycle The [Lifecycle] where the page cache will be kept alive.
  */
 fun <T : Any> LiveData<PagingData<T>>.cachedIn(lifecycle: Lifecycle) = asFlow()
@@ -44,6 +53,15 @@
 /**
  * Operator which caches a [LiveData] of [PagingData] within a [CoroutineScope].
  *
+ * [cachedIn] multicasts pages loaded and transformed by a [PagingData], allowing multiple
+ * observers on the same instance of [PagingData] to receive the same events, avoiding redundant
+ * work, but comes at the cost of buffering those events in memory.
+ *
+ * Calling [cachedIn] is required to allow calling
+ * [submitData][androidx.paging.AsyncPagingDataAdapter] on the same instance of [PagingData]
+ * emitted by [Pager] or any of its transformed derivatives, as reloading data from scratch on the
+ * same generation of [PagingData] is an unsupported operation.
+ *
  * @param scope The [CoroutineScope] where the page cache will be kept alive. Typically this
  * would be a managed scope such as `ViewModel.viewModelScope`, which automatically cancels after
  * the [PagingData] stream is no longer needed. Otherwise, the provided [CoroutineScope] must be
diff --git a/paging/rxjava2/src/main/java/androidx/paging/rxjava2/PagingRx.kt b/paging/rxjava2/src/main/java/androidx/paging/rxjava2/PagingRx.kt
index 278b07b..c87a1709 100644
--- a/paging/rxjava2/src/main/java/androidx/paging/rxjava2/PagingRx.kt
+++ b/paging/rxjava2/src/main/java/androidx/paging/rxjava2/PagingRx.kt
@@ -54,6 +54,15 @@
 /**
  * Operator which caches an [Observable] of [PagingData] within a [CoroutineScope].
  *
+ * [cachedIn] multicasts pages loaded and transformed by a [PagingData], allowing multiple
+ * observers on the same instance of [PagingData] to receive the same events, avoiding redundant
+ * work, but comes at the cost of buffering those events in memory.
+ *
+ * Calling [cachedIn] is required to allow calling
+ * [submitData][androidx.paging.AsyncPagingDataAdapter] on the same instance of [PagingData]
+ * emitted by [Pager] or any of its transformed derivatives, as reloading data from scratch on the
+ * same generation of [PagingData] is an unsupported operation.
+ *
  * @param scope The [CoroutineScope] where the page cache will be kept alive. Typically this
  * would be a managed scope such as `ViewModel.viewModelScope`, which automatically cancels after
  * the [PagingData] stream is no longer needed. Otherwise, the provided [CoroutineScope] must be
@@ -70,6 +79,15 @@
 /**
  * Operator which caches a [Flowable] of [PagingData] within a [CoroutineScope].
  *
+ * [cachedIn] multicasts pages loaded and transformed by a [PagingData], allowing multiple
+ * observers on the same instance of [PagingData] to receive the same events, avoiding redundant
+ * work, but comes at the cost of buffering those events in memory.
+ *
+ * Calling [cachedIn] is required to allow calling
+ * [submitData][androidx.paging.AsyncPagingDataAdapter] on the same instance of [PagingData]
+ * emitted by [Pager] or any of its transformed derivatives, as reloading data from scratch on the
+ * same generation of [PagingData] is an unsupported operation.
+ *
  * @param scope The [CoroutineScope] where the page cache will be kept alive. Typically this
  * would be a managed scope such as `ViewModel.viewModelScope`, which automatically cancels after
  * the [PagingData] stream is no longer needed. Otherwise, the provided [CoroutineScope] must be
diff --git a/paging/rxjava3/src/main/java/androidx/paging/rxjava3/PagingRx.kt b/paging/rxjava3/src/main/java/androidx/paging/rxjava3/PagingRx.kt
index 5c351c2..0381e14 100644
--- a/paging/rxjava3/src/main/java/androidx/paging/rxjava3/PagingRx.kt
+++ b/paging/rxjava3/src/main/java/androidx/paging/rxjava3/PagingRx.kt
@@ -54,6 +54,15 @@
 /**
  * Operator which caches an [Observable] of [PagingData] within a [CoroutineScope].
  *
+ * [cachedIn] multicasts pages loaded and transformed by a [PagingData], allowing multiple
+ * observers on the same instance of [PagingData] to receive the same events, avoiding redundant
+ * work, but comes at the cost of buffering those events in memory.
+ *
+ * Calling [cachedIn] is required to allow calling
+ * [submitData][androidx.paging.AsyncPagingDataAdapter] on the same instance of [PagingData]
+ * emitted by [Pager] or any of its transformed derivatives, as reloading data from scratch on the
+ * same generation of [PagingData] is an unsupported operation.
+ *
  * @param scope The [CoroutineScope] where the page cache will be kept alive. Typically this
  * would be a managed scope such as `ViewModel.viewModelScope`, which automatically cancels after
  * the [PagingData] stream is no longer needed. Otherwise, the provided [CoroutineScope] must be
@@ -70,6 +79,15 @@
 /**
  * Operator which caches a [Flowable] of [PagingData] within a [CoroutineScope].
  *
+ * [cachedIn] multicasts pages loaded and transformed by a [PagingData], allowing multiple
+ * observers on the same instance of [PagingData] to receive the same events, avoiding redundant
+ * work, but comes at the cost of buffering those events in memory.
+ *
+ * Calling [cachedIn] is required to allow calling
+ * [submitData][androidx.paging.AsyncPagingDataAdapter] on the same instance of [PagingData]
+ * emitted by [Pager] or any of its transformed derivatives, as reloading data from scratch on the
+ * same generation of [PagingData] is an unsupported operation.
+ *
  * @param scope The [CoroutineScope] where the page cache will be kept alive. Typically this
  * would be a managed scope such as `ViewModel.viewModelScope`, which automatically cancels after
  * the [PagingData] stream is no longer needed. Otherwise, the provided [CoroutineScope] must be
diff --git a/samples/BiometricDemos/OWNERS b/samples/BiometricDemos/OWNERS
deleted file mode 100644
index 471409f..0000000
--- a/samples/BiometricDemos/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-kchyn@google.com
-curtislb@google.com
diff --git a/samples/BiometricDemos/_index.html b/samples/BiometricDemos/_index.html
deleted file mode 100644
index 5c64363..0000000
--- a/samples/BiometricDemos/_index.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<p>The Biometric Demos application contains a simple application that asks for authentication.
-</p>
\ No newline at end of file
diff --git a/samples/BiometricDemos/build.gradle b/samples/BiometricDemos/build.gradle
deleted file mode 100644
index 3618960..0000000
--- a/samples/BiometricDemos/build.gradle
+++ /dev/null
@@ -1,15 +0,0 @@
-plugins {
-    id("AndroidXPlugin")
-    id("com.android.application")
-}
-
-dependencies {
-    implementation(project(":appcompat:appcompat"))
-    implementation(project(":biometric:biometric"))
-}
-
-android {
-    defaultConfig {
-        vectorDrawables.useSupportLibrary = true
-    }
-}
diff --git a/samples/BiometricDemos/lint-baseline.xml b/samples/BiometricDemos/lint-baseline.xml
deleted file mode 100644
index 2e8004c..0000000
--- a/samples/BiometricDemos/lint-baseline.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<issues format="5" by="lint 3.5.0-beta04" client="gradle" variant="debug" version="3.5.0-beta04">
-
-    <issue
-        id="NewApi"
-        message="Exception requires API level 23 (current min is 23): `android.security.keystore.KeyPermanentlyInvalidatedException`, and having a surrounding/preceding version check **does** not help since prior to API level 19, just **loading** the class will cause a crash. Consider marking the surrounding class with `RequiresApi(19)` to ensure that the class is never loaded except when on API 19 or higher."
-        errorLine1="        } catch (KeyPermanentlyInvalidatedException e) {"
-        errorLine2="                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="src/main/java/com/example/android/biometric/BiometricPromptDemo.java"
-            line="314"
-            column="18"/>
-    </issue>
-
-    <issue
-        id="SwitchIntDef"
-        message="Switch statement on an `int` with known associated constant missing case `BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE`"
-        errorLine1="                switch (bm.canAuthenticate()) {"
-        errorLine2="                ~~~~~~">
-        <location
-            file="src/main/java/com/example/android/biometric/BiometricPromptDemo.java"
-            line="190"
-            column="17"/>
-    </issue>
-
-    <issue
-        id="TrulyRandom"
-        message="Potentially insecure random numbers on Android 4.3 and older. Read https://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html for more info."
-        errorLine1="            cipher.init(Cipher.ENCRYPT_MODE, key);"
-        errorLine2="                   ~~~~">
-        <location
-            file="src/main/java/com/example/android/biometric/BiometricPromptDemo.java"
-            line="312"
-            column="20"/>
-    </issue>
-
-    <issue
-        id="AllowBackup"
-        message="On SDK version 23 and up, your app data will be automatically backed up and restored on app install. Consider adding the attribute `android:fullBackupContent` to specify an `@xml` resource which configures which files to backup. More info: https://developer.android.com/training/backup/autosyncapi.html"
-        errorLine1="    &lt;application android:label=&quot;@string/activity_sample_code&quot;"
-        errorLine2="     ~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="38"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="AllowBackup"
-        message="Should explicitly set `android:allowBackup` to `true` or `false` (it&apos;s `true` by default, and that can have some security implications for the application&apos;s data)"
-        errorLine1="    &lt;application android:label=&quot;@string/activity_sample_code&quot;"
-        errorLine2="     ~~~~~~~~~~~">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="38"
-            column="6"/>
-    </issue>
-
-    <issue
-        id="IconMissingDensityFolder"
-        message="Missing density variation folders in `src/main/res`: drawable-mdpi, drawable-xhdpi, drawable-xxhdpi">
-        <location
-            file="src/main/res"/>
-    </issue>
-
-    <issue
-        id="GoogleAppIndexingWarning"
-        message="App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW intent filter. See issue explanation for more details."
-        errorLine1="    &lt;application android:label=&quot;@string/activity_sample_code&quot;"
-        errorLine2="    ^">
-        <location
-            file="src/main/AndroidManifest.xml"
-            line="38"
-            column="5"/>
-    </issue>
-
-</issues>
diff --git a/samples/BiometricDemos/src/main/AndroidManifest.xml b/samples/BiometricDemos/src/main/AndroidManifest.xml
deleted file mode 100644
index 7459a17..0000000
--- a/samples/BiometricDemos/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-
-<!-- Declare the contents of this Android application.  The namespace
-     attribute brings in the Android platform namespace, and the package
-     supplies a unique name for the application.  When writing your
-     own application, the package name must be changed from "com.example.*"
-     to come from a domain that you own or have control over. -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.biometric">
-
-    <!-- Permission to use BiometricPrompt -->
-    <uses-permission android:name="android.permission.USE_BIOMETRIC" />
-
-    <!-- Permission to use Fingerprint -->
-    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
-
-    <!-- The smallest screen this app works on is a phone.  The app will
-         scale its UI to larger screens but doesn't make good use of them
-         so allow the compatibility mode button to be shown (mostly because
-         this is just convenient for testing). -->
-    <supports-screens android:requiresSmallestWidthDp="320"
-            android:compatibleWidthLimitDp="480" />
-
-    <application android:label="@string/activity_sample_code"
-            android:supportsRtl="true"
-            android:icon="@drawable/app_sample_code"
-            android:hardwareAccelerated="true"
-            android:testOnly="false">
-
-        <activity android:name=".BiometricPromptDemo"
-                  android:theme="@style/AppTheme">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".BiometricPromptDemoActivityHost"
-            android:theme="@style/AppTheme" />
-
-        <activity android:name=".BiometricPromptDemoFragmentHostActivity"
-            android:theme="@style/AppTheme" />
-
-        <activity android:name=".BiometricPromptDemoBiometricBoundKeyActivity"
-            android:theme="@style/AppTheme"/>
-
-        <activity android:name=".BiometricPromptDemoCredentialBoundKeyActivity"
-            android:theme="@style/AppTheme"/>
-    </application>
-
-</manifest>
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemo.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemo.java
deleted file mode 100644
index a73d222..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemo.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.content.Intent;
-import android.os.Build;
-import android.os.Bundle;
-import android.view.View;
-import android.widget.Button;
-
-import androidx.annotation.Nullable;
-import androidx.fragment.app.FragmentActivity;
-
-/**
- * Demo for BiometricPrompt, demonstrating: 1) Use of biometrics without a crypto object. 2) Use
- * of biometrics with a crypto object, where the keys become invalid after new biometric enrollment.
- * 3) Use of biometric prompt (compat) that persists through orientation changes. 4) Use of
- * biometric prompt (compat) that doesn't persist through orientation changes. 5) Cancellation of
- * the authentication attempt.
- */
-public class BiometricPromptDemo extends FragmentActivity {
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.biometric_prompt_demo);
-        final Button hostInActivityButton = findViewById(R.id.host_in_activity_button);
-        final Button hostInFragmentButton = findViewById(R.id.host_in_fragment_button);
-        final Button biometricBoundKeyDemoButton =
-                findViewById(R.id.button_biometric_bound_key_demo);
-        final Button credentialBoundKeyDemoButton =
-                findViewById(R.id.button_credential_bound_key_demo);
-        hostInActivityButton.setOnClickListener(view -> launchActivityHost());
-        hostInFragmentButton.setOnClickListener(view -> launchFragmentHost());
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
-            biometricBoundKeyDemoButton.setOnClickListener(view -> launchBiometricBoundKeyDemo());
-            credentialBoundKeyDemoButton.setOnClickListener(view -> launchCredentialBoundKeyDemo());
-        } else {
-            biometricBoundKeyDemoButton.setVisibility(View.GONE);
-            credentialBoundKeyDemoButton.setVisibility(View.GONE);
-        }
-    }
-
-    private void launchActivityHost() {
-        final Intent intent = new Intent(this, BiometricPromptDemoActivityHost.class);
-        startActivity(intent);
-    }
-
-    private void launchFragmentHost() {
-        final Intent intent = new Intent(this, BiometricPromptDemoFragmentHostActivity.class);
-        startActivity(intent);
-    }
-
-    private void launchBiometricBoundKeyDemo() {
-        final Intent intent = new Intent(this, BiometricPromptDemoBiometricBoundKeyActivity.class);
-        startActivity(intent);
-    }
-
-    private void launchCredentialBoundKeyDemo() {
-        final Intent intent = new Intent(this, BiometricPromptDemoCredentialBoundKeyActivity.class);
-        startActivity(intent);
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoActivityController.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoActivityController.java
deleted file mode 100644
index aa4a225..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoActivityController.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.content.Context;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.biometric.BiometricPrompt;
-import androidx.fragment.app.FragmentActivity;
-
-/**
- * Implementation of {@link com.example.android.biometric.BiometricPromptDemoController} that
- * handles launching the biometric prompt from within an activity host.
- */
-class BiometricPromptDemoActivityController extends BiometricPromptDemoController {
-
-    private final FragmentActivity mActivity;
-
-    BiometricPromptDemoActivityController(
-            @NonNull FragmentActivity activity,
-            @NonNull View inflatedRootView) {
-        super(inflatedRootView);
-        mActivity = activity;
-    }
-
-    @Override
-    Context getApplicationContext() {
-        return mActivity.getApplicationContext();
-    }
-
-    @Override
-    void reconnect() {
-        mBiometricPrompt = new BiometricPrompt(mActivity, mAuthenticationCallback);
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoActivityHost.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoActivityHost.java
deleted file mode 100644
index b3b06f0..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoActivityHost.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.os.Bundle;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.FragmentActivity;
-
-/**
- * Hosting activity for the BiometricPrompt demo. Shows how a biometric prompt can be launched
- * directly from an activity by hooking into appropriate lifecycle methods for the activity.
- */
-public class BiometricPromptDemoActivityHost extends FragmentActivity {
-
-    private BiometricPromptDemoController mController;
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setContentView(R.layout.biometric_prompt_demo_content);
-        final TextView hostTypeTextView = findViewById(R.id.host_type_text_view);
-        hostTypeTextView.setText(R.string.label_host_type_activity);
-
-        mController = new BiometricPromptDemoActivityController(this,
-                findViewById(android.R.id.content));
-        mController.init(savedInstanceState);
-        mController.reconnect();
-    }
-
-    @Override
-    protected void onPause() {
-        mController.onPause();
-        super.onPause();
-    }
-
-    @Override
-    protected void onSaveInstanceState(@NonNull Bundle outState) {
-        super.onSaveInstanceState(outState);
-        mController.onSaveInstanceState(outState);
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoBiometricBoundKeyActivity.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoBiometricBoundKeyActivity.java
deleted file mode 100644
index fedac33..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoBiometricBoundKeyActivity.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RequiresApi;
-import androidx.biometric.BiometricPrompt;
-import androidx.fragment.app.FragmentActivity;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.util.Arrays;
-import java.util.concurrent.Executor;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.IvParameterSpec;
-
-/**
- * Demo activity that shows how BiometricPrompt can be used with biometric bound secret keys.
- */
-@RequiresApi(api = Build.VERSION_CODES.M)
-public class BiometricPromptDemoBiometricBoundKeyActivity extends FragmentActivity {
-
-    private static final String TAG = "bio_prompt_demo_control";
-    private static final String LOG_BUNDLE = "log";
-    private static final String KEY_NAME = "demo_key";
-    private static final String PAYLOAD = "hello";
-
-    private final Handler mHandler = new Handler(Looper.getMainLooper());
-    private final Executor mExecutor = mHandler::post;
-    private BiometricPrompt mBiometricPrompt;
-    private TextView mLogTextView;
-    private Cipher mEncryptingCipher;
-    private View mEncryptButton;
-    private byte[] mEncryptedBytes;
-    // If true decrypt, if false encrypt.
-    private boolean mShouldDecrypt;
-
-    private void log(String s) {
-        Log.d(TAG, s);
-        mLogTextView.append(s + '\n');
-    }
-
-    private void log(String s, Throwable tr) {
-        Log.e(TAG, "", tr);
-        mLogTextView.append(s + '\n' + tr.toString() + '\n');
-    }
-
-    private final BiometricPrompt.PromptInfo mPromptInfo = new BiometricPrompt.PromptInfo.Builder()
-            .setTitle("Title")
-            .setSubtitle("Subtitle")
-            .setDescription("Description")
-            .setNegativeButtonText("Negative Button")
-            .build();
-
-    private final BiometricPrompt.AuthenticationCallback mAuthenticationCallback =
-            new BiometricPrompt.AuthenticationCallback() {
-
-                @Override
-                public void onAuthenticationError(int err, @NonNull CharSequence message) {
-                    log("onAuthenticationError " + err + ": " + message);
-                }
-
-                @Override
-                public void onAuthenticationSucceeded(
-                        @NonNull BiometricPrompt.AuthenticationResult result) {
-                    final BiometricPrompt.CryptoObject cryptoObject = result.getCryptoObject();
-                    log("onAuthenticationSucceeded, cryptoObject: " + cryptoObject);
-                    if (cryptoObject != null) {
-                        try {
-                            if (mShouldDecrypt) {
-                                log("Decrypted payload: " + new String(
-                                        cryptoObject.getCipher().doFinal(mEncryptedBytes)));
-                            } else {
-                                // Save the cipher to use for decryption.
-                                mEncryptingCipher = cryptoObject.getCipher();
-                                mEncryptedBytes = mEncryptingCipher.doFinal(
-                                        PAYLOAD.getBytes(Charset.defaultCharset()));
-                                log("Test payload: " + PAYLOAD);
-                                log("Encrypted payload: " + Arrays.toString(mEncryptedBytes));
-                            }
-                        } catch (BadPaddingException | IllegalBlockSizeException e) {
-                            log("Failed to encrypt", e);
-                        }
-                    }
-                }
-
-                @Override
-                public void onAuthenticationFailed() {
-                    log("onAuthenticationFailed");
-                    mBiometricPrompt.cancelAuthentication();
-                }
-            };
-
-    private View.OnClickListener mGenerateKeyListener = view -> {
-        try {
-            BiometricPromptDemoSecretKeyHelper.generateBiometricBoundKey(KEY_NAME,
-                    true /* invalidatedByBiometricEnrollment */);
-            log("Generated a key");
-        } catch (InvalidAlgorithmParameterException | NoSuchAlgorithmException
-                | NoSuchProviderException e) {
-            log("Failed to generate key", e);
-        }
-    };
-
-    private Cipher getCryptoCipher() {
-        Cipher cipher = null;
-        try {
-            cipher = BiometricPromptDemoSecretKeyHelper.getCipher();
-        } catch (NoSuchPaddingException | NoSuchAlgorithmException e) {
-            log("Failed to get cipher", e);
-        }
-        return cipher;
-    }
-
-    private SecretKey getSecretKey() {
-        SecretKey secretKey = null;
-        try {
-            secretKey = BiometricPromptDemoSecretKeyHelper.getSecretKey(KEY_NAME);
-        } catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException
-                | UnrecoverableKeyException e) {
-            log("Failed to get secret key", e);
-        }
-        return secretKey;
-    }
-
-    private void authenticateWithCrypto(Cipher cipher) {
-        mBiometricPrompt.authenticate(mPromptInfo, new BiometricPrompt.CryptoObject(cipher));
-    }
-
-    private void authenticateWithEncryption() {
-        Cipher cipher = getCryptoCipher();
-        SecretKey secretKey = getSecretKey();
-        if (cipher == null || secretKey == null) {
-            return;
-        }
-        try {
-            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
-            mBiometricPrompt.authenticate(mPromptInfo,
-                    new BiometricPrompt.CryptoObject(cipher));
-            log("Started authentication with a crypto object");
-            authenticateWithCrypto(cipher);
-            mShouldDecrypt = false;
-        } catch (InvalidKeyException e) {
-            log("Failed to init cipher", e);
-        }
-    }
-
-    private void authenticateWithDecryption() {
-        Cipher cipher = getCryptoCipher();
-        SecretKey secretKey = getSecretKey();
-        if (cipher == null || secretKey == null) {
-            return;
-        }
-        if (mEncryptingCipher == null) {
-            log("User must first encrypt a message");
-            flashEncryptButton();
-            return;
-        }
-
-        try {
-            cipher.init(Cipher.DECRYPT_MODE, secretKey,
-                    new IvParameterSpec(mEncryptingCipher.getIV()));
-            mBiometricPrompt.authenticate(mPromptInfo,
-                    new BiometricPrompt.CryptoObject(cipher));
-            log("Started authentication with a crypto object");
-            authenticateWithCrypto(cipher);
-            mShouldDecrypt = true;
-        } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
-            log("Failed to init cipher", e);
-        }
-    }
-
-    private void flashEncryptButton() {
-        mEncryptButton.animate().alpha(0).setDuration(1000).withEndAction(new Runnable() {
-            @Override
-            public void run() {
-                mEncryptButton.animate().alpha(1).setDuration(1000);
-            }
-        });
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.biometric_prompt_demo_biometric_bound_key);
-
-        mLogTextView = findViewById(R.id.text_view_log);
-        mBiometricPrompt = new BiometricPrompt(this, mExecutor, mAuthenticationCallback);
-
-        ((TextView) findViewById(R.id.text_view_activity_description)).setText(
-                R.string.label_biometric_bound_key_activity_description);
-
-        if (savedInstanceState != null) {
-            mLogTextView.setText(savedInstanceState.getCharSequence(LOG_BUNDLE));
-        }
-
-        findViewById(R.id.button_generate_key).setOnClickListener(mGenerateKeyListener);
-        mEncryptButton = findViewById(R.id.button_unlock_and_use_key);
-        mEncryptButton.setOnClickListener(v -> authenticateWithEncryption());
-        findViewById(R.id.button_clear_log).setOnClickListener(v -> mLogTextView.setText(""));
-        findViewById(R.id.button_decrypt).setOnClickListener(v -> authenticateWithDecryption());
-    }
-
-    @Override
-    protected void onPause() {
-        mEncryptingCipher = null;
-        mShouldDecrypt = false;
-        mBiometricPrompt.cancelAuthentication();
-        super.onPause();
-    }
-
-    @Override
-    protected void onSaveInstanceState(@NonNull Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putCharSequence(LOG_BUNDLE, mLogTextView.getText());
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoController.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoController.java
deleted file mode 100644
index b996776..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoController.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.RadioGroup;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.biometric.BiometricManager;
-import androidx.biometric.BiometricManager.Authenticators;
-import androidx.biometric.BiometricPrompt;
-
-/**
- * Controller for the biometric prompt demo app. Coordinates the logic of initializing buttons,
- * generating the info, and launching the prompt itself.
- */
-abstract class BiometricPromptDemoController {
-
-    private static final String TAG = "bio_prompt_demo_control";
-
-    private static final String KEY_COUNTER = "saved_counter";
-    private static final String KEY_LOG = "saved_log";
-
-    private static final String BIOMETRIC_SUCCESS_MESSAGE = "BIOMETRIC_SUCCESS_MESSAGE";
-    private static final String BIOMETRIC_ERROR_HW_UNAVAILABLE_MESSAGE =
-            "BIOMETRIC_ERROR_HW_UNAVAILABLE";
-    private static final String BIOMETRIC_ERROR_NONE_ENROLLED_MESSAGE =
-            "BIOMETRIC_ERROR_NONE_ENROLLED";
-    private static final String BIOMETRIC_ERROR_NO_HARDWARE =
-            "BIOMETRIC_ERROR_NO_HARDWARE";
-    private static final String BIOMETRIC_ERROR_UNKNOWN = "Error unknown return result";
-
-    private static final int MODE_NONE = 0;
-    private static final int MODE_PERSIST_ACROSS_CONFIGURATION_CHANGES = 1;
-    private static final int MODE_CANCEL_ON_CONFIGURATION_CHANGE = 2;
-    private static final int MODE_CANCEL_AFTER_THREE_FAILURES = 3;
-
-    BiometricPrompt mBiometricPrompt;
-    private int mCounter;
-
-    private final Button mCanAuthenticateButton;
-    private final Button mAuthenticateButton;
-    private final CheckBox mRequireConfirmationCheckbox;
-    private final CheckBox mAllowDeviceCredentialCheckbox;
-    private final RadioGroup mBiometricPromptConfigurationRadioGroup;
-
-    private final TextView mLogView;
-
-    final BiometricPrompt.AuthenticationCallback mAuthenticationCallback =
-            new BiometricPrompt.AuthenticationCallback() {
-                private int mNumberFailedAttempts = 0;
-
-                @Override
-                public void onAuthenticationError(int err, @NonNull CharSequence message) {
-                    log("onAuthenticationError " + err + ": " + message);
-                    mNumberFailedAttempts = 0;
-                }
-
-                @Override
-                public void onAuthenticationSucceeded(
-                        @NonNull BiometricPrompt.AuthenticationResult result) {
-                    log("onAuthenticationSucceeded");
-                    mNumberFailedAttempts = 0;
-                }
-
-                @Override
-                public void onAuthenticationFailed() {
-                    log("onAuthenticationFailed");
-                    mNumberFailedAttempts++;
-
-                    // Cancel authentication after 3 failed attempts to test the cancel() method.
-                    if (getMode() == MODE_CANCEL_AFTER_THREE_FAILURES
-                            && mNumberFailedAttempts == 3) {
-                        mBiometricPrompt.cancelAuthentication();
-                    }
-                }
-            };
-
-    abstract Context getApplicationContext();
-
-    /**
-     * (Re)establish a connection between the host fragment/activity and the BiometricPrompt
-     * library.
-     *
-     * Developers should (re)create the BiometricPrompt every time the activity/fragment is
-     * created. This allows authentication to work across configuration changes. The internal
-     * implementation of the library uses fragments, which can be saved/restored. Instantiating
-     * the library with a new callback and executor early in the fragment/activity lifecycle (e.g.
-     * onCreate or onCreateView) allows the new instance to receive callbacks properly.
-     */
-    abstract void reconnect();
-
-    BiometricPromptDemoController(@NonNull View inflatedRootView) {
-        mCanAuthenticateButton = inflatedRootView.findViewById(R.id.can_authenticate);
-        mAuthenticateButton = inflatedRootView.findViewById(R.id.button_authenticate);
-        mRequireConfirmationCheckbox = inflatedRootView.findViewById(
-                R.id.checkbox_require_confirmation);
-        mAllowDeviceCredentialCheckbox = inflatedRootView.findViewById(
-                R.id.checkbox_allow_device_credential);
-        mBiometricPromptConfigurationRadioGroup = inflatedRootView.findViewById(
-                R.id.radio_group_biometric_prompt_configuration);
-
-        mLogView = inflatedRootView.findViewById(R.id.log_text);
-
-        Button clearLogButton = inflatedRootView.findViewById(R.id.button_clear_log);
-        clearLogButton.setOnClickListener((view1) -> mLogView.setText(""));
-    }
-
-    /** Sets up button callbacks and other state for the biometric prompt demo controller. */
-    void init(@Nullable Bundle savedInstanceState) {
-        if (savedInstanceState != null) {
-            mCounter = savedInstanceState.getInt(KEY_COUNTER);
-            mLogView.setText(savedInstanceState.getCharSequence(KEY_LOG));
-        }
-        mAuthenticateButton.setOnClickListener(v -> startAuthentication());
-
-        mCanAuthenticateButton.setOnClickListener(v -> {
-            BiometricManager biometricManager = BiometricManager.from(getApplicationContext());
-            String message;
-            switch (biometricManager.canAuthenticate(Authenticators.BIOMETRIC_WEAK)) {
-                case BiometricManager.BIOMETRIC_SUCCESS:
-                    message = BIOMETRIC_SUCCESS_MESSAGE;
-                    break;
-                case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
-                    message = BIOMETRIC_ERROR_HW_UNAVAILABLE_MESSAGE;
-                    break;
-                case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
-                    message = BIOMETRIC_ERROR_NONE_ENROLLED_MESSAGE;
-                    break;
-                case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
-                    message = BIOMETRIC_ERROR_NO_HARDWARE;
-                    break;
-                default:
-                    message = BIOMETRIC_ERROR_UNKNOWN;
-            }
-            log("canAuthenticate: " + message);
-        });
-    }
-
-    void onPause() {
-        if (getMode() == MODE_CANCEL_ON_CONFIGURATION_CHANGE) {
-            mBiometricPrompt.cancelAuthentication();
-        }
-    }
-
-    void onSaveInstanceState(@NonNull Bundle outState) {
-        outState.putInt(KEY_COUNTER, mCounter);
-        outState.putCharSequence(KEY_LOG, mLogView.getText());
-    }
-
-    private void startAuthentication() {
-        if (getMode() == MODE_NONE) {
-            log("Select a test first");
-            return;
-        }
-
-        // Build the biometric prompt info
-        BiometricPrompt.PromptInfo.Builder builder = new BiometricPrompt.PromptInfo.Builder()
-                .setTitle("Title " + mCounter)
-                .setSubtitle("Subtitle " + mCounter)
-                .setDescription(
-                        "Lorem ipsum dolor sit amet, consecte etur adipisicing elit. "
-                                + mCounter)
-                .setConfirmationRequired(mRequireConfirmationCheckbox.isChecked());
-
-        if (mAllowDeviceCredentialCheckbox.isChecked()) {
-            builder.setDeviceCredentialAllowed(true);
-        } else {
-            builder.setNegativeButtonText("Negative Button " + mCounter);
-        }
-        BiometricPrompt.PromptInfo info = builder.build();
-        mCounter++;
-
-        // Show the biometric prompt.
-        mBiometricPrompt.authenticate(info);
-    }
-
-    /**
-     * @return The currently selected configuration.
-     */
-    private int getMode() {
-        int id = mBiometricPromptConfigurationRadioGroup.getCheckedRadioButtonId();
-        switch (id) {
-            case R.id.radio_persist_across_configuration_changes:
-                return MODE_PERSIST_ACROSS_CONFIGURATION_CHANGES;
-            case R.id.radio_cancel_on_configuration_change:
-                return MODE_CANCEL_ON_CONFIGURATION_CHANGE;
-            case R.id.radio_cancel_after_three_failures:
-                return MODE_CANCEL_AFTER_THREE_FAILURES;
-            default:
-                return MODE_NONE;
-        }
-    }
-
-    private void log(String s) {
-        Log.d(TAG, s);
-        mLogView.append(s + '\n');
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoCredentialBoundKeyActivity.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoCredentialBoundKeyActivity.java
deleted file mode 100644
index b475450..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoCredentialBoundKeyActivity.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.Log;
-import android.view.View;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RequiresApi;
-import androidx.biometric.BiometricPrompt;
-import androidx.fragment.app.FragmentActivity;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.util.Arrays;
-import java.util.concurrent.Executor;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-
-/**
- * Demo activity that shows how BiometricPrompt can be used with credential bound secret keys.
- */
-@RequiresApi(api = Build.VERSION_CODES.M)
-public class BiometricPromptDemoCredentialBoundKeyActivity extends FragmentActivity {
-
-    private static final String TAG = "bio_prompt_demo_control";
-    private static final String LOG_BUNDLE = "log";
-    private static final String KEY_NAME = "demo_key";
-    private static final String PAYLOAD = "hello";
-
-    // Specifies the duration for which the key can be used after the last user authentication.
-    // Only affects the keys generated with setUserAuthenticationValidityDurationSeconds(int).
-    private static final int VALIDITY_DURATION = 5;
-
-    private final Handler mHandler = new Handler(Looper.getMainLooper());
-    private final Executor mExecutor = mHandler::post;
-    private BiometricPrompt mBiometricPrompt;
-    private TextView mLogTextView;
-
-    private void log(String s) {
-        Log.d(TAG, s);
-        mLogTextView.append(s + '\n');
-    }
-
-    private void log(String s, Throwable tr) {
-        Log.e(TAG, "", tr);
-        mLogTextView.append(s + '\n' + tr.toString() + '\n');
-    }
-
-    private final BiometricPrompt.PromptInfo mPromptInfo = new BiometricPrompt.PromptInfo.Builder()
-            .setTitle("Title")
-            .setSubtitle("Subtitle")
-            .setDescription("Description")
-            .setDeviceCredentialAllowed(true)
-            .build();
-
-    private final BiometricPrompt.AuthenticationCallback mAuthenticationCallback =
-            new BiometricPrompt.AuthenticationCallback() {
-
-                @Override
-                public void onAuthenticationError(int err, @NonNull CharSequence message) {
-                    log("onAuthenticationError " + err + ": " + message);
-                }
-
-                @Override
-                public void onAuthenticationSucceeded(
-                        @NonNull BiometricPrompt.AuthenticationResult result) {
-                    log("onAuthenticationSucceeded");
-                }
-
-                @Override
-                public void onAuthenticationFailed() {
-                    log("onAuthenticationFailed");
-                    mBiometricPrompt.cancelAuthentication();
-                }
-            };
-
-    private View.OnClickListener mGenerateKeyListener = view -> {
-        try {
-            BiometricPromptDemoSecretKeyHelper.generateCredentialBoundKey(KEY_NAME,
-                    VALIDITY_DURATION);
-            log("Generated a key with a " + VALIDITY_DURATION + " second authentication validity");
-        } catch (InvalidAlgorithmParameterException | NoSuchAlgorithmException
-                | NoSuchProviderException e) {
-            log("Failed to generate key", e);
-        }
-    };
-
-    private View.OnClickListener mUnlockKeyListener = view -> {
-        mBiometricPrompt.authenticate(mPromptInfo);
-        log("Started authentication");
-    };
-
-    private View.OnClickListener mUseKeyListener = view -> {
-        Cipher cipher = null;
-        try {
-            cipher = BiometricPromptDemoSecretKeyHelper.getCipher();
-        } catch (NoSuchPaddingException | NoSuchAlgorithmException e) {
-            log("Failed to get cipher", e);
-        }
-
-        SecretKey secretKey = null;
-        try {
-            secretKey = BiometricPromptDemoSecretKeyHelper.getSecretKey(KEY_NAME);
-        } catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException
-                | UnrecoverableKeyException e) {
-            log("Failed to get secret key", e);
-        }
-
-        if (cipher != null && secretKey != null) {
-            try {
-                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
-                byte[] encrypted = cipher.doFinal(PAYLOAD.getBytes(Charset.defaultCharset()));
-                log("Test payload: " + PAYLOAD);
-                log("Encrypted payload: " + Arrays.toString(encrypted));
-            } catch (InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
-                log("Failed to encrypt", e);
-            }
-        }
-    };
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.biometric_prompt_demo_credential_bound_key);
-
-        mLogTextView = findViewById(R.id.text_view_log);
-        mBiometricPrompt = new BiometricPrompt(this, mExecutor, mAuthenticationCallback);
-
-        ((TextView) findViewById(R.id.text_view_activity_description)).setText(
-                R.string.label_credential_bound_key_activity_description);
-
-        if (savedInstanceState != null) {
-            mLogTextView.setText(savedInstanceState.getCharSequence(LOG_BUNDLE));
-        }
-
-        findViewById(R.id.button_generate_key).setOnClickListener(mGenerateKeyListener);
-        findViewById(R.id.button_unlock_key).setOnClickListener(mUnlockKeyListener);
-        findViewById(R.id.button_use_key).setOnClickListener(mUseKeyListener);
-        findViewById(R.id.button_clear_log).setOnClickListener(v -> mLogTextView.setText(""));
-    }
-
-    @Override
-    protected void onPause() {
-        mBiometricPrompt.cancelAuthentication();
-        super.onPause();
-    }
-
-    @Override
-    protected void onSaveInstanceState(@NonNull Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putCharSequence(LOG_BUNDLE, mLogTextView.getText());
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentController.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentController.java
deleted file mode 100644
index 497aa6b..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentController.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.content.Context;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.biometric.BiometricPrompt;
-import androidx.fragment.app.Fragment;
-
-/**
- * Implementation of {@link com.example.android.biometric.BiometricPromptDemoController} that
- * handles launching the biometric prompt from within a fragment host.
- */
-class BiometricPromptDemoFragmentController extends BiometricPromptDemoController {
-
-    private final Context mContext;
-    private final Fragment mFragment;
-
-    BiometricPromptDemoFragmentController(
-            @NonNull Context context,
-            @NonNull Fragment fragment,
-            @NonNull View inflatedRootView) {
-        super(inflatedRootView);
-        mContext = context;
-        mFragment = fragment;
-    }
-
-    @Override
-    Context getApplicationContext() {
-        return mContext.getApplicationContext();
-    }
-
-    @Override
-    void reconnect() {
-        mBiometricPrompt = new BiometricPrompt(mFragment, mAuthenticationCallback);
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentHost.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentHost.java
deleted file mode 100644
index a764e98..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentHost.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.DialogFragment;
-
-/**
- * Hosting fragment for the BiometricPrompt demo. Shows how a biometric prompt can be launched
- * from an activity-hosted fragment by hooking into appropriate lifecycle methods for the fragment.
- */
-public class BiometricPromptDemoFragmentHost extends DialogFragment {
-
-    private Context mContext;
-    private BiometricPromptDemoController mController;
-
-    @Override
-    public void onAttach(@NonNull Context context) {
-        super.onAttach(context);
-        mContext = context;
-    }
-
-    @Nullable
-    @Override
-    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
-            @Nullable Bundle savedInstanceState) {
-
-        View view = inflater.inflate(R.layout.biometric_prompt_demo_content, container, false);
-        final TextView hostTypeTextView = view.findViewById(R.id.host_type_text_view);
-        hostTypeTextView.setText(R.string.label_host_type_fragment);
-
-        mController = new BiometricPromptDemoFragmentController(mContext, this, view);
-        mController.init(savedInstanceState);
-        mController.reconnect();
-        return view;
-    }
-
-    @Override
-    public void onPause() {
-        mController.onPause();
-        super.onPause();
-    }
-
-    @Override
-    public void onSaveInstanceState(@NonNull Bundle outState) {
-        super.onSaveInstanceState(outState);
-        mController.onSaveInstanceState(outState);
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentHostActivity.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentHostActivity.java
deleted file mode 100644
index 3f58aea..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoFragmentHostActivity.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.os.Bundle;
-
-import androidx.annotation.Nullable;
-import androidx.fragment.app.FragmentActivity;
-
-/** Simple wrapper activity that holds the fragment host for the biometric prompt demo. */
-public class BiometricPromptDemoFragmentHostActivity extends FragmentActivity {
-
-    @Override
-    protected void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.biometric_prompt_demo_fragment_host_activity);
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoSecretKeyHelper.java b/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoSecretKeyHelper.java
deleted file mode 100644
index 8986f6d..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/BiometricPromptDemoSecretKeyHelper.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.biometric;
-
-import android.os.Build;
-import android.security.keystore.KeyGenParameterSpec;
-import android.security.keystore.KeyProperties;
-
-import androidx.annotation.RequiresApi;
-
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyGenerator;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-
-/**
- * Helper class that provides methods for generating and accessing secret keys, and showcases
- * the differences between the keys that require biometrics and the keys bound to user credentials.
- */
-@RequiresApi(api = Build.VERSION_CODES.M)
-final class BiometricPromptDemoSecretKeyHelper {
-    private BiometricPromptDemoSecretKeyHelper() { }
-
-    /**
-     * Generates a key that requires the user to authenticate with a biometric before each use.
-     */
-    static void generateBiometricBoundKey(String keyName,
-            boolean invalidatedByBiometricEnrollment)
-            throws InvalidAlgorithmParameterException, NoSuchAlgorithmException,
-            NoSuchProviderException {
-        generateKey(keyName, true, invalidatedByBiometricEnrollment, -1);
-    }
-
-    /**
-     * Generates a key that can only be used if the user is authenticated via secure lock screen or
-     * {@link androidx.biometric.BiometricPrompt.PromptInfo.Builder#setDeviceCredentialAllowed(
-     *boolean)}
-     */
-    static void generateCredentialBoundKey(String keyName, int validityDuration)
-            throws InvalidAlgorithmParameterException, NoSuchAlgorithmException,
-            NoSuchProviderException {
-        generateKey(keyName, false, false, validityDuration);
-    }
-
-    private static void generateKey(String keyName, boolean biometricBound,
-            boolean invalidatedByBiometricEnrollment, int validityDuration)
-            throws NoSuchProviderException, NoSuchAlgorithmException,
-            InvalidAlgorithmParameterException {
-        KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(
-                keyName,
-                KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
-                .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
-                .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
-                .setUserAuthenticationRequired(true);
-
-        if (biometricBound) {
-            // Require the user to authenticate for every use of the key. This is the default, i.e.
-            // userAuthenticationValidityDurationSeconds is -1 unless specified otherwise.
-            // Explicitly setting it to -1 here for the sake of example.
-            // For this to work, at least one biometric must be enrolled.
-            builder.setUserAuthenticationValidityDurationSeconds(-1);
-
-            // This is a workaround to avoid crashes on devices whose API level is < 24
-            // because KeyGenParameterSpec.Builder#setInvalidatedByBiometricEnrollment is only
-            // visible on API level 24+.
-            // Ideally there should be a compat library for KeyGenParameterSpec.Builder but
-            // it isn't available yet.
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
-                // Invalidate the keys if a new biometric has been enrolled.
-                builder.setInvalidatedByBiometricEnrollment(invalidatedByBiometricEnrollment);
-            }
-        } else {
-            // Sets the duration for which the key can be used after the last user authentication.
-            // For this to work, authentication must happen either via secure lock screen or the
-            // ConfirmDeviceCredential flow, which can be done by creating BiometricPrompt with
-            // BiometricPrompt.PromptInfo.Builder#setDeviceCredentialAllowed(true)
-            builder.setUserAuthenticationValidityDurationSeconds(validityDuration);
-        }
-
-        KeyGenerator keyGenerator = KeyGenerator
-                .getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
-        keyGenerator.init(builder.build());
-
-        // Generates and stores the key in Android KeyStore under the keystoreAlias (keyName)
-        // specified in the builder.
-        keyGenerator.generateKey();
-    }
-
-    static SecretKey getSecretKey(String keyName)
-            throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException,
-            UnrecoverableKeyException {
-        KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
-
-        // Before the keystore can be accessed, it must be loaded.
-        keyStore.load(null);
-        return (SecretKey) keyStore.getKey(keyName, null);
-    }
-
-    static Cipher getCipher() throws NoSuchPaddingException, NoSuchAlgorithmException {
-        return Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"
-                + KeyProperties.BLOCK_MODE_CBC + "/"
-                + KeyProperties.ENCRYPTION_PADDING_PKCS7);
-    }
-}
diff --git a/samples/BiometricDemos/src/main/java/com/example/android/biometric/_package.html b/samples/BiometricDemos/src/main/java/com/example/android/biometric/_package.html
deleted file mode 100644
index 3691507..0000000
--- a/samples/BiometricDemos/src/main/java/com/example/android/biometric/_package.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
-<head>
-<link rel="stylesheet" type="text/css" href="assets/style.css" />
-<script type="text/javascript" src="http://www.corp.google.com/style/prettify.js"></script>
-<script src="http://www.corp.google.com/eng/techpubs/include/navbar.js" type="text/javascript"></script>
-
-
-
-</head>
-
-<body>
-
-<p>
-Examples of how to use support library biometric APIs.  See:
-
-<ol>
-    <li> <a href="com.example.android.biometric.app">sdk.app</a> for examples
-        of using the application package support APIs.
-</ol>
-</p>
-
-
-</body>
-</html>
diff --git a/samples/BiometricDemos/src/main/res/drawable-hdpi/app_sample_code.png b/samples/BiometricDemos/src/main/res/drawable-hdpi/app_sample_code.png
deleted file mode 100755
index 66a1984..0000000
--- a/samples/BiometricDemos/src/main/res/drawable-hdpi/app_sample_code.png
+++ /dev/null
Binary files differ
diff --git a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo.xml b/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo.xml
deleted file mode 100644
index c69b2c7..0000000
--- a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2019 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="@string/label_choose_mode" />
-
-    <Button
-        android:id="@+id/host_in_activity_button"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_host_in_activity"
-        android:textSize="12sp" />
-
-    <Button
-        android:id="@+id/host_in_fragment_button"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_host_in_fragment"
-        android:textSize="12sp" />
-
-    <Button
-        android:id="@+id/button_biometric_bound_key_demo"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_biometric_bound_demo"
-        android:textSize="12sp" />
-
-    <Button
-        android:id="@+id/button_credential_bound_key_demo"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_credential_bound_demo"
-        android:textSize="12sp" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_biometric_bound_key.xml b/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_biometric_bound_key.xml
deleted file mode 100644
index bc6e09a..0000000
--- a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_biometric_bound_key.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2019 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <TextView
-        android:id="@+id/text_view_activity_description"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
-
-    <Button
-        android:id="@+id/button_generate_key"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_generate_key" />
-
-    <Button
-        android:id="@+id/button_unlock_and_use_key"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_unlock_and_use_key" />
-
-    <Button
-        android:id="@+id/button_decrypt"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_decrypt" />
-
-    <Button
-        android:id="@+id/button_clear_log"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_clear_log" />
-
-    <ScrollView
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <TextView
-            android:id="@+id/text_view_log"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content" />
-
-    </ScrollView>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_content.xml b/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_content.xml
deleted file mode 100644
index 1b3138b..0000000
--- a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_content.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright 2018 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <TextView
-        android:id="@+id/host_type_text_view"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content" />
-
-    <ScrollView
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical">
-
-            <Button
-                android:id="@+id/can_authenticate"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/button_can_authenticate" />
-
-            <Button
-                android:id="@+id/button_authenticate"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/button_authenticate" />
-
-            <CheckBox
-                android:id="@+id/checkbox_require_confirmation"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:checked="true"
-                android:text="@string/checkbox_text_require_confirmation" />
-
-            <CheckBox
-                android:id="@+id/checkbox_allow_device_credential"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:text="@string/checkbox_text_allow_device_credential" />
-
-            <RadioGroup
-                android:id="@+id/radio_group_biometric_prompt_configuration"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content">
-
-                <RadioButton
-                    android:id="@+id/radio_persist_across_configuration_changes"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:checked="true"
-                    android:text="@string/radio_text_persist_across_configuration_changes" />
-
-                <RadioButton
-                    android:id="@+id/radio_cancel_on_configuration_change"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="@string/radio_text_cancel_on_configuration_change" />
-
-                <RadioButton
-                    android:id="@+id/radio_cancel_after_three_failures"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="@string/radio_text_cancel_after_three_failures" />
-            </RadioGroup>
-
-            <Button
-                android:id="@+id/button_clear_log"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/button_clear_log" />
-
-            <TextView
-                android:id="@+id/log_text"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent" />
-
-        </LinearLayout>
-
-    </ScrollView>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_credential_bound_key.xml b/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_credential_bound_key.xml
deleted file mode 100644
index 1e57933..0000000
--- a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_credential_bound_key.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2019 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <TextView
-        android:id="@+id/text_view_activity_description"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"/>
-
-    <Button
-        android:id="@+id/button_generate_key"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_generate_key" />
-
-    <Button
-        android:id="@+id/button_unlock_key"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_unlock_key" />
-
-    <Button
-        android:id="@+id/button_use_key"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_use_key" />
-
-    <Button
-        android:id="@+id/button_clear_log"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:text="@string/button_clear_log" />
-
-    <ScrollView
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <TextView
-            android:id="@+id/text_view_log"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content" />
-
-    </ScrollView>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_fragment_host_activity.xml b/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_fragment_host_activity.xml
deleted file mode 100644
index 6559eaa..0000000
--- a/samples/BiometricDemos/src/main/res/layout/biometric_prompt_demo_fragment_host_activity.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2019 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical">
-
-    <fragment
-        android:id="@+id/biometric_prompt_demo_fragment_host_container"
-        android:name="com.example.android.biometric.BiometricPromptDemoFragmentHost"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/samples/BiometricDemos/src/main/res/values-v27/styles.xml b/samples/BiometricDemos/src/main/res/values-v27/styles.xml
deleted file mode 100644
index ab7d5cb..0000000
--- a/samples/BiometricDemos/src/main/res/values-v27/styles.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2019 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-    <style name="AppTheme" parent="Theme.AppCompat.DayNight">
-        <item name="android:navigationBarColor">@android:color/transparent</item>
-        <item name="android:windowLightNavigationBar">true</item>
-    </style>
-</resources>
diff --git a/samples/BiometricDemos/src/main/res/values/strings.xml b/samples/BiometricDemos/src/main/res/values/strings.xml
deleted file mode 100644
index 7bc87c1..0000000
--- a/samples/BiometricDemos/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright 2018 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<resources>
-
-    <!-- BiometricPromptDemo -->
-    <string name="activity_sample_code">Biometric Demo</string>
-    <string name="label_choose_mode">Choose a mode for the biometric prompt:</string>
-    <string name="button_host_in_activity">Biometric prompt in a FragmentActivity</string>
-    <string name="button_host_in_fragment">Biometric prompt in a Fragment</string>
-    <string name="button_biometric_bound_demo">Biometric prompt with biometric bound secret keys</string>
-    <string name="button_credential_bound_demo">Biometric prompt with credential bound secret
-        keys</string>
-    <string name="button_decrypt">Decrypt</string>
-
-    <!-- BiometricPromptDemoActivityHost -->
-    <string name="label_host_type_activity">Currently hosted in a FragmentActivity</string>
-
-    <!-- BiometricPromptDemoFragmentHost -->
-    <string name="label_host_type_fragment">Currently hosted in a Fragment</string>
-
-    <!-- BiometricPromptDemoController -->
-    <string name="button_can_authenticate">Can authenticate</string>
-    <string name="button_authenticate">Authenticate</string>
-
-    <string name="checkbox_text_require_confirmation">Require confirmation</string>
-    <string name="checkbox_text_allow_device_credential">Allow device credential</string>
-
-    <string name="radio_text_persist_across_configuration_changes">Persist across configuration changes</string>
-    <string name="radio_text_cancel_on_configuration_change">Cancel when configuration changes</string>
-    <string name="radio_text_cancel_after_three_failures">Cancel after three failures</string>
-
-    <!-- Shared between multiple activities -->
-    <string name="button_generate_key">Generate key</string>
-    <string name="button_clear_log">Clear logs</string>
-
-    <!-- BiometricPromptDemoBiometricBoundKeyActivity -->
-    <string name="label_biometric_bound_key_activity_description">This activity shows how to handle
-        secret keys that require biometric authentication before each use.</string>
-    <string name="button_unlock_and_use_key">Unlock and use the key to encrypt test payload</string>
-
-    <!-- BiometricPromptDemoCredentialBoundKeyActivity -->
-    <string name="label_credential_bound_key_activity_description">This activity shows how to handle
-        secret keys that can only be used if the user is authenticated via secure lock screen or
-        PromptInfo.Builder#setDeviceCredentialAllowed(true). These keys might also have a
-        custom authentication validity duration, allowing the key to be used for some period of
-        time after the last authentication.</string>
-    <string name="button_unlock_key">Authenticate to unlock the key</string>
-    <string name="button_use_key">Use the key to encrypt test payload</string>
-
-</resources>
diff --git a/samples/BiometricDemos/src/main/res/values/styles.xml b/samples/BiometricDemos/src/main/res/values/styles.xml
deleted file mode 100644
index d5616af..0000000
--- a/samples/BiometricDemos/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright 2018 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<resources>
-    <style name="AppTheme" parent="Theme.AppCompat.DayNight" />
-</resources>
diff --git a/samples/Support7Demos/src/main/AndroidManifest.xml b/samples/Support7Demos/src/main/AndroidManifest.xml
index cad3c93..13a7051 100644
--- a/samples/Support7Demos/src/main/AndroidManifest.xml
+++ b/samples/Support7Demos/src/main/AndroidManifest.xml
@@ -91,6 +91,26 @@
             </intent-filter>
         </activity>
 
+        <activity android:name=".media.SampleMediaRouterActivity$DynamicGroupActivity"
+            android:configChanges="orientation|screenSize"
+            android:label="@string/sample_media_router_activity_dynamic_group"
+            android:theme="@style/Theme.SampleMediaRouter">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.example.android.supportv7.SAMPLE_CODE" />
+            </intent-filter>
+        </activity>
+
+        <activity android:name=".media.SampleMediaRouterActivity$OutputSwitcherActivity"
+            android:configChanges="orientation|screenSize"
+            android:label="@string/sample_media_router_activity_output_switcher"
+            android:theme="@style/Theme.SampleMediaRouter">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.example.android.supportv7.SAMPLE_CODE" />
+            </intent-filter>
+        </activity>
+
         <activity android:name=".media.SampleMediaRouteSettingsActivity"
                 android:label="@string/sample_media_route_settings_activity"
                 android:theme="@style/Theme.AppCompat.Light">
diff --git a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
index 919fea5..2e3a266 100644
--- a/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
+++ b/samples/Support7Demos/src/main/java/com/example/android/supportv7/media/SampleMediaRouterActivity.java
@@ -221,12 +221,7 @@
         // Get the media router service.
         mMediaRouter = MediaRouter.getInstance(this);
 
-        MediaRouterParams params = new MediaRouterParams.Builder()
-                .setDialogType(MediaRouterParams.DIALOG_TYPE_DEFAULT)
-                .setOutputSwitcherEnabled(true) // Output switcher will be shown from Android R+.
-                .setTransferToLocalEnabled(true) // Phone speaker will be shown when casting.
-                .build();
-        mMediaRouter.setRouterParams(params);
+        mMediaRouter.setRouterParams(getRouterParams());
 
         // Create a route selector for the type of routes that we care about.
         mSelector = new MediaRouteSelector.Builder()
@@ -623,6 +618,13 @@
         return null;
     }
 
+    public MediaRouterParams getRouterParams() {
+        return new MediaRouterParams.Builder()
+                .setDialogType(MediaRouterParams.DIALOG_TYPE_DEFAULT)
+                .setTransferToLocalEnabled(true) // Phone speaker will be shown when casting.
+                .build();
+    }
+
     /**
      * Media route discovery fragment.
      */
@@ -751,6 +753,30 @@
     public static class LightWithDarkActionBar extends SampleMediaRouterActivity {
     }
 
+    /**
+     * This will show dynamic group dialog when ther user clicks the media route button.
+     */
+    public static class DynamicGroupActivity extends SampleMediaRouterActivity {
+        @Override
+        public MediaRouterParams getRouterParams() {
+            return new MediaRouterParams.Builder(super.getRouterParams())
+                    .setDialogType(MediaRouterParams.DIALOG_TYPE_DYNAMIC_GROUP)
+                    .build();
+        }
+    }
+
+    /**
+     * This pops up the output switcher if run on Android R+
+     */
+    public static class OutputSwitcherActivity extends SampleMediaRouterActivity {
+        @Override
+        public MediaRouterParams getRouterParams() {
+            return new MediaRouterParams.Builder(super.getRouterParams())
+                    .setOutputSwitcherEnabled(true)
+                    .build();
+        }
+    }
+
     public static class ControllerDialogFragment extends MediaRouteControllerDialogFragment {
         private MediaRouteControllerDialog mControllerDialog;
         private CheckBox mUseDefaultControlCheckBox;
diff --git a/samples/Support7Demos/src/main/res/values/strings.xml b/samples/Support7Demos/src/main/res/values/strings.xml
index 8909901..e467c89 100644
--- a/samples/Support7Demos/src/main/res/values/strings.xml
+++ b/samples/Support7Demos/src/main/res/values/strings.xml
@@ -22,6 +22,10 @@
     <string name="sample_media_router_activity_dark">MediaRouter/Dark Theme</string>
     <string name="sample_media_router_activity_light">MediaRouter/Light Theme</string>
     <string name="sample_media_router_activity_light_with_dark_action_bar">MediaRouter/Light Theme, Dark Action Bar</string>
+    <string name="sample_media_router_activity_dynamic_group">MediaRouter/Dynamic Group
+        Dialog</string>
+    <string name="sample_media_router_activity_output_switcher">MediaRouter/Output Switcher
+    Dialog</string>
     <string name="sample_media_router_text">This activity demonstrates how to
             use MediaRouter from the support library.  Select a route from the action bar.</string>
     <string name="media_route_menu_title">Play on...</string>
diff --git a/settings.gradle b/settings.gradle
index 6434bb1..4ee1b43 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -366,7 +366,6 @@
 // Note: don't add new samples/ apps. Instead, Create
 // <module>/integration-tests/testapp in the "Libraries" section above.
 includeProject(":support-animation-demos", new File(samplesRoot, "SupportAnimationDemos"))
-includeProject(":support-biometric-demos", new File(samplesRoot, "BiometricDemos"))
 includeProject(":support-content-demos", new File(samplesRoot, "SupportContentDemos"))
 includeProject(":support-emoji-demos", new File(samplesRoot, "SupportEmojiDemos"))
 includeProject(":support-leanback-demos", new File(samplesRoot, "SupportLeanbackDemos"))
diff --git a/slices/view/api/restricted_1.1.0-alpha02.txt b/slices/view/api/restricted_1.1.0-alpha02.txt
index ac30808..3fe4b0d 100644
--- a/slices/view/api/restricted_1.1.0-alpha02.txt
+++ b/slices/view/api/restricted_1.1.0-alpha02.txt
@@ -112,7 +112,7 @@
     field public int state;
   }
 
-  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class GridContent extends androidx.slice.widget.SliceContent {
+  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class GridContent {
     ctor public GridContent(androidx.slice.SliceItem!, int);
     method public int getAccentColor();
     method public CharSequence? getContentDescription();
@@ -148,7 +148,7 @@
     method public boolean populate(androidx.slice.SliceItem!);
   }
 
-  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ListContent extends androidx.slice.widget.SliceContent {
+  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ListContent {
     ctor public ListContent(androidx.slice.Slice);
     ctor @Deprecated public ListContent(android.content.Context!, androidx.slice.Slice);
     method public int getAccentColor();
@@ -172,7 +172,7 @@
     method public void showTitleItems(boolean);
   }
 
-  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RowContent extends androidx.slice.widget.SliceContent {
+  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RowContent {
     ctor public RowContent(androidx.slice.SliceItem!, int);
     method public int getAccentColor();
     method public CharSequence? getContentDescription();
diff --git a/slices/view/api/restricted_current.txt b/slices/view/api/restricted_current.txt
index ac30808..3fe4b0d 100644
--- a/slices/view/api/restricted_current.txt
+++ b/slices/view/api/restricted_current.txt
@@ -112,7 +112,7 @@
     field public int state;
   }
 
-  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class GridContent extends androidx.slice.widget.SliceContent {
+  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class GridContent {
     ctor public GridContent(androidx.slice.SliceItem!, int);
     method public int getAccentColor();
     method public CharSequence? getContentDescription();
@@ -148,7 +148,7 @@
     method public boolean populate(androidx.slice.SliceItem!);
   }
 
-  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ListContent extends androidx.slice.widget.SliceContent {
+  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class ListContent {
     ctor public ListContent(androidx.slice.Slice);
     ctor @Deprecated public ListContent(android.content.Context!, androidx.slice.Slice);
     method public int getAccentColor();
@@ -172,7 +172,7 @@
     method public void showTitleItems(boolean);
   }
 
-  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RowContent extends androidx.slice.widget.SliceContent {
+  @RequiresApi(19) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class RowContent {
     ctor public RowContent(androidx.slice.SliceItem!, int);
     method public int getAccentColor();
     method public CharSequence? getContentDescription();
diff --git a/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt b/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt
index 0747b53..2e09571 100644
--- a/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt
+++ b/tv-provider/tv-provider/api/restricted_1.1.0-alpha01.txt
@@ -197,7 +197,6 @@
     method public android.net.Uri! getLogoUri();
     method public String! getLongDescription();
     method public String! getOfferPrice();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getPackageName();
     method public int getPosterArtAspectRatio();
     method public android.net.Uri! getPosterArtUri();
     method public android.net.Uri! getPreviewAudioUri();
@@ -311,7 +310,6 @@
     method public Long! getInternalProviderFlag3();
     method public Long! getInternalProviderFlag4();
     method public String! getLongDescription();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getPackageName();
     method public android.net.Uri! getPosterArtUri();
     method public String! getReviewRating();
     method public int getReviewRatingStyle();
@@ -802,7 +800,6 @@
     method public android.net.Uri! getLogoUri();
     method public String! getLongDescription();
     method public String! getOfferPrice();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getPackageName();
     method public int getPosterArtAspectRatio();
     method public android.net.Uri! getPosterArtUri();
     method public android.net.Uri! getPreviewAudioUri();
diff --git a/tv-provider/tv-provider/api/restricted_current.txt b/tv-provider/tv-provider/api/restricted_current.txt
index 0747b53..2e09571 100644
--- a/tv-provider/tv-provider/api/restricted_current.txt
+++ b/tv-provider/tv-provider/api/restricted_current.txt
@@ -197,7 +197,6 @@
     method public android.net.Uri! getLogoUri();
     method public String! getLongDescription();
     method public String! getOfferPrice();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getPackageName();
     method public int getPosterArtAspectRatio();
     method public android.net.Uri! getPosterArtUri();
     method public android.net.Uri! getPreviewAudioUri();
@@ -311,7 +310,6 @@
     method public Long! getInternalProviderFlag3();
     method public Long! getInternalProviderFlag4();
     method public String! getLongDescription();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getPackageName();
     method public android.net.Uri! getPosterArtUri();
     method public String! getReviewRating();
     method public int getReviewRatingStyle();
@@ -802,7 +800,6 @@
     method public android.net.Uri! getLogoUri();
     method public String! getLongDescription();
     method public String! getOfferPrice();
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public String! getPackageName();
     method public int getPosterArtAspectRatio();
     method public android.net.Uri! getPosterArtUri();
     method public android.net.Uri! getPreviewAudioUri();
diff --git a/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BasePreviewProgram.java b/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BasePreviewProgram.java
index c5a2b61..97f5f71 100644
--- a/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BasePreviewProgram.java
+++ b/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BasePreviewProgram.java
@@ -16,7 +16,6 @@
 package androidx.tvprovider.media.tv;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
-import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
 import android.content.ContentValues;
 import android.content.Intent;
@@ -47,7 +46,7 @@
     /**
      * @hide
      */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public static final String[] PROJECTION = getProjection();
 
     private static final int INVALID_INT_VALUE = -1;
@@ -74,7 +73,7 @@
             PreviewProgramColumns.TYPE_GAME
     })
     @Retention(RetentionPolicy.SOURCE)
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public @interface Type {}
 
     /**
@@ -93,7 +92,7 @@
             PreviewProgramColumns.ASPECT_RATIO_MOVIE_POSTER
     })
     @Retention(RetentionPolicy.SOURCE)
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public @interface AspectRatio {}
 
     /**
@@ -111,7 +110,7 @@
             PreviewProgramColumns.AVAILABILITY_FREE
     })
     @Retention(RetentionPolicy.SOURCE)
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public @interface Availability {}
 
     /**
@@ -131,7 +130,7 @@
             PreviewProgramColumns.INTERACTION_TYPE_VIEWERS,
     })
     @Retention(RetentionPolicy.SOURCE)
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public @interface InteractionType {}
 
     /** @hide */
@@ -140,7 +139,7 @@
             PreviewProgramColumns.TV_SERIES_ITEM_TYPE_CHAPTER
     })
     @Retention(RetentionPolicy.SOURCE)
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public @interface TvSeriesItemType {}
 
     /**
@@ -423,7 +422,7 @@
      * @param includeProtectedFields Whether the fields protected by system is included or not.
      * @hide
      */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public ContentValues toContentValues(boolean includeProtectedFields) {
         ContentValues values = super.toContentValues();
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
@@ -977,7 +976,7 @@
          * @see androidx.tvprovider.media.tv.TvContractCompat.PreviewPrograms#COLUMN_BROWSABLE
          * @hide
          */
-        @RestrictTo(LIBRARY_GROUP_PREFIX)
+        @RestrictTo(LIBRARY)
         public T setBrowsable(boolean browsable) {
             mValues.put(PreviewPrograms.COLUMN_BROWSABLE, browsable ? IS_BROWSABLE : 0);
             return (T) this;
diff --git a/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java b/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
index 645ad7f..a16ca02 100644
--- a/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
+++ b/tv-provider/tv-provider/src/main/java/androidx/tvprovider/media/tv/BaseProgram.java
@@ -16,7 +16,6 @@
 package androidx.tvprovider.media.tv;
 
 import static androidx.annotation.RestrictTo.Scope.LIBRARY;
-import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
 
 import android.content.ContentValues;
 import android.database.Cursor;
@@ -47,7 +46,7 @@
     /**
      * @hide
      */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public static final String[] PROJECTION = getProjection();
 
     private static final long INVALID_LONG_VALUE = -1;
@@ -62,7 +61,7 @@
             ProgramColumns.REVIEW_RATING_STYLE_PERCENTAGE,
     })
     @Retention(RetentionPolicy.SOURCE)
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     @interface ReviewRatingStyle {}
 
     /**
@@ -71,7 +70,7 @@
     private static final int REVIEW_RATING_STYLE_UNKNOWN = -1;
 
     /** @hide */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     protected ContentValues mValues;
 
     /* package-private */
@@ -93,7 +92,7 @@
      * @see androidx.tvprovider.media.tv.TvContractCompat.BaseTvColumns#COLUMN_PACKAGE_NAME
      * @hide
      */
-    @RestrictTo(LIBRARY_GROUP_PREFIX)
+    @RestrictTo(LIBRARY)
     public String getPackageName() {
         return mValues.getAsString(BaseTvColumns.COLUMN_PACKAGE_NAME);
     }
@@ -542,7 +541,7 @@
      */
     public abstract static class Builder<T extends Builder> {
         /** @hide */
-        @RestrictTo(LIBRARY_GROUP_PREFIX)
+        @RestrictTo(LIBRARY)
         protected ContentValues mValues;
 
         /**
@@ -580,7 +579,7 @@
          * @see androidx.tvprovider.media.tv.TvContractCompat.BaseTvColumns#COLUMN_PACKAGE_NAME
          * @hide
          */
-        @RestrictTo(LIBRARY_GROUP_PREFIX)
+        @RestrictTo(LIBRARY)
         public T setPackageName(String packageName) {
             mValues.put(BaseTvColumns.COLUMN_PACKAGE_NAME, packageName);
             return (T) this;
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/FrameworkTextLayoutBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/FrameworkTextLayoutBenchmark.kt
similarity index 98%
rename from ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/FrameworkTextLayoutBenchmark.kt
rename to ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/FrameworkTextLayoutBenchmark.kt
index a6c73df..c47096e4 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/FrameworkTextLayoutBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/FrameworkTextLayoutBenchmark.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import android.content.Context
 import android.graphics.Color
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/ParagraphBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphBenchmark.kt
similarity index 98%
rename from ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/ParagraphBenchmark.kt
rename to ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphBenchmark.kt
index 9013115..2ff1be4 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/ParagraphBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphBenchmark.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import android.content.Context
 import android.util.TypedValue
@@ -31,7 +31,7 @@
 import androidx.ui.integration.test.TextBenchmarkTestRule
 import androidx.ui.integration.test.TextType
 import androidx.ui.integration.test.cartesian
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.font.Font
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/ParagraphMethodBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
similarity index 98%
rename from ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/ParagraphMethodBenchmark.kt
rename to ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
index 16c542d..507259a 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/ParagraphMethodBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.benchmark.junit4.measureRepeated
@@ -24,7 +24,7 @@
 import androidx.ui.integration.test.TextBenchmarkTestRule
 import androidx.ui.integration.test.TextType
 import androidx.ui.integration.test.cartesian
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.font.Font
 import androidx.ui.unit.Density
 import androidx.ui.unit.sp
 import org.junit.Rule
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/TextDelegateBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/TextDelegateBenchmark.kt
similarity index 98%
rename from ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/TextDelegateBenchmark.kt
rename to ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/TextDelegateBenchmark.kt
index 6fcff27..ed454ce 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/text/TextDelegateBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/TextDelegateBenchmark.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import android.content.Context
 import android.util.TypedValue
@@ -32,7 +32,7 @@
 import androidx.ui.integration.test.RandomTextGenerator
 import androidx.ui.integration.test.TextBenchmarkTestRule
 import androidx.ui.integration.test.cartesian
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.font.Font
 import androidx.ui.unit.Density
 import androidx.ui.unit.sp
 import org.junit.Before
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/input/EditProcessorBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/input/EditProcessorBenchmark.kt
similarity index 96%
rename from ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/input/EditProcessorBenchmark.kt
rename to ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/input/EditProcessorBenchmark.kt
index 3f9c70e..f30d311 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/input/EditProcessorBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/input/EditProcessorBenchmark.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.benchmark.junit4.measureRepeated
 import androidx.test.filters.LargeTest
 import androidx.ui.integration.test.RandomTextGenerator
 import androidx.ui.integration.test.cartesian
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.TextRange
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/input/GapBufferBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/input/GapBufferBenchmark.kt
similarity index 97%
rename from ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/input/GapBufferBenchmark.kt
rename to ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/input/GapBufferBenchmark.kt
index 757b3cd..4ad4255 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/input/GapBufferBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/input/GapBufferBenchmark.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.benchmark.junit4.measureRepeated
 import androidx.test.filters.LargeTest
 import androidx.ui.integration.test.RandomTextGenerator
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/intl/LocaleListBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/intl/LocaleListBenchmark.kt
similarity index 97%
rename from ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/intl/LocaleListBenchmark.kt
rename to ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/intl/LocaleListBenchmark.kt
index 666256b..124d23b 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/intl/LocaleListBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/intl/LocaleListBenchmark.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.benchmark.junit4.measureRepeated
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextToggleTextBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextToggleTextBenchmark.kt
new file mode 100644
index 0000000..63141f0
--- /dev/null
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextToggleTextBenchmark.kt
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2020 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 androidx.test.filters.SmallTest
+import androidx.ui.benchmark.ComposeBenchmarkRule
+import androidx.ui.benchmark.toggleStateBenchmarkDraw
+import androidx.ui.benchmark.toggleStateBenchmarkLayout
+import androidx.ui.benchmark.toggleStateBenchmarkMeasure
+import androidx.ui.benchmark.toggleStateBenchmarkRecompose
+import androidx.ui.integration.test.TextBenchmarkTestRule
+import androidx.ui.integration.test.core.text.TextToggleTextTestCase
+import androidx.ui.unit.dp
+import androidx.ui.unit.sp
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Parameterized
+
+@SmallTest
+@RunWith(Parameterized::class)
+class TextToggleTextBenchmark(
+    private val textLength: Int
+) {
+    companion object {
+        @JvmStatic
+        @Parameterized.Parameters(name = "length={0}")
+        fun initParameters(): Array<Any> = arrayOf(32, 512)
+    }
+
+    @get:Rule
+    val textBenchmarkRule = TextBenchmarkTestRule()
+
+    @get:Rule
+    val benchmarkRule = ComposeBenchmarkRule()
+
+    private val width = textBenchmarkRule.widthDp.dp
+    private val fontSize = textBenchmarkRule.fontSizeSp.sp
+
+    private val toggleTextCaseFactory = {
+        textBenchmarkRule.generator { generator ->
+            TextToggleTextTestCase(generator, textLength, width, fontSize)
+        }
+    }
+
+    /**
+     * Measure the time taken to recompose the [Text] composable when text gets toggled.
+     */
+    @Test
+    fun toggleText_recompose() {
+        benchmarkRule.toggleStateBenchmarkRecompose(toggleTextCaseFactory)
+    }
+
+    /**
+     * Measure the time taken to measure the [Text] composable when text gets toggled.
+     */
+    @Test
+    fun toggleText_measure() {
+        benchmarkRule.toggleStateBenchmarkMeasure(toggleTextCaseFactory)
+    }
+
+    /**
+     * Measure the time taken to layout the [Text] composable when text gets toggled.
+     */
+    @Test
+    fun toggleText_layout() {
+        benchmarkRule.toggleStateBenchmarkLayout(toggleTextCaseFactory)
+    }
+
+    /**
+     * Measure the time taken to draw the [Text] composable when text gets toggled.
+     */
+    @Test
+    fun toggleText_draw() {
+        benchmarkRule.toggleStateBenchmarkDraw(toggleTextCaseFactory)
+    }
+}
\ No newline at end of file
diff --git a/ui/integration-tests/demos/src/androidTest/java/androidx/ui/demos/test/DemoTest.kt b/ui/integration-tests/demos/src/androidTest/java/androidx/ui/demos/test/DemoTest.kt
index def3e38..08338bc 100644
--- a/ui/integration-tests/demos/src/androidTest/java/androidx/ui/demos/test/DemoTest.kt
+++ b/ui/integration-tests/demos/src/androidTest/java/androidx/ui/demos/test/DemoTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.demos.common.allDemos
 import androidx.ui.demos.common.allLaunchableDemos
 import androidx.ui.test.SemanticsNodeInteractionCollection
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.assertTextEquals
 import androidx.ui.test.performClick
 import androidx.ui.test.performScrollTo
@@ -50,7 +50,7 @@
 @RunWith(JUnit4::class)
 class DemoTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<DemoActivity>(disableTransitions = true).also {
+    val composeTestRule = createAndroidComposeRule<DemoActivity>(disableTransitions = true).also {
         it.clockTestRule.pauseClock()
     }
 
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt
index c1113bc..cc5425e 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt
@@ -33,7 +33,7 @@
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
index 2331cd4..db237b8 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.ui.graphics.compositeOver
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.wrapContentSize
@@ -39,9 +39,9 @@
 import androidx.ui.material.TopAppBar
 import androidx.ui.material.icons.Icons
 import androidx.ui.material.icons.filled.Close
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.withStyle
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt
index 231ad05..1eb21df 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt
@@ -24,15 +24,15 @@
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
-import androidx.ui.text.AnnotatedString
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
 import kotlin.math.ceil
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt
index b633296..28ffbc7 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt
@@ -25,8 +25,8 @@
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.Dp
 import androidx.ui.unit.TextUnit
 
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextToggleTextTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextToggleTextTestCase.kt
new file mode 100644
index 0000000..1ffc221
--- /dev/null
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextToggleTextTestCase.kt
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2020 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.integration.test.core.text
+
+import androidx.compose.Composable
+import androidx.compose.foundation.Box
+import androidx.compose.foundation.Text
+import androidx.compose.foundation.layout.preferredWidth
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.mutableStateOf
+import androidx.ui.core.Alignment
+import androidx.ui.core.Modifier
+import androidx.ui.graphics.Color
+import androidx.ui.integration.test.RandomTextGenerator
+import androidx.ui.integration.test.ToggleableTestCase
+import androidx.ui.test.ComposeTestCase
+import androidx.ui.unit.Dp
+import androidx.ui.unit.TextUnit
+
+class TextToggleTextTestCase(
+    private val textGenerator: RandomTextGenerator,
+    private val textLength: Int,
+    private val width: Dp,
+    private val fontSize: TextUnit
+) : ComposeTestCase, ToggleableTestCase {
+
+    val text = mutableStateOf(textGenerator.nextParagraph(length = textLength))
+
+    @Composable
+    override fun emitContent() {
+        Box(
+            modifier = Modifier.wrapContentSize(Alignment.Center).preferredWidth(width)
+        ) {
+            Text(text = text.value, color = Color.Black, fontSize = fontSize)
+        }
+    }
+
+    override fun toggleState() {
+        text.value = textGenerator.nextParagraph(length = textLength)
+    }
+}
\ No newline at end of file
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt
index 19d7185..83efb00 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt
@@ -24,7 +24,7 @@
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.Surface
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.sp
 
 /**
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt
index 680ad70..e617771 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt
@@ -36,7 +36,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.dp
 import androidx.ui.unit.sp
 
diff --git a/ui/ui-core/api/0.1.0-dev16.txt b/ui/ui-core/api/0.1.0-dev16.txt
index 104d786..ee6afc2 100644
--- a/ui/ui-core/api/0.1.0-dev16.txt
+++ b/ui/ui-core/api/0.1.0-dev16.txt
@@ -1,4 +1,14 @@
 // Signature format: 3.0
+package androidx.compose.ui.text.input {
+
+  public final class InputStateKt {
+  }
+
+  public final class RecordingInputConnectionKt {
+  }
+
+}
+
 package androidx.ui.autofill {
 
   public final class AndroidAutofillDebugUtilsKt {
@@ -113,6 +123,19 @@
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
+  public abstract class AbstractComposeView extends android.view.ViewGroup {
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context);
+    method @androidx.compose.Composable public abstract void Content();
+    method public final void createComposition();
+    method public final void disposeComposition();
+    method public final boolean isDisposed();
+    method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+    method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+    property public final boolean isDisposed;
+  }
+
   @androidx.compose.Immutable public interface Alignment {
     method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
@@ -178,7 +201,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
@@ -235,6 +258,14 @@
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
   }
 
+  public final class ComposeView extends androidx.ui.core.AbstractComposeView {
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context);
+    method @androidx.compose.Composable public void Content();
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
     method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
@@ -344,13 +375,6 @@
     method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-xWKVMPI(androidx.ui.core.Modifier, float elevation, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
-  public enum DropDownAlignment {
-    method public static androidx.ui.core.DropDownAlignment valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.DropDownAlignment[] values();
-    enum_constant public static final androidx.ui.core.DropDownAlignment End;
-    enum_constant public static final androidx.ui.core.DropDownAlignment Start;
-  }
-
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
   }
 
@@ -369,6 +393,15 @@
     ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
+  public interface InspectableParameter {
+    method public kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> getInspectableElements();
+    method public default String? getNameFallback();
+    method public default Object? getValueOverride();
+    property public abstract kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> inspectableElements;
+    property public default String? nameFallback;
+    property public default Object? valueOverride;
+  }
+
   @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) public @interface InternalCoreApi {
   }
 
@@ -656,14 +689,14 @@
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
     method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.text.font.Font.ResourceLoader getFontLoader();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
     method public androidx.ui.core.LayoutNode getRoot();
     method public androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? getSavedStateRegistry();
     method public androidx.ui.core.semantics.SemanticsOwner getSemanticsOwner();
     method public boolean getShowLayoutBounds();
-    method public androidx.ui.input.TextInputService getTextInputService();
+    method public androidx.compose.ui.text.input.TextInputService getTextInputService();
     method public androidx.ui.core.texttoolbar.TextToolbar getTextToolbar();
     method public void measureAndLayout();
     method public void observeLayoutModelReads(androidx.ui.core.LayoutNode node, kotlin.jvm.functions.Function0<kotlin.Unit> block);
@@ -683,14 +716,14 @@
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
     property public abstract androidx.ui.unit.Density density;
-    property public abstract androidx.ui.text.font.Font.ResourceLoader fontLoader;
+    property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
     property public abstract androidx.ui.core.LayoutNode root;
     property public abstract androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? savedStateRegistry;
     property public abstract androidx.ui.core.semantics.SemanticsOwner semanticsOwner;
     property public abstract boolean showLayoutBounds;
-    property public abstract androidx.ui.input.TextInputService textInputService;
+    property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
     property public abstract androidx.ui.core.texttoolbar.TextToolbar textToolbar;
     field public static final androidx.ui.core.Owner.Companion Companion;
   }
@@ -705,6 +738,15 @@
     method public static androidx.ui.core.Modifier paint(androidx.ui.core.Modifier, androidx.ui.graphics.painter.Painter painter, boolean sizeToIntrinsics = true, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Inside, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
   }
 
+  public final class ParameterElement {
+    ctor public ParameterElement(String name, Object? value);
+    method public String component1();
+    method public Object? component2();
+    method public androidx.ui.core.ParameterElement copy(String name, Object? value);
+    method public String getName();
+    method public Object? getValue();
+  }
+
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
     method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
   }
@@ -807,7 +849,6 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void DropdownPopup(androidx.ui.core.DropDownAlignment dropDownAlignment = androidx.ui.core.DropDownAlignment.Start, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
@@ -914,8 +955,8 @@
   }
 
   public interface ClipboardManager {
-    method public androidx.ui.text.AnnotatedString? getText();
-    method public void setText(androidx.ui.text.AnnotatedString annotatedString);
+    method public androidx.compose.ui.text.AnnotatedString? getText();
+    method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
   }
 
 }
@@ -1887,7 +1928,7 @@
     method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
     method public androidx.ui.core.LayoutCoordinates? getLayoutCoordinates();
     method public androidx.ui.core.selection.Selection? getSelection(androidx.ui.geometry.Offset startPosition, androidx.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   @androidx.compose.Immutable public final class Selection {
@@ -1900,16 +1941,16 @@
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
     method public androidx.ui.core.selection.Selection merge(androidx.ui.core.selection.Selection? other);
-    method public androidx.ui.text.TextRange toTextRange();
+    method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
   @androidx.compose.Immutable public static final class Selection.AnchorInfo {
-    ctor public Selection.AnchorInfo(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection component1();
+    ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection getDirection();
+    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
@@ -2187,16 +2228,6 @@
 
 }
 
-package androidx.ui.input {
-
-  public final class InputStateKt {
-  }
-
-  public final class RecordingInputConnectionKt {
-  }
-
-}
-
 package androidx.ui.node {
 
   public final class PointerInteropFilterKt {
@@ -2252,9 +2283,9 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.text.Typeface fontResource(androidx.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.font.FontFamily? pendingFontFamily = null, androidx.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.Typeface? pendingTypeface = null, androidx.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
@@ -2328,23 +2359,23 @@
 
   public final class SemanticsActions {
     method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollForward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollForward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
     field public static final androidx.ui.semantics.SemanticsActions INSTANCE;
   }
 
@@ -2357,8 +2388,8 @@
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHidden();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
     method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> getText();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> getTextSelectionRange();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityLabel;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityRangeInfo> AccessibilityRangeInfo;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityValue;
@@ -2367,8 +2398,8 @@
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Hidden;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> Text;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> TextSelectionRange;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> Text;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
     field public static final androidx.ui.semantics.SemanticsProperties INSTANCE;
   }
 
@@ -2380,9 +2411,9 @@
     method public static java.util.List<androidx.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
-    method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.compose.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean> action);
+    method public static androidx.compose.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
     method public static void popup(androidx.ui.semantics.SemanticsPropertyReceiver);
@@ -2397,9 +2428,9 @@
     method public static void setProgress(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean> action);
     method public static void setSelection(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean> action);
     method public static void setTestTag(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.AnnotatedString p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString,java.lang.Boolean> action);
-    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.TextRange p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean> action);
+    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.TextRange p);
   }
 
   public final class SemanticsPropertyKey<T> {
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index 104d786..ee6afc2 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -1,4 +1,14 @@
 // Signature format: 3.0
+package androidx.compose.ui.text.input {
+
+  public final class InputStateKt {
+  }
+
+  public final class RecordingInputConnectionKt {
+  }
+
+}
+
 package androidx.ui.autofill {
 
   public final class AndroidAutofillDebugUtilsKt {
@@ -113,6 +123,19 @@
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
+  public abstract class AbstractComposeView extends android.view.ViewGroup {
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context);
+    method @androidx.compose.Composable public abstract void Content();
+    method public final void createComposition();
+    method public final void disposeComposition();
+    method public final boolean isDisposed();
+    method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+    method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+    property public final boolean isDisposed;
+  }
+
   @androidx.compose.Immutable public interface Alignment {
     method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
@@ -178,7 +201,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
@@ -235,6 +258,14 @@
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
   }
 
+  public final class ComposeView extends androidx.ui.core.AbstractComposeView {
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context);
+    method @androidx.compose.Composable public void Content();
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
     method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
@@ -344,13 +375,6 @@
     method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-xWKVMPI(androidx.ui.core.Modifier, float elevation, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
-  public enum DropDownAlignment {
-    method public static androidx.ui.core.DropDownAlignment valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.DropDownAlignment[] values();
-    enum_constant public static final androidx.ui.core.DropDownAlignment End;
-    enum_constant public static final androidx.ui.core.DropDownAlignment Start;
-  }
-
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
   }
 
@@ -369,6 +393,15 @@
     ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
+  public interface InspectableParameter {
+    method public kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> getInspectableElements();
+    method public default String? getNameFallback();
+    method public default Object? getValueOverride();
+    property public abstract kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> inspectableElements;
+    property public default String? nameFallback;
+    property public default Object? valueOverride;
+  }
+
   @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) public @interface InternalCoreApi {
   }
 
@@ -656,14 +689,14 @@
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
     method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.text.font.Font.ResourceLoader getFontLoader();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
     method public androidx.ui.core.LayoutNode getRoot();
     method public androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? getSavedStateRegistry();
     method public androidx.ui.core.semantics.SemanticsOwner getSemanticsOwner();
     method public boolean getShowLayoutBounds();
-    method public androidx.ui.input.TextInputService getTextInputService();
+    method public androidx.compose.ui.text.input.TextInputService getTextInputService();
     method public androidx.ui.core.texttoolbar.TextToolbar getTextToolbar();
     method public void measureAndLayout();
     method public void observeLayoutModelReads(androidx.ui.core.LayoutNode node, kotlin.jvm.functions.Function0<kotlin.Unit> block);
@@ -683,14 +716,14 @@
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
     property public abstract androidx.ui.unit.Density density;
-    property public abstract androidx.ui.text.font.Font.ResourceLoader fontLoader;
+    property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
     property public abstract androidx.ui.core.LayoutNode root;
     property public abstract androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? savedStateRegistry;
     property public abstract androidx.ui.core.semantics.SemanticsOwner semanticsOwner;
     property public abstract boolean showLayoutBounds;
-    property public abstract androidx.ui.input.TextInputService textInputService;
+    property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
     property public abstract androidx.ui.core.texttoolbar.TextToolbar textToolbar;
     field public static final androidx.ui.core.Owner.Companion Companion;
   }
@@ -705,6 +738,15 @@
     method public static androidx.ui.core.Modifier paint(androidx.ui.core.Modifier, androidx.ui.graphics.painter.Painter painter, boolean sizeToIntrinsics = true, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Inside, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
   }
 
+  public final class ParameterElement {
+    ctor public ParameterElement(String name, Object? value);
+    method public String component1();
+    method public Object? component2();
+    method public androidx.ui.core.ParameterElement copy(String name, Object? value);
+    method public String getName();
+    method public Object? getValue();
+  }
+
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
     method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
   }
@@ -807,7 +849,6 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void DropdownPopup(androidx.ui.core.DropDownAlignment dropDownAlignment = androidx.ui.core.DropDownAlignment.Start, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
@@ -914,8 +955,8 @@
   }
 
   public interface ClipboardManager {
-    method public androidx.ui.text.AnnotatedString? getText();
-    method public void setText(androidx.ui.text.AnnotatedString annotatedString);
+    method public androidx.compose.ui.text.AnnotatedString? getText();
+    method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
   }
 
 }
@@ -1887,7 +1928,7 @@
     method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
     method public androidx.ui.core.LayoutCoordinates? getLayoutCoordinates();
     method public androidx.ui.core.selection.Selection? getSelection(androidx.ui.geometry.Offset startPosition, androidx.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   @androidx.compose.Immutable public final class Selection {
@@ -1900,16 +1941,16 @@
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
     method public androidx.ui.core.selection.Selection merge(androidx.ui.core.selection.Selection? other);
-    method public androidx.ui.text.TextRange toTextRange();
+    method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
   @androidx.compose.Immutable public static final class Selection.AnchorInfo {
-    ctor public Selection.AnchorInfo(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection component1();
+    ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection getDirection();
+    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
@@ -2187,16 +2228,6 @@
 
 }
 
-package androidx.ui.input {
-
-  public final class InputStateKt {
-  }
-
-  public final class RecordingInputConnectionKt {
-  }
-
-}
-
 package androidx.ui.node {
 
   public final class PointerInteropFilterKt {
@@ -2252,9 +2283,9 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.text.Typeface fontResource(androidx.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.font.FontFamily? pendingFontFamily = null, androidx.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.Typeface? pendingTypeface = null, androidx.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
@@ -2328,23 +2359,23 @@
 
   public final class SemanticsActions {
     method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollForward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollForward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
     field public static final androidx.ui.semantics.SemanticsActions INSTANCE;
   }
 
@@ -2357,8 +2388,8 @@
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHidden();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
     method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> getText();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> getTextSelectionRange();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityLabel;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityRangeInfo> AccessibilityRangeInfo;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityValue;
@@ -2367,8 +2398,8 @@
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Hidden;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> Text;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> TextSelectionRange;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> Text;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
     field public static final androidx.ui.semantics.SemanticsProperties INSTANCE;
   }
 
@@ -2380,9 +2411,9 @@
     method public static java.util.List<androidx.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
-    method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.compose.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean> action);
+    method public static androidx.compose.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
     method public static void popup(androidx.ui.semantics.SemanticsPropertyReceiver);
@@ -2397,9 +2428,9 @@
     method public static void setProgress(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean> action);
     method public static void setSelection(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean> action);
     method public static void setTestTag(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.AnnotatedString p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString,java.lang.Boolean> action);
-    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.TextRange p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean> action);
+    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.TextRange p);
   }
 
   public final class SemanticsPropertyKey<T> {
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
index 104d786..ee6afc2 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,4 +1,14 @@
 // Signature format: 3.0
+package androidx.compose.ui.text.input {
+
+  public final class InputStateKt {
+  }
+
+  public final class RecordingInputConnectionKt {
+  }
+
+}
+
 package androidx.ui.autofill {
 
   public final class AndroidAutofillDebugUtilsKt {
@@ -113,6 +123,19 @@
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
+  public abstract class AbstractComposeView extends android.view.ViewGroup {
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context);
+    method @androidx.compose.Composable public abstract void Content();
+    method public final void createComposition();
+    method public final void disposeComposition();
+    method public final boolean isDisposed();
+    method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+    method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+    property public final boolean isDisposed;
+  }
+
   @androidx.compose.Immutable public interface Alignment {
     method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
@@ -178,7 +201,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
@@ -235,6 +258,14 @@
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
   }
 
+  public final class ComposeView extends androidx.ui.core.AbstractComposeView {
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context);
+    method @androidx.compose.Composable public void Content();
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
     method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
@@ -344,13 +375,6 @@
     method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-xWKVMPI(androidx.ui.core.Modifier, float elevation, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
-  public enum DropDownAlignment {
-    method public static androidx.ui.core.DropDownAlignment valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.DropDownAlignment[] values();
-    enum_constant public static final androidx.ui.core.DropDownAlignment End;
-    enum_constant public static final androidx.ui.core.DropDownAlignment Start;
-  }
-
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
   }
 
@@ -369,6 +393,15 @@
     ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
+  public interface InspectableParameter {
+    method public kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> getInspectableElements();
+    method public default String? getNameFallback();
+    method public default Object? getValueOverride();
+    property public abstract kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> inspectableElements;
+    property public default String? nameFallback;
+    property public default Object? valueOverride;
+  }
+
   @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) public @interface InternalCoreApi {
   }
 
@@ -656,14 +689,14 @@
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
     method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.text.font.Font.ResourceLoader getFontLoader();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
     method public androidx.ui.core.LayoutNode getRoot();
     method public androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? getSavedStateRegistry();
     method public androidx.ui.core.semantics.SemanticsOwner getSemanticsOwner();
     method public boolean getShowLayoutBounds();
-    method public androidx.ui.input.TextInputService getTextInputService();
+    method public androidx.compose.ui.text.input.TextInputService getTextInputService();
     method public androidx.ui.core.texttoolbar.TextToolbar getTextToolbar();
     method public void measureAndLayout();
     method public void observeLayoutModelReads(androidx.ui.core.LayoutNode node, kotlin.jvm.functions.Function0<kotlin.Unit> block);
@@ -683,14 +716,14 @@
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
     property public abstract androidx.ui.unit.Density density;
-    property public abstract androidx.ui.text.font.Font.ResourceLoader fontLoader;
+    property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
     property public abstract androidx.ui.core.LayoutNode root;
     property public abstract androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? savedStateRegistry;
     property public abstract androidx.ui.core.semantics.SemanticsOwner semanticsOwner;
     property public abstract boolean showLayoutBounds;
-    property public abstract androidx.ui.input.TextInputService textInputService;
+    property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
     property public abstract androidx.ui.core.texttoolbar.TextToolbar textToolbar;
     field public static final androidx.ui.core.Owner.Companion Companion;
   }
@@ -705,6 +738,15 @@
     method public static androidx.ui.core.Modifier paint(androidx.ui.core.Modifier, androidx.ui.graphics.painter.Painter painter, boolean sizeToIntrinsics = true, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Inside, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
   }
 
+  public final class ParameterElement {
+    ctor public ParameterElement(String name, Object? value);
+    method public String component1();
+    method public Object? component2();
+    method public androidx.ui.core.ParameterElement copy(String name, Object? value);
+    method public String getName();
+    method public Object? getValue();
+  }
+
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
     method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
   }
@@ -807,7 +849,6 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void DropdownPopup(androidx.ui.core.DropDownAlignment dropDownAlignment = androidx.ui.core.DropDownAlignment.Start, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
@@ -914,8 +955,8 @@
   }
 
   public interface ClipboardManager {
-    method public androidx.ui.text.AnnotatedString? getText();
-    method public void setText(androidx.ui.text.AnnotatedString annotatedString);
+    method public androidx.compose.ui.text.AnnotatedString? getText();
+    method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
   }
 
 }
@@ -1887,7 +1928,7 @@
     method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
     method public androidx.ui.core.LayoutCoordinates? getLayoutCoordinates();
     method public androidx.ui.core.selection.Selection? getSelection(androidx.ui.geometry.Offset startPosition, androidx.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   @androidx.compose.Immutable public final class Selection {
@@ -1900,16 +1941,16 @@
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
     method public androidx.ui.core.selection.Selection merge(androidx.ui.core.selection.Selection? other);
-    method public androidx.ui.text.TextRange toTextRange();
+    method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
   @androidx.compose.Immutable public static final class Selection.AnchorInfo {
-    ctor public Selection.AnchorInfo(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection component1();
+    ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection getDirection();
+    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
@@ -2187,16 +2228,6 @@
 
 }
 
-package androidx.ui.input {
-
-  public final class InputStateKt {
-  }
-
-  public final class RecordingInputConnectionKt {
-  }
-
-}
-
 package androidx.ui.node {
 
   public final class PointerInteropFilterKt {
@@ -2252,9 +2283,9 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.text.Typeface fontResource(androidx.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.font.FontFamily? pendingFontFamily = null, androidx.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.Typeface? pendingTypeface = null, androidx.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
@@ -2328,23 +2359,23 @@
 
   public final class SemanticsActions {
     method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollForward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollForward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
     field public static final androidx.ui.semantics.SemanticsActions INSTANCE;
   }
 
@@ -2357,8 +2388,8 @@
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHidden();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
     method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> getText();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> getTextSelectionRange();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityLabel;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityRangeInfo> AccessibilityRangeInfo;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityValue;
@@ -2367,8 +2398,8 @@
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Hidden;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> Text;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> TextSelectionRange;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> Text;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
     field public static final androidx.ui.semantics.SemanticsProperties INSTANCE;
   }
 
@@ -2380,9 +2411,9 @@
     method public static java.util.List<androidx.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
-    method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.compose.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean> action);
+    method public static androidx.compose.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
     method public static void popup(androidx.ui.semantics.SemanticsPropertyReceiver);
@@ -2397,9 +2428,9 @@
     method public static void setProgress(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean> action);
     method public static void setSelection(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean> action);
     method public static void setTestTag(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.AnnotatedString p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString,java.lang.Boolean> action);
-    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.TextRange p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean> action);
+    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.TextRange p);
   }
 
   public final class SemanticsPropertyKey<T> {
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index 104d786..ee6afc2 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -1,4 +1,14 @@
 // Signature format: 3.0
+package androidx.compose.ui.text.input {
+
+  public final class InputStateKt {
+  }
+
+  public final class RecordingInputConnectionKt {
+  }
+
+}
+
 package androidx.ui.autofill {
 
   public final class AndroidAutofillDebugUtilsKt {
@@ -113,6 +123,19 @@
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
+  public abstract class AbstractComposeView extends android.view.ViewGroup {
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context);
+    method @androidx.compose.Composable public abstract void Content();
+    method public final void createComposition();
+    method public final void disposeComposition();
+    method public final boolean isDisposed();
+    method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+    method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+    property public final boolean isDisposed;
+  }
+
   @androidx.compose.Immutable public interface Alignment {
     method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
@@ -178,7 +201,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
@@ -235,6 +258,14 @@
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
   }
 
+  public final class ComposeView extends androidx.ui.core.AbstractComposeView {
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context);
+    method @androidx.compose.Composable public void Content();
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
     method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
@@ -344,13 +375,6 @@
     method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-xWKVMPI(androidx.ui.core.Modifier, float elevation, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
-  public enum DropDownAlignment {
-    method public static androidx.ui.core.DropDownAlignment valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.DropDownAlignment[] values();
-    enum_constant public static final androidx.ui.core.DropDownAlignment End;
-    enum_constant public static final androidx.ui.core.DropDownAlignment Start;
-  }
-
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
   }
 
@@ -369,6 +393,15 @@
     ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
+  public interface InspectableParameter {
+    method public kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> getInspectableElements();
+    method public default String? getNameFallback();
+    method public default Object? getValueOverride();
+    property public abstract kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> inspectableElements;
+    property public default String? nameFallback;
+    property public default Object? valueOverride;
+  }
+
   @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) public @interface InternalCoreApi {
   }
 
@@ -656,14 +689,14 @@
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
     method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.text.font.Font.ResourceLoader getFontLoader();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
     method public androidx.ui.core.LayoutNode getRoot();
     method public androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? getSavedStateRegistry();
     method public androidx.ui.core.semantics.SemanticsOwner getSemanticsOwner();
     method public boolean getShowLayoutBounds();
-    method public androidx.ui.input.TextInputService getTextInputService();
+    method public androidx.compose.ui.text.input.TextInputService getTextInputService();
     method public androidx.ui.core.texttoolbar.TextToolbar getTextToolbar();
     method public void measureAndLayout();
     method public void observeLayoutModelReads(androidx.ui.core.LayoutNode node, kotlin.jvm.functions.Function0<kotlin.Unit> block);
@@ -683,14 +716,14 @@
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
     property public abstract androidx.ui.unit.Density density;
-    property public abstract androidx.ui.text.font.Font.ResourceLoader fontLoader;
+    property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
     property public abstract androidx.ui.core.LayoutNode root;
     property public abstract androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? savedStateRegistry;
     property public abstract androidx.ui.core.semantics.SemanticsOwner semanticsOwner;
     property public abstract boolean showLayoutBounds;
-    property public abstract androidx.ui.input.TextInputService textInputService;
+    property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
     property public abstract androidx.ui.core.texttoolbar.TextToolbar textToolbar;
     field public static final androidx.ui.core.Owner.Companion Companion;
   }
@@ -705,6 +738,15 @@
     method public static androidx.ui.core.Modifier paint(androidx.ui.core.Modifier, androidx.ui.graphics.painter.Painter painter, boolean sizeToIntrinsics = true, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Inside, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
   }
 
+  public final class ParameterElement {
+    ctor public ParameterElement(String name, Object? value);
+    method public String component1();
+    method public Object? component2();
+    method public androidx.ui.core.ParameterElement copy(String name, Object? value);
+    method public String getName();
+    method public Object? getValue();
+  }
+
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
     method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
   }
@@ -807,7 +849,6 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void DropdownPopup(androidx.ui.core.DropDownAlignment dropDownAlignment = androidx.ui.core.DropDownAlignment.Start, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
@@ -914,8 +955,8 @@
   }
 
   public interface ClipboardManager {
-    method public androidx.ui.text.AnnotatedString? getText();
-    method public void setText(androidx.ui.text.AnnotatedString annotatedString);
+    method public androidx.compose.ui.text.AnnotatedString? getText();
+    method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
   }
 
 }
@@ -1887,7 +1928,7 @@
     method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
     method public androidx.ui.core.LayoutCoordinates? getLayoutCoordinates();
     method public androidx.ui.core.selection.Selection? getSelection(androidx.ui.geometry.Offset startPosition, androidx.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   @androidx.compose.Immutable public final class Selection {
@@ -1900,16 +1941,16 @@
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
     method public androidx.ui.core.selection.Selection merge(androidx.ui.core.selection.Selection? other);
-    method public androidx.ui.text.TextRange toTextRange();
+    method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
   @androidx.compose.Immutable public static final class Selection.AnchorInfo {
-    ctor public Selection.AnchorInfo(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection component1();
+    ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection getDirection();
+    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
@@ -2187,16 +2228,6 @@
 
 }
 
-package androidx.ui.input {
-
-  public final class InputStateKt {
-  }
-
-  public final class RecordingInputConnectionKt {
-  }
-
-}
-
 package androidx.ui.node {
 
   public final class PointerInteropFilterKt {
@@ -2252,9 +2283,9 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.text.Typeface fontResource(androidx.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.font.FontFamily? pendingFontFamily = null, androidx.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.Typeface? pendingTypeface = null, androidx.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
@@ -2328,23 +2359,23 @@
 
   public final class SemanticsActions {
     method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollForward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollForward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
     field public static final androidx.ui.semantics.SemanticsActions INSTANCE;
   }
 
@@ -2357,8 +2388,8 @@
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHidden();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
     method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> getText();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> getTextSelectionRange();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityLabel;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityRangeInfo> AccessibilityRangeInfo;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityValue;
@@ -2367,8 +2398,8 @@
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Hidden;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> Text;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> TextSelectionRange;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> Text;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
     field public static final androidx.ui.semantics.SemanticsProperties INSTANCE;
   }
 
@@ -2380,9 +2411,9 @@
     method public static java.util.List<androidx.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
-    method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.compose.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean> action);
+    method public static androidx.compose.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
     method public static void popup(androidx.ui.semantics.SemanticsPropertyReceiver);
@@ -2397,9 +2428,9 @@
     method public static void setProgress(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean> action);
     method public static void setSelection(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean> action);
     method public static void setTestTag(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.AnnotatedString p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString,java.lang.Boolean> action);
-    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.TextRange p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean> action);
+    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.TextRange p);
   }
 
   public final class SemanticsPropertyKey<T> {
diff --git a/ui/ui-core/api/restricted_0.1.0-dev16.txt b/ui/ui-core/api/restricted_0.1.0-dev16.txt
index 23f4d5c..9faef54 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev16.txt
@@ -1,4 +1,14 @@
 // Signature format: 3.0
+package androidx.compose.ui.text.input {
+
+  public final class InputStateKt {
+  }
+
+  public final class RecordingInputConnectionKt {
+  }
+
+}
+
 package androidx.ui.autofill {
 
   public final class AndroidAutofillDebugUtilsKt {
@@ -113,6 +123,19 @@
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
+  public abstract class AbstractComposeView extends android.view.ViewGroup {
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context);
+    method @androidx.compose.Composable public abstract void Content();
+    method public final void createComposition();
+    method public final void disposeComposition();
+    method public final boolean isDisposed();
+    method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+    method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+    property public final boolean isDisposed;
+  }
+
   @androidx.compose.Immutable public interface Alignment {
     method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
@@ -178,7 +201,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
@@ -241,6 +264,14 @@
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
   }
 
+  public final class ComposeView extends androidx.ui.core.AbstractComposeView {
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context);
+    method @androidx.compose.Composable public void Content();
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
     method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
@@ -364,13 +395,6 @@
     method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-xWKVMPI(androidx.ui.core.Modifier, float elevation, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
-  public enum DropDownAlignment {
-    method public static androidx.ui.core.DropDownAlignment valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.DropDownAlignment[] values();
-    enum_constant public static final androidx.ui.core.DropDownAlignment End;
-    enum_constant public static final androidx.ui.core.DropDownAlignment Start;
-  }
-
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
   }
 
@@ -389,6 +413,15 @@
     ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
+  public interface InspectableParameter {
+    method public kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> getInspectableElements();
+    method public default String? getNameFallback();
+    method public default Object? getValueOverride();
+    property public abstract kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> inspectableElements;
+    property public default String? nameFallback;
+    property public default Object? valueOverride;
+  }
+
   @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) public @interface InternalCoreApi {
   }
 
@@ -719,14 +752,14 @@
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
     method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.text.font.Font.ResourceLoader getFontLoader();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
     method public androidx.ui.core.LayoutNode getRoot();
     method public androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? getSavedStateRegistry();
     method public androidx.ui.core.semantics.SemanticsOwner getSemanticsOwner();
     method public boolean getShowLayoutBounds();
-    method public androidx.ui.input.TextInputService getTextInputService();
+    method public androidx.compose.ui.text.input.TextInputService getTextInputService();
     method public androidx.ui.core.texttoolbar.TextToolbar getTextToolbar();
     method public void measureAndLayout();
     method public void observeLayoutModelReads(androidx.ui.core.LayoutNode node, kotlin.jvm.functions.Function0<kotlin.Unit> block);
@@ -746,14 +779,14 @@
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
     property public abstract androidx.ui.unit.Density density;
-    property public abstract androidx.ui.text.font.Font.ResourceLoader fontLoader;
+    property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
     property public abstract androidx.ui.core.LayoutNode root;
     property public abstract androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? savedStateRegistry;
     property public abstract androidx.ui.core.semantics.SemanticsOwner semanticsOwner;
     property public abstract boolean showLayoutBounds;
-    property public abstract androidx.ui.input.TextInputService textInputService;
+    property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
     property public abstract androidx.ui.core.texttoolbar.TextToolbar textToolbar;
     field public static final androidx.ui.core.Owner.Companion Companion;
   }
@@ -768,6 +801,15 @@
     method public static androidx.ui.core.Modifier paint(androidx.ui.core.Modifier, androidx.ui.graphics.painter.Painter painter, boolean sizeToIntrinsics = true, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Inside, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
   }
 
+  public final class ParameterElement {
+    ctor public ParameterElement(String name, Object? value);
+    method public String component1();
+    method public Object? component2();
+    method public androidx.ui.core.ParameterElement copy(String name, Object? value);
+    method public String getName();
+    method public Object? getValue();
+  }
+
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
     method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
   }
@@ -870,7 +912,6 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void DropdownPopup(androidx.ui.core.DropDownAlignment dropDownAlignment = androidx.ui.core.DropDownAlignment.Start, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
@@ -977,8 +1018,8 @@
   }
 
   public interface ClipboardManager {
-    method public androidx.ui.text.AnnotatedString? getText();
-    method public void setText(androidx.ui.text.AnnotatedString annotatedString);
+    method public androidx.compose.ui.text.AnnotatedString? getText();
+    method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
   }
 
 }
@@ -1950,7 +1991,7 @@
     method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
     method public androidx.ui.core.LayoutCoordinates? getLayoutCoordinates();
     method public androidx.ui.core.selection.Selection? getSelection(androidx.ui.geometry.Offset startPosition, androidx.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   @androidx.compose.Immutable public final class Selection {
@@ -1963,16 +2004,16 @@
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
     method public androidx.ui.core.selection.Selection merge(androidx.ui.core.selection.Selection? other);
-    method public androidx.ui.text.TextRange toTextRange();
+    method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
   @androidx.compose.Immutable public static final class Selection.AnchorInfo {
-    ctor public Selection.AnchorInfo(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection component1();
+    ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection getDirection();
+    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
@@ -2250,16 +2291,6 @@
 
 }
 
-package androidx.ui.input {
-
-  public final class InputStateKt {
-  }
-
-  public final class RecordingInputConnectionKt {
-  }
-
-}
-
 package androidx.ui.node {
 
   public final class PointerInteropFilterKt {
@@ -2324,9 +2355,9 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.text.Typeface fontResource(androidx.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.font.FontFamily? pendingFontFamily = null, androidx.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.Typeface? pendingTypeface = null, androidx.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
@@ -2400,23 +2431,23 @@
 
   public final class SemanticsActions {
     method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollForward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollForward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
     field public static final androidx.ui.semantics.SemanticsActions INSTANCE;
   }
 
@@ -2429,8 +2460,8 @@
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHidden();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
     method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> getText();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> getTextSelectionRange();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityLabel;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityRangeInfo> AccessibilityRangeInfo;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityValue;
@@ -2439,8 +2470,8 @@
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Hidden;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> Text;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> TextSelectionRange;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> Text;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
     field public static final androidx.ui.semantics.SemanticsProperties INSTANCE;
   }
 
@@ -2452,9 +2483,9 @@
     method public static java.util.List<androidx.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
-    method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.compose.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean> action);
+    method public static androidx.compose.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
     method public static void popup(androidx.ui.semantics.SemanticsPropertyReceiver);
@@ -2469,9 +2500,9 @@
     method public static void setProgress(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean> action);
     method public static void setSelection(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean> action);
     method public static void setTestTag(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.AnnotatedString p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString,java.lang.Boolean> action);
-    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.TextRange p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean> action);
+    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.TextRange p);
   }
 
   public final class SemanticsPropertyKey<T> {
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index 23f4d5c..9faef54 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -1,4 +1,14 @@
 // Signature format: 3.0
+package androidx.compose.ui.text.input {
+
+  public final class InputStateKt {
+  }
+
+  public final class RecordingInputConnectionKt {
+  }
+
+}
+
 package androidx.ui.autofill {
 
   public final class AndroidAutofillDebugUtilsKt {
@@ -113,6 +123,19 @@
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
+  public abstract class AbstractComposeView extends android.view.ViewGroup {
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public AbstractComposeView(android.content.Context context);
+    method @androidx.compose.Composable public abstract void Content();
+    method public final void createComposition();
+    method public final void disposeComposition();
+    method public final boolean isDisposed();
+    method protected final void onLayout(boolean changed, int left, int top, int right, int bottom);
+    method protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec);
+    property public final boolean isDisposed;
+  }
+
   @androidx.compose.Immutable public interface Alignment {
     method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
@@ -178,7 +201,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
@@ -241,6 +264,14 @@
     method public <R> R! foldOut(R? initial, kotlin.jvm.functions.Function2<? super androidx.ui.core.Modifier.Element,? super R,? extends R> operation);
   }
 
+  public final class ComposeView extends androidx.ui.core.AbstractComposeView {
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
+    ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
+    ctor public ComposeView(android.content.Context context);
+    method @androidx.compose.Composable public void Content();
+    method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
+  }
+
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
     method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
@@ -364,13 +395,6 @@
     method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-xWKVMPI(androidx.ui.core.Modifier, float elevation, androidx.ui.graphics.Shape shape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
-  public enum DropDownAlignment {
-    method public static androidx.ui.core.DropDownAlignment valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.DropDownAlignment[] values();
-    enum_constant public static final androidx.ui.core.DropDownAlignment End;
-    enum_constant public static final androidx.ui.core.DropDownAlignment Start;
-  }
-
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
   }
 
@@ -389,6 +413,15 @@
     ctor public HorizontalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
+  public interface InspectableParameter {
+    method public kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> getInspectableElements();
+    method public default String? getNameFallback();
+    method public default Object? getValueOverride();
+    property public abstract kotlin.sequences.Sequence<androidx.ui.core.ParameterElement> inspectableElements;
+    property public default String? nameFallback;
+    property public default Object? valueOverride;
+  }
+
   @kotlin.RequiresOptIn(message="This API is internal to library.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER}) public @interface InternalCoreApi {
   }
 
@@ -719,14 +752,14 @@
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
     method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.text.font.Font.ResourceLoader getFontLoader();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
     method public androidx.ui.core.LayoutNode getRoot();
     method public androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? getSavedStateRegistry();
     method public androidx.ui.core.semantics.SemanticsOwner getSemanticsOwner();
     method public boolean getShowLayoutBounds();
-    method public androidx.ui.input.TextInputService getTextInputService();
+    method public androidx.compose.ui.text.input.TextInputService getTextInputService();
     method public androidx.ui.core.texttoolbar.TextToolbar getTextToolbar();
     method public void measureAndLayout();
     method public void observeLayoutModelReads(androidx.ui.core.LayoutNode node, kotlin.jvm.functions.Function0<kotlin.Unit> block);
@@ -746,14 +779,14 @@
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
     property public abstract androidx.ui.unit.Density density;
-    property public abstract androidx.ui.text.font.Font.ResourceLoader fontLoader;
+    property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
     property public abstract androidx.ui.core.LayoutNode root;
     property public abstract androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry? savedStateRegistry;
     property public abstract androidx.ui.core.semantics.SemanticsOwner semanticsOwner;
     property public abstract boolean showLayoutBounds;
-    property public abstract androidx.ui.input.TextInputService textInputService;
+    property public abstract androidx.compose.ui.text.input.TextInputService textInputService;
     property public abstract androidx.ui.core.texttoolbar.TextToolbar textToolbar;
     field public static final androidx.ui.core.Owner.Companion Companion;
   }
@@ -768,6 +801,15 @@
     method public static androidx.ui.core.Modifier paint(androidx.ui.core.Modifier, androidx.ui.graphics.painter.Painter painter, boolean sizeToIntrinsics = true, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Inside, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
   }
 
+  public final class ParameterElement {
+    ctor public ParameterElement(String name, Object? value);
+    method public String component1();
+    method public Object? component2();
+    method public androidx.ui.core.ParameterElement copy(String name, Object? value);
+    method public String getName();
+    method public Object? getValue();
+  }
+
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
     method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
   }
@@ -870,7 +912,6 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void DropdownPopup(androidx.ui.core.DropDownAlignment dropDownAlignment = androidx.ui.core.DropDownAlignment.Start, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
@@ -977,8 +1018,8 @@
   }
 
   public interface ClipboardManager {
-    method public androidx.ui.text.AnnotatedString? getText();
-    method public void setText(androidx.ui.text.AnnotatedString annotatedString);
+    method public androidx.compose.ui.text.AnnotatedString? getText();
+    method public void setText(androidx.compose.ui.text.AnnotatedString annotatedString);
   }
 
 }
@@ -1950,7 +1991,7 @@
     method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
     method public androidx.ui.core.LayoutCoordinates? getLayoutCoordinates();
     method public androidx.ui.core.selection.Selection? getSelection(androidx.ui.geometry.Offset startPosition, androidx.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   @androidx.compose.Immutable public final class Selection {
@@ -1963,16 +2004,16 @@
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
     method public androidx.ui.core.selection.Selection merge(androidx.ui.core.selection.Selection? other);
-    method public androidx.ui.text.TextRange toTextRange();
+    method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
   @androidx.compose.Immutable public static final class Selection.AnchorInfo {
-    ctor public Selection.AnchorInfo(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection component1();
+    ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
-    method public androidx.ui.text.style.ResolvedTextDirection getDirection();
+    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
@@ -2250,16 +2291,6 @@
 
 }
 
-package androidx.ui.input {
-
-  public final class InputStateKt {
-  }
-
-  public final class RecordingInputConnectionKt {
-  }
-
-}
-
 package androidx.ui.node {
 
   public final class PointerInteropFilterKt {
@@ -2324,9 +2355,9 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.text.Typeface fontResource(androidx.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.font.FontFamily? pendingFontFamily = null, androidx.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.ui.text.Typeface> loadFontResource(androidx.ui.text.font.FontFamily fontFamily, androidx.ui.text.Typeface? pendingTypeface = null, androidx.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
@@ -2400,23 +2431,23 @@
 
   public final class SemanticsActions {
     method public androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> getCustomActions();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> getGetTextLayoutResult();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getOnClick();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollBackward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> getScrollBy();
     method @Deprecated public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> getScrollForward();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> getSetProgress();
     method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> getSetSelection();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> getSetText();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.util.List<androidx.ui.semantics.CustomAccessibilityAction>> CustomActions;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean>>> GetTextLayoutResult;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> OnClick;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollBackward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function2<java.lang.Float,java.lang.Float,java.lang.Boolean>>> ScrollBy;
     property @Deprecated public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function0<java.lang.Boolean>>> ScrollForward;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<java.lang.Float,java.lang.Boolean>>> SetProgress;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function3<java.lang.Integer,java.lang.Integer,java.lang.Boolean,java.lang.Boolean>>> SetSelection;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityAction<kotlin.jvm.functions.Function1<androidx.compose.ui.text.AnnotatedString,java.lang.Boolean>>> SetText;
     field public static final androidx.ui.semantics.SemanticsActions INSTANCE;
   }
 
@@ -2429,8 +2460,8 @@
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getHidden();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getIsPopup();
     method public androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> getTestTag();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> getText();
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> getTextSelectionRange();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> getText();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> getTextSelectionRange();
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityLabel;
     property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.semantics.AccessibilityRangeInfo> AccessibilityRangeInfo;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> AccessibilityValue;
@@ -2439,8 +2470,8 @@
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> Hidden;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> IsPopup;
     property public final androidx.ui.semantics.SemanticsPropertyKey<java.lang.String> TestTag;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.AnnotatedString> Text;
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.text.TextRange> TextSelectionRange;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.AnnotatedString> Text;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.TextRange> TextSelectionRange;
     field public static final androidx.ui.semantics.SemanticsProperties INSTANCE;
   }
 
@@ -2452,9 +2483,9 @@
     method public static java.util.List<androidx.ui.semantics.CustomAccessibilityAction> getCustomActions(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static boolean getFocused(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static String getTestTag(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static androidx.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.ui.text.TextLayoutResult>,java.lang.Boolean> action);
-    method public static androidx.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static androidx.compose.ui.text.AnnotatedString getText(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void getTextLayoutResult(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.ui.text.TextLayoutResult>,java.lang.Boolean> action);
+    method public static androidx.compose.ui.text.TextRange getTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void hidden(androidx.ui.semantics.SemanticsPropertyReceiver);
     method public static void onClick(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function0<java.lang.Boolean> action);
     method public static void popup(androidx.ui.semantics.SemanticsPropertyReceiver);
@@ -2469,9 +2500,9 @@
     method public static void setProgress(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Boolean> action);
     method public static void setSelection(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.lang.Integer,? super java.lang.Boolean,java.lang.Boolean> action);
     method public static void setTestTag(androidx.ui.semantics.SemanticsPropertyReceiver, String p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.AnnotatedString p);
-    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString,java.lang.Boolean> action);
-    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.text.TextRange p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.AnnotatedString p);
+    method public static void setText(androidx.ui.semantics.SemanticsPropertyReceiver, String? label = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString,java.lang.Boolean> action);
+    method public static void setTextSelectionRange(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.TextRange p);
   }
 
   public final class SemanticsPropertyKey<T> {
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
index afa0c81..23a3264 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
@@ -38,22 +38,20 @@
 import androidx.compose.foundation.shape.corner.CircleShape
 import androidx.compose.state
 import androidx.ui.core.Alignment
-import androidx.ui.core.DropDownAlignment
-import androidx.ui.core.DropdownPopup
 import androidx.ui.core.Modifier
 import androidx.ui.core.Popup
 import androidx.ui.graphics.Color
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
 
 @Composable
 fun PopupDemo() {
     val exampleIndex = state { 0 }
-    val totalExamples = 9
+    val totalExamples = 8
 
     Column {
         Row(
@@ -118,12 +116,11 @@
             0 -> PopupToggle()
             1 -> PopupWithChangingContent()
             2 -> PopupWithChangingParent()
-            3 -> PopupDropdownAlignment()
-            4 -> PopupAlignmentDemo()
-            5 -> PopupWithEditText()
-            6 -> PopupWithChangingSize()
-            7 -> PopupInsideScroller()
-            8 -> PopupOnKeyboardUp()
+            3 -> PopupAlignmentDemo()
+            4 -> PopupWithEditText()
+            5 -> PopupWithChangingSize()
+            6 -> PopupInsideScroller()
+            7 -> PopupOnKeyboardUp()
         }
     }
 }
@@ -254,36 +251,6 @@
 }
 
 @Composable
-private fun ColumnScope.PopupDropdownAlignment() {
-    Column(Modifier.gravity(Alignment.CenterHorizontally)) {
-        val heightSize = 120.dp
-        val widthSize = 160.dp
-        val dropDownAlignment = state { DropDownAlignment.Start }
-
-        ClickableTextWithBackground(
-            text = "Change alignment",
-            color = Color.Cyan,
-            onClick = {
-                dropDownAlignment.value =
-                    if (dropDownAlignment.value == DropDownAlignment.Start) {
-                        DropDownAlignment.End
-                    } else {
-                        DropDownAlignment.Start
-                    }
-            }
-        )
-
-        Spacer(Modifier.preferredHeight(10.dp))
-
-        Box(Modifier.preferredSize(widthSize, heightSize), backgroundColor = Color.Gray) {
-            DropdownPopup(dropDownAlignment = dropDownAlignment.value) {
-                Box(Modifier.preferredSize(40.dp, 70.dp), backgroundColor = Color.Blue)
-            }
-        }
-    }
-}
-
-@Composable
 private fun ColumnScope.PopupAlignmentDemo() {
     Column(Modifier.gravity(Alignment.CenterHorizontally)) {
         val heightSize = 200.dp
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
index e8b062b..1e959f9 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
@@ -32,9 +32,9 @@
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.Text
 import androidx.ui.geometry.Offset
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.preferredHeight
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt
index d504157..1d1519c 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.geometry.Offset
 import androidx.ui.unit.dp
 import androidx.ui.unit.round
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt
index d3b9466..d840068 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt
@@ -21,8 +21,8 @@
 import androidx.compose.foundation.Text
 import androidx.ui.res.fontResource
 import androidx.ui.res.loadFontResource
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.LoadedFontFamily
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.LoadedFontFamily
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt
index 93487ae..f141e99 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt
@@ -19,8 +19,6 @@
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
-import androidx.ui.core.DropDownAlignment
-import androidx.ui.core.DropdownPopup
 import androidx.ui.core.Modifier
 import androidx.ui.core.Popup
 import androidx.compose.foundation.Box
@@ -47,23 +45,3 @@
         }
     }
 }
-
-@Sampled
-@Composable
-fun DropdownPopupSample() {
-    Box(Modifier.preferredSize(400.dp, 200.dp)) {
-        val popupWidth = 200.dp
-        val popupHeight = 50.dp
-        val cornerSize = 16.dp
-
-        // The popup will appear below the parent
-        DropdownPopup(dropDownAlignment = DropDownAlignment.Start) {
-            // Draw a rectangle shape with rounded corners inside the popup
-            Box(
-                Modifier.preferredSize(popupWidth, popupHeight),
-                shape = RoundedCornerShape(cornerSize),
-                backgroundColor = Color.White
-            )
-        }
-    }
-}
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/input/RecordingInputConnectionTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/RecordingInputConnectionTest.kt
similarity index 99%
rename from ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/input/RecordingInputConnectionTest.kt
rename to ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/RecordingInputConnectionTest.kt
index 3822762..228b2ae 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/input/RecordingInputConnectionTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/RecordingInputConnectionTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import android.view.KeyEvent
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt
index 3bb68b2..b90cb86 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt
@@ -33,8 +33,8 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.testutils.down
 import androidx.ui.geometry.Offset
+import androidx.ui.testutils.down
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.milliseconds
 import androidx.ui.viewinterop.AndroidView
@@ -347,6 +347,7 @@
     }
 }
 
+@Suppress("TestFunctionName")
 @Composable
 fun AndroidWithCompose(context: Context, androidPadding: Int, children: @Composable () -> Unit) {
     val anotherLayout = FrameLayout(context).also { view ->
@@ -431,17 +432,54 @@
     override fun onCancel() {}
 }
 
+@Suppress("TestFunctionName")
 @Composable
-fun FillLayout(modifier: Modifier = Modifier) {
+private fun FillLayout(modifier: Modifier = Modifier) {
     Layout(emptyContent(), modifier) { _, constraints ->
         layout(constraints.maxWidth, constraints.maxHeight) {}
     }
 }
 
-fun countDown(block: (CountDownLatch) -> Unit) {
+private fun countDown(block: (CountDownLatch) -> Unit) {
     val countDownLatch = CountDownLatch(1)
     block(countDownLatch)
     assertThat(countDownLatch.await(1, TimeUnit.SECONDS)).isTrue()
 }
 
 class AndroidPointerInputTestActivity : ComponentActivity()
+
+@Suppress("SameParameterValue", "TestFunctionName")
+private fun MotionEvent(
+    eventTime: Int,
+    action: Int,
+    numPointers: Int,
+    actionIndex: Int,
+    pointerProperties: Array<MotionEvent.PointerProperties>,
+    pointerCoords: Array<MotionEvent.PointerCoords>
+) = MotionEvent.obtain(
+    0,
+    eventTime.toLong(),
+    action + (actionIndex shl MotionEvent.ACTION_POINTER_INDEX_SHIFT),
+    numPointers,
+    pointerProperties,
+    pointerCoords,
+    0,
+    0,
+    0f,
+    0f,
+    0,
+    0,
+    0,
+    0
+)
+
+@Suppress("SameParameterValue", "TestFunctionName")
+private fun PointerProperties(id: Int) =
+    MotionEvent.PointerProperties().apply { this.id = id }
+
+@Suppress("SameParameterValue", "TestFunctionName")
+private fun PointerCoords(x: Float, y: Float) =
+    MotionEvent.PointerCoords().apply {
+        this.x = x
+        this.y = y
+    }
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt
index fec33db..756336e 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt
@@ -31,7 +31,7 @@
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.node.UiApplier
 import androidx.ui.semantics.accessibilityLabel
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.assertLabelEquals
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnUiThread
@@ -55,7 +55,7 @@
     }
 
     @get:Rule
-    val rule = AndroidComposeTestRule<TestActivity>()
+    val rule = createAndroidComposeRule<TestActivity>()
 
     @Test
     fun composeView() {
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/MotionEventUtil.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/MotionEventUtil.kt
deleted file mode 100644
index 66852ac..0000000
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/MotionEventUtil.kt
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2020 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.view.MotionEvent
-
-internal fun MotionEvent(
-    eventTime: Int,
-    action: Int,
-    numPointers: Int,
-    actionIndex: Int,
-    pointerProperties: Array<MotionEvent.PointerProperties>,
-    pointerCoords: Array<MotionEvent.PointerCoords>
-) = MotionEvent.obtain(
-    0,
-    eventTime.toLong(),
-    action + (actionIndex shl MotionEvent.ACTION_POINTER_INDEX_SHIFT),
-    numPointers,
-    pointerProperties,
-    pointerCoords,
-    0,
-    0,
-    0f,
-    0f,
-    0,
-    0,
-    0,
-    0
-)
-
-internal fun PointerProperties(id: Int) =
-    MotionEvent.PointerProperties().apply { this.id = id }
-
-internal fun PointerCoords(x: Float, y: Float) =
-    MotionEvent.PointerCoords().apply {
-        this.x = x
-        this.y = y
-    }
\ No newline at end of file
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/selection/SelectionHandlesTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/selection/SelectionHandlesTest.kt
index 41b9fbd..6d812c3 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/selection/SelectionHandlesTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/selection/SelectionHandlesTest.kt
@@ -26,8 +26,8 @@
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.toArgb
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import org.junit.Before
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt
index c8fa328..188896d 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt
@@ -77,7 +77,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.assertIsDisplayed
 import androidx.ui.test.assertPixels
 import androidx.ui.test.captureToBitmap
@@ -111,7 +111,7 @@
 @RunWith(JUnit4::class)
 class AndroidViewCompatTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<TestActivity>()
+    val composeTestRule = createAndroidComposeRule<TestActivity>()
 
     @Test
     fun simpleLayoutTest() {
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt
index 15f5c6a..13f29fc 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.unit.dp
 import androidx.ui.viewinterop.AndroidView
 import com.nhaarman.mockitokotlin2.clearInvocations
@@ -53,7 +53,7 @@
     private val theHitListener: () -> Unit = mock()
 
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<TestActivity>()
+    val composeTestRule = createAndroidComposeRule<TestActivity>()
 
     @Before
     fun setup() {
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt
index db7a1c3..a777419 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt
@@ -32,7 +32,7 @@
 import androidx.ui.core.PointerInputChange
 import androidx.ui.core.consumeAllChanges
 import androidx.ui.core.consumeDownChange
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.testutils.consume
 import androidx.ui.testutils.down
 import androidx.ui.testutils.moveBy
@@ -52,7 +52,7 @@
 @RunWith(JUnit4::class)
 class PointerInteropFilterTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     private lateinit var mockViewGroup: MockViewGroup
     private lateinit var pointerInteropFilter: PointerInteropFilter
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt
index 153318d..64511fb 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt
@@ -22,13 +22,13 @@
 import androidx.ui.core.ContextAmbient
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
-import androidx.ui.text.Typeface
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.font.font
-import androidx.ui.text.font.fontFamily
-import androidx.ui.text.font.test.R
+import androidx.compose.ui.text.Typeface
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.font.font
+import androidx.compose.ui.text.font.fontFamily
+import androidx.compose.ui.text.font.test.R
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposeViewTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposeViewTest.kt
new file mode 100644
index 0000000..c882aab
--- /dev/null
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposeViewTest.kt
@@ -0,0 +1,208 @@
+/*
+ * Copyright 2020 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.viewinterop
+
+import android.content.Context
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.ComponentActivity
+import androidx.compose.Composable
+import androidx.compose.foundation.Text
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.LifecycleRegistry
+import androidx.lifecycle.ViewTreeLifecycleOwner
+import androidx.test.espresso.Espresso
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.filters.SmallTest
+import androidx.ui.core.AbstractComposeView
+import androidx.ui.core.ComposeView
+import androidx.ui.core.Modifier
+import androidx.ui.core.testTag
+import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.assertTextEquals
+import androidx.ui.test.onNodeWithTag
+import org.hamcrest.CoreMatchers.instanceOf
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@SmallTest
+@RunWith(JUnit4::class)
+class ComposeViewTest {
+    @get:Rule
+    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+
+    @Test
+    fun composeViewComposedContent() {
+        composeTestRule.activityRule.scenario.onActivity { activity ->
+            val composeView = ComposeView(activity)
+            activity.setContentView(composeView)
+            composeView.setContent {
+                Text("Hello, World!", Modifier.testTag("text"))
+            }
+        }
+        Espresso.onView(instanceOf(ComposeView::class.java))
+            .check(matches(isDisplayed()))
+            .check { view, _ ->
+                view as ViewGroup
+                assertTrue("has children", view.childCount > 0)
+            }
+
+        onNodeWithTag("text").assertTextEquals("Hello, World!")
+    }
+
+    @Test
+    fun composeDifferentViewContent() {
+        val id = View.generateViewId()
+        composeTestRule.activityRule.scenario.onActivity { activity ->
+            val composeView = ComposeView(activity).also { it.id = id }
+            activity.setContentView(composeView)
+            composeView.setContent {
+                Text("Hello", Modifier.testTag("text"))
+            }
+        }
+
+        onNodeWithTag("text").assertTextEquals("Hello")
+
+        composeTestRule.activityRule.scenario.onActivity { activity ->
+            val composeView: ComposeView = activity.findViewById(id)
+            composeView.setContent {
+                Text("World", Modifier.testTag("text"))
+            }
+        }
+
+        onNodeWithTag("text").assertTextEquals("World")
+
+        composeTestRule.activityRule.scenario.onActivity { activity ->
+            val composeView: ComposeView = activity.findViewById(id)
+            composeView.disposeComposition()
+        }
+
+        onNodeWithTag("text").assertDoesNotExist()
+    }
+
+    @Test
+    fun disposeOnLifecycleDestroyed() {
+        val lco = TestLifecycleOwner()
+        var composeViewCapture: ComposeView? = null
+        lco.registry.handleLifecycleEvent(Lifecycle.Event.ON_RESUME)
+        composeTestRule.activityRule.scenario.onActivity { activity ->
+            val composeView = ComposeView(activity).also {
+                ViewTreeLifecycleOwner.set(it, lco)
+                composeViewCapture = it
+            }
+            activity.setContentView(composeView)
+            composeView.setContent {
+                Text("Hello", Modifier.testTag("text"))
+            }
+        }
+
+        onNodeWithTag("text").assertTextEquals("Hello")
+
+        composeTestRule.activityRule.scenario.onActivity {
+            lco.registry.handleLifecycleEvent(Lifecycle.Event.ON_DESTROY)
+        }
+
+        assertNotNull("composeViewCapture", composeViewCapture)
+        assertTrue("ComposeView.isDisposed", composeViewCapture?.isDisposed == true)
+    }
+
+    @Test
+    fun throwsOnAddView() {
+        composeTestRule.activityRule.scenario.onActivity { activity ->
+            with(TestComposeView(activity)) {
+                assertUnsupported("addView(View)") {
+                    addView(View(activity))
+                }
+
+                assertUnsupported("addView(View, int)") {
+                    addView(View(activity), 0)
+                }
+
+                assertUnsupported("addView(View, int, int)") {
+                    addView(View(activity), 0, 0)
+                }
+
+                assertUnsupported("addView(View, LayoutParams)") {
+                    addView(View(activity), ViewGroup.LayoutParams(0, 0))
+                }
+
+                assertUnsupported("addView(View, int, LayoutParams)") {
+                    addView(View(activity), 0, ViewGroup.LayoutParams(0, 0))
+                }
+
+                assertUnsupported("addViewInLayout(View, int, LayoutParams)") {
+                    addViewInLayout(View(activity), 0, ViewGroup.LayoutParams(0, 0))
+                }
+
+                assertUnsupported("addViewInLayout(View, int, LayoutParams, boolean)") {
+                    addViewInLayout(View(activity), 0, ViewGroup.LayoutParams(0, 0), false)
+                }
+            }
+        }
+    }
+}
+
+private inline fun ViewGroup.assertUnsupported(
+    testName: String,
+    test: ViewGroup.() -> Unit
+) {
+    var exception: Throwable? = null
+    try {
+        test()
+    } catch (t: Throwable) {
+        exception = t
+    }
+    assertTrue(
+        "$testName throws UnsupportedOperationException",
+        exception is UnsupportedOperationException
+    )
+}
+
+private class TestLifecycleOwner : LifecycleOwner {
+    val registry = LifecycleRegistry(this)
+
+    override fun getLifecycle(): Lifecycle = registry
+}
+
+private class TestComposeView(
+    context: Context
+) : AbstractComposeView(context) {
+
+    @Composable
+    override fun Content() {
+        // No content
+    }
+
+    public override fun addViewInLayout(child: View?, index: Int, params: LayoutParams?): Boolean {
+        return super.addViewInLayout(child, index, params)
+    }
+
+    public override fun addViewInLayout(
+        child: View?,
+        index: Int,
+        params: LayoutParams?,
+        preventRequestLayout: Boolean
+    ): Boolean {
+        return super.addViewInLayout(child, index, params, preventRequestLayout)
+    }
+}
\ No newline at end of file
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt
index 0ed1e9e..2e5b956 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt
@@ -42,7 +42,7 @@
 import androidx.compose.foundation.background
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.size
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.assertPixels
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.onNodeWithTag
@@ -65,7 +65,7 @@
 @RunWith(JUnit4::class)
 class ComposedViewTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     @Test
     fun androidViewWithResourceTest() {
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/input/InputState.kt b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/InputState.kt
similarity index 96%
rename from ui/ui-core/src/androidMain/kotlin/androidx/ui/input/InputState.kt
rename to ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/InputState.kt
index 64469cf..e8fc13b 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/input/InputState.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/InputState.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import android.view.inputmethod.ExtractedText
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/input/RecordingInputConnection.kt b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/RecordingInputConnection.kt
similarity index 99%
rename from ui/ui-core/src/androidMain/kotlin/androidx/ui/input/RecordingInputConnection.kt
rename to ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/RecordingInputConnection.kt
index b067b86..eebdad6 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/input/RecordingInputConnection.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/RecordingInputConnection.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import android.os.Bundle
 import android.os.Handler
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/input/TextInputServiceAndroid.kt b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
similarity index 98%
rename from ui/ui-core/src/androidMain/kotlin/androidx/ui/input/TextInputServiceAndroid.kt
rename to ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
index 8ce0ef6b..172194a 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/input/TextInputServiceAndroid.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import android.content.Context
 import android.text.InputType
@@ -24,7 +24,7 @@
 import android.view.inputmethod.InputConnection
 import android.view.inputmethod.InputMethodManager
 import androidx.ui.geometry.Rect
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AccessibilityIterators.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AccessibilityIterators.kt
index 66609f6..57cd487 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AccessibilityIterators.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AccessibilityIterators.kt
@@ -16,11 +16,14 @@
 
 package androidx.ui.core
 
+import android.graphics.Rect
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.ui.core.semantics.SemanticsNode
+import androidx.ui.semantics.SemanticsProperties
 import java.text.BreakIterator
 import java.util.Locale
 
-import androidx.ui.semantics.SemanticsProperties
-
 /**
  * This class contains the implementation of text segment iterators
  * for accessibility support.
@@ -255,7 +258,7 @@
         }
     }
 
-    class ParagraphTextSegmentIterator : AbstractTextSegmentIterator() {
+    class ParagraphTextSegmentIterator private constructor() : AbstractTextSegmentIterator() {
         companion object {
             private var instance: ParagraphTextSegmentIterator? = null
 
@@ -329,175 +332,203 @@
         }
     }
 
-    // TODO: This is tightly coupled with Text.kt. Need to discuss with the text team on how to
-    //  expose the necessary properties.
-    /*
-    static class LineTextSegmentIterator extends AbstractTextSegmentIterator {
-        private static LineTextSegmentIterator sLineInstance;
+    class LineTextSegmentIterator private constructor() : AbstractTextSegmentIterator() {
+        companion object {
+            private var lineInstance: LineTextSegmentIterator? = null
+            private val DirectionStart = ResolvedTextDirection.Rtl
+            private val DirectionEnd = ResolvedTextDirection.Ltr
 
-        protected static final int DIRECTION_START = -1;
-        protected static final int DIRECTION_END = 1;
-
-        protected Layout mLayout;
-
-        public static LineTextSegmentIterator getInstance() {
-            if (sLineInstance == null) {
-                sLineInstance = new LineTextSegmentIterator();
+            fun getInstance(): LineTextSegmentIterator {
+                if (lineInstance == null) {
+                    lineInstance = LineTextSegmentIterator()
+                }
+                return lineInstance as LineTextSegmentIterator
             }
-            return sLineInstance;
         }
 
-        public void initialize(Spannable text, Layout layout) {
-            mText = text.toString();
-            mLayout = layout;
+        private lateinit var layoutResult: TextLayoutResult
+
+        fun initialize(text: String, layoutResult: TextLayoutResult) {
+            this.text = text
+            this.layoutResult = layoutResult
         }
 
-        @Override
-        public int[] following(int offset) {
-            final int textLegth = mText.length();
-            if (textLegth <= 0) {
-                return null;
+        override fun following(current: Int): IntArray? {
+            val textLength = text.length
+            if (textLength <= 0) {
+                return null
             }
-            if (offset >= mText.length()) {
-                return null;
+            if (current >= text.length) {
+                return null
             }
-            int nextLine;
-            if (offset < 0) {
-                nextLine = mLayout.getLineForOffset(0);
+            val nextLine = if (current < 0) {
+                layoutResult.getLineForOffset(0)
             } else {
-                final int currentLine = mLayout.getLineForOffset(offset);
-                if (getLineEdgeIndex(currentLine, DIRECTION_START) == offset) {
-                    nextLine = currentLine;
+                val currentLine = layoutResult.getLineForOffset(current)
+                if (getLineEdgeIndex(currentLine, DirectionStart) == current) {
+                    currentLine
                 } else {
-                    nextLine = currentLine + 1;
+                    currentLine + 1
                 }
             }
-            if (nextLine >= mLayout.getLineCount()) {
-                return null;
+            if (nextLine >= layoutResult.lineCount) {
+                return null
             }
-            final int start = getLineEdgeIndex(nextLine, DIRECTION_START);
-            final int end = getLineEdgeIndex(nextLine, DIRECTION_END) + 1;
-            return getRange(start, end);
+            val start = getLineEdgeIndex(nextLine, DirectionStart)
+            val end = getLineEdgeIndex(nextLine, DirectionEnd) + 1
+            return getRange(start, end)
         }
 
-        @Override
-        public int[] preceding(int offset) {
-            final int textLegth = mText.length();
-            if (textLegth <= 0) {
-                return null;
+        override fun preceding(current: Int): IntArray? {
+            val textLength = text.length
+            if (textLength <= 0) {
+                return null
             }
-            if (offset <= 0) {
-                return null;
+            if (current <= 0) {
+                return null
             }
-            int previousLine;
-            if (offset > mText.length()) {
-                previousLine = mLayout.getLineForOffset(mText.length());
+            val previousLine = if (current > text.length) {
+                layoutResult.getLineForOffset(text.length)
             } else {
-                final int currentLine = mLayout.getLineForOffset(offset);
-                if (getLineEdgeIndex(currentLine, DIRECTION_END) + 1 == offset) {
-                    previousLine = currentLine;
+                val currentLine = layoutResult.getLineForOffset(current)
+                if (getLineEdgeIndex(currentLine, DirectionEnd) + 1 == current) {
+                    currentLine
                 } else {
-                    previousLine = currentLine - 1;
+                    currentLine - 1
                 }
             }
             if (previousLine < 0) {
-                return null;
+                return null
             }
-            final int start = getLineEdgeIndex(previousLine, DIRECTION_START);
-            final int end = getLineEdgeIndex(previousLine, DIRECTION_END) + 1;
-            return getRange(start, end);
+            val start = getLineEdgeIndex(previousLine, DirectionStart)
+            val end = getLineEdgeIndex(previousLine, DirectionEnd) + 1
+            return getRange(start, end)
         }
 
-        protected int getLineEdgeIndex(int lineNumber, int direction) {
-            final int paragraphDirection = mLayout.getParagraphDirection(lineNumber);
-            if (direction * paragraphDirection < 0) {
-                return mLayout.getLineStart(lineNumber);
+        private fun getLineEdgeIndex(lineNumber: Int, direction: ResolvedTextDirection): Int {
+            val paragraphDirection = layoutResult.getParagraphDirection(lineNumber)
+            return if (direction != paragraphDirection) {
+                layoutResult.getLineStart(lineNumber)
             } else {
-                return mLayout.getLineEnd(lineNumber) - 1;
+                layoutResult.getLineEnd(lineNumber) - 1
             }
         }
     }
 
-    static class PageTextSegmentIterator extends LineTextSegmentIterator {
-        private static PageTextSegmentIterator sPageInstance;
-
-        private TextView mView;
-
-        private final Rect mTempRect = new Rect();
-
-        public static PageTextSegmentIterator getInstance() {
-            if (sPageInstance == null) {
-                sPageInstance = new PageTextSegmentIterator();
+    // TODO(b/27505408): A11y movement by granularity page not working in edittext.
+    class PageTextSegmentIterator private constructor() : AbstractTextSegmentIterator() {
+        companion object {
+            private var pageInstance: PageTextSegmentIterator? = null
+            private val DirectionStart = ResolvedTextDirection.Rtl
+            private val DirectionEnd = ResolvedTextDirection.Ltr
+            fun getInstance(): PageTextSegmentIterator {
+                if (pageInstance == null) {
+                    pageInstance = PageTextSegmentIterator()
+                }
+                return pageInstance as PageTextSegmentIterator
             }
-            return sPageInstance;
         }
 
-        public void initialize(TextView view) {
-            super.initialize((Spannable) view.getIterableTextForAccessibility(), view.getLayout());
-            mView = view;
+        private lateinit var layoutResult: TextLayoutResult
+        private lateinit var node: SemanticsNode
+
+        private var tempRect = Rect()
+
+        fun initialize(text: String, layoutResult: TextLayoutResult, node: SemanticsNode) {
+            this.text = text
+            this.layoutResult = layoutResult
+            this.node = node
         }
 
-        @Override
-        public int[] following(int offset) {
-            final int textLength = mText.length();
+        override fun following(current: Int): IntArray? {
+            val textLength = text.length
             if (textLength <= 0) {
-                return null;
+                return null
             }
-            if (offset >= mText.length()) {
-                return null;
+            if (current >= text.length) {
+                return null
             }
-            if (!mView.getGlobalVisibleRect(mTempRect)) {
-                return null;
+            try {
+                tempRect = Rect(
+                    node.globalBounds.left.toInt(),
+                    node.globalBounds.top.toInt(),
+                    node.globalBounds.right.toInt(),
+                    node.globalBounds.bottom.toInt()
+                )
+                // TODO(b/153198816): check whether we still get this exception when R is in.
+            } catch (e: IllegalStateException) {
+                return null
             }
 
-            final int start = Math.max(0, offset);
+            val start = 0.coerceAtLeast(current)
 
-            final int currentLine = mLayout.getLineForOffset(start);
-            final int currentLineTop = mLayout.getLineTop(currentLine);
-            final int pageHeight = mTempRect.height() - mView.getTotalPaddingTop()
-            - mView.getTotalPaddingBottom();
-            final int nextPageStartY = currentLineTop + pageHeight;
-            final int lastLineTop = mLayout.getLineTop(mLayout.getLineCount() - 1);
-            final int currentPageEndLine = (nextPageStartY < lastLineTop)
-            ? mLayout.getLineForVertical(nextPageStartY) - 1 : mLayout.getLineCount() - 1;
+            val currentLine = layoutResult.getLineForOffset(start)
+            val currentLineTop = layoutResult.getLineTop(currentLine)
+            // TODO: Please help me translate the below where mView is the TextView
+            //  final int pageHeight = mTempRect.height() - mView.getTotalPaddingTop()
+            //                    - mView.getTotalPaddingBottom();
+            val pageHeight = tempRect.height()
+            val nextPageStartY = currentLineTop + pageHeight
+            val lastLineTop = layoutResult.getLineTop(layoutResult.lineCount - 1)
+            val currentPageEndLine = if (nextPageStartY < lastLineTop)
+                layoutResult.getLineForVerticalPosition(nextPageStartY) - 1
+            else layoutResult.lineCount - 1
 
-            final int end = getLineEdgeIndex(currentPageEndLine, DIRECTION_END) + 1;
+            val end = getLineEdgeIndex(currentPageEndLine, DirectionEnd) + 1
 
-            return getRange(start, end);
+            return getRange(start, end)
         }
 
-        @Override
-        public int[] preceding(int offset) {
-            final int textLength = mText.length();
+        override fun preceding(current: Int): IntArray? {
+            val textLength = text.length
             if (textLength <= 0) {
-                return null;
+                return null
             }
-            if (offset <= 0) {
-                return null;
+            if (current <= 0) {
+                return null
             }
-            if (!mView.getGlobalVisibleRect(mTempRect)) {
-                return null;
+            try {
+                tempRect = Rect(
+                    node.globalBounds.left.toInt(),
+                    node.globalBounds.top.toInt(),
+                    node.globalBounds.right.toInt(),
+                    node.globalBounds.bottom.toInt()
+                )
+                // TODO(b/153198816): check whether we still get this exception when R is in.
+            } catch (e: IllegalStateException) {
+                return null
             }
 
-            final int end = Math.min(mText.length(), offset);
+            val end = text.length.coerceAtMost(current)
 
-            final int currentLine = mLayout.getLineForOffset(end);
-            final int currentLineTop = mLayout.getLineTop(currentLine);
-            final int pageHeight = mTempRect.height() - mView.getTotalPaddingTop()
-            - mView.getTotalPaddingBottom();
-            final int previousPageEndY = currentLineTop - pageHeight;
-            int currentPageStartLine = (previousPageEndY > 0) ?
-            mLayout.getLineForVertical(previousPageEndY) : 0;
+            val currentLine = layoutResult.getLineForOffset(end)
+            val currentLineTop = layoutResult.getLineTop(currentLine)
+            // TODO: It won't work for text with padding yet.
+            //  Please help me translate the below where mView is the TextView
+            //  final int pageHeight = mTempRect.height() - mView.getTotalPaddingTop()
+            //                    - mView.getTotalPaddingBottom();
+            val pageHeight = tempRect.height()
+            val previousPageEndY = currentLineTop - pageHeight
+            var currentPageStartLine = if (previousPageEndY > 0)
+                layoutResult.getLineForVerticalPosition(previousPageEndY) else 0
             // If we're at the end of text, we're at the end of the current line rather than the
             // start of the next line, so we should move up one fewer lines than we would otherwise.
-            if (end == mText.length() && (currentPageStartLine < currentLine)) {
-                currentPageStartLine += 1;
+            if (end == text.length && (currentPageStartLine < currentLine)) {
+                currentPageStartLine += 1
             }
 
-            final int start = getLineEdgeIndex(currentPageStartLine, DIRECTION_START);
+            val start = getLineEdgeIndex(currentPageStartLine, DirectionStart)
 
-            return getRange(start, end);
+            return getRange(start, end)
+        }
+
+        private fun getLineEdgeIndex(lineNumber: Int, direction: ResolvedTextDirection): Int {
+            val paragraphDirection = layoutResult.getParagraphDirection(lineNumber)
+            return if (direction != paragraphDirection) {
+                layoutResult.getLineStart(lineNumber)
+            } else {
+                layoutResult.getLineEnd(lineNumber) - 1
+            }
         }
     }
-    */
 }
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
index 77f4b83..b532bff 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
@@ -81,11 +81,11 @@
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.CanvasHolder
-import androidx.ui.input.TextInputServiceAndroid
-import androidx.ui.input.textInputServiceFactory
+import androidx.compose.ui.text.input.TextInputServiceAndroid
+import androidx.compose.ui.text.input.textInputServiceFactory
 import androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry
 import androidx.ui.core.LayoutNode.UsageByParent
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.font.Font
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntOffset
 import androidx.ui.util.fastForEach
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
index f23f474..0eefb9d 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
@@ -48,9 +48,9 @@
 import androidx.ui.semantics.SemanticsActions
 import androidx.ui.semantics.SemanticsActions.CustomActions
 import androidx.ui.semantics.SemanticsProperties
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.length
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.length
 import androidx.ui.unit.toRect
 import androidx.ui.util.fastForEach
 
@@ -263,7 +263,7 @@
             )
         }
         val text = getIterableTextForAccessibility(semanticsNode)
-        if (text != null && text.isNotEmpty()) {
+        if (!text.isNullOrEmpty()) {
             info.setTextSelection(
                 getAccessibilitySelectionStart(semanticsNode),
                 getAccessibilitySelectionEnd(semanticsNode)
@@ -276,6 +276,13 @@
                 AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_CHARACTER or
                         AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_WORD or
                         AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_PARAGRAPH
+            // We only traverse the text when accessibilityLabel is not set.
+            if (info.contentDescription.isNullOrEmpty() &&
+                semanticsNode.config.contains(SemanticsActions.GetTextLayoutResult)) {
+                info.movementGranularities = info.movementGranularities or
+                        AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_LINE or
+                        AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_PAGE
+            }
         }
         if (Build.VERSION.SDK_INT >= 26 && !info.text.isNullOrEmpty() &&
             semanticsNode.config.contains(SemanticsActions.GetTextLayoutResult)) {
@@ -884,9 +891,9 @@
                     SemanticsProperties.Text -> {
                         // TODO(b/160184953) Add test for SemanticsProperty Text change event
                         if (newNode.config.contains(SemanticsActions.SetText)) {
-                            var oldText = (oldNode.config.getOrElse(
+                            val oldText = (oldNode.config.getOrElse(
                                 SemanticsProperties.Text) { AnnotatedString("") }).text
-                            var newText = (newNode.config.getOrElse(
+                            val newText = (newNode.config.getOrElse(
                                 SemanticsProperties.Text) { AnnotatedString("") }).text
                             var startCount = 0
                             // endCount records how many characters are the same from the end.
@@ -1111,22 +1118,52 @@
             return null
         }
         // TODO(b/160190186) Make sure locale is right in AccessibilityIterators.
+        val iterator: AccessibilityIterators.AbstractTextSegmentIterator
         @Suppress("DEPRECATION")
-        val iterator = when (granularity) {
-            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_CHARACTER ->
-                AccessibilityIterators.CharacterTextSegmentIterator.getInstance(
+        when (granularity) {
+            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_CHARACTER -> {
+                iterator = AccessibilityIterators.CharacterTextSegmentIterator.getInstance(
                     view.context.resources.configuration.locale
                 )
-            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_WORD ->
-                AccessibilityIterators.WordTextSegmentIterator.getInstance(
+                iterator.initialize(text)
+            }
+            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_WORD -> {
+                iterator = AccessibilityIterators.WordTextSegmentIterator.getInstance(
                     view.context.resources.configuration.locale
                 )
-            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_PARAGRAPH ->
-                AccessibilityIterators.ParagraphTextSegmentIterator.getInstance()
-            else ->
-                return null
+                iterator.initialize(text)
+            }
+            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_PARAGRAPH -> {
+                iterator = AccessibilityIterators.ParagraphTextSegmentIterator.getInstance()
+                iterator.initialize(text)
+            }
+            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_LINE,
+            AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_PAGE -> {
+                // Line and page granularity are only for static text or text field.
+                if (node == null || !node.config.contains(SemanticsProperties.Text) ||
+                    !node.config.contains(SemanticsActions.GetTextLayoutResult)) {
+                    return null
+                }
+                // TODO(b/157474582): Note now it only works for single Text/TextField until we
+                //  fix the merging issue.
+                val textLayoutResults = mutableListOf<TextLayoutResult>()
+                val textLayoutResult: TextLayoutResult
+                if (node.config[SemanticsActions.GetTextLayoutResult].action(textLayoutResults)) {
+                    textLayoutResult = textLayoutResults[0]
+                } else {
+                    return null
+                }
+                if (granularity == AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_LINE) {
+                    iterator = AccessibilityIterators.LineTextSegmentIterator.getInstance()
+                    iterator.initialize(text, textLayoutResult)
+                } else {
+                    iterator = AccessibilityIterators.PageTextSegmentIterator.getInstance()
+                    // TODO: the node should be text/textfield node instead of the current node.
+                    iterator.initialize(text, textLayoutResult, node)
+                }
+            }
+            else -> return null
         }
-        iterator.initialize(text)
         return iterator
     }
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ComposeView.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ComposeView.kt
new file mode 100644
index 0000000..0c34116
--- /dev/null
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ComposeView.kt
@@ -0,0 +1,238 @@
+/*
+ * Copyright 2020 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.content.Context
+import android.util.AttributeSet
+import android.view.View
+import android.view.ViewGroup
+import androidx.compose.Composable
+import androidx.compose.Composition
+import androidx.compose.Recomposer
+import androidx.compose.mutableStateOf
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleEventObserver
+import androidx.lifecycle.ViewTreeLifecycleOwner
+
+/**
+ * Base class for custom [android.view.View]s implemented using Jetpack Compose UI.
+ * Subclasses should implement the [Content] function with the appropriate content.
+ * Calls to [addView] and its variants and overloads will fail with [IllegalStateException].
+ *
+ * This [android.view.View] requires that the window it is attached to contains a
+ * [ViewTreeLifecycleOwner]. This [androidx.lifecycle.LifecycleOwner] is used to
+ * [dispose][androidx.compose.Composition.dispose] of the underlying composition
+ * when the host [Lifecycle] is destroyed, permitting the view to be attached and
+ * detached repeatedly while preserving the composition. Call [disposeComposition]
+ * to dispose of the underlying composition earlier, or if the view is never initially
+ * attached to a window. (The requirement to dispose of the composition explicitly
+ * in the event that the view is never (re)attached is temporary.)
+ */
+abstract class AbstractComposeView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0
+) : ViewGroup(context, attrs, defStyleAttr) {
+
+    private var composition: Composition? = null
+
+    /**
+     * The Jetpack Compose UI content for this view.
+     * Subclasses must implement this method to provide content. Initial composition will
+     * occur when the view becomes attached to a window or when [createComposition] is called,
+     * whichever comes first.
+     */
+    @Composable
+    abstract fun Content()
+
+    private object DisposedComposition : Composition {
+        override fun setContent(content: () -> Unit) {
+            // No-op
+        }
+
+        override fun dispose() {
+            // No-op
+        }
+    }
+
+    /**
+     * Perform initial composition for this view.
+     * Once this method is called or the view becomes attached to a window,
+     * either [disposeComposition] must be called or the [ViewTreeLifecycleOwner] must
+     * reach the [Lifecycle.State.DESTROYED] state for the composition to be cleaned up
+     * properly. (This restriction is temporary.)
+     *
+     * If this method is called when the composition has already been created it has no effect.
+     * If it is called after the composition is [disposed][disposeComposition] it will throw
+     * [IllegalStateException].
+     */
+    fun createComposition() {
+        check(composition !== DisposedComposition) {
+            "Cannot create composition - composition was already disposed"
+        }
+        ensureCompositionCreated()
+    }
+
+    private var creatingComposition = false
+    private fun checkAddView() {
+        if (!creatingComposition) {
+            throw UnsupportedOperationException("Cannot add views to " +
+                    "${javaClass.simpleName}; only Compose content is supported")
+        }
+    }
+
+    private fun ensureCompositionCreated() {
+        if (composition == null) {
+            // TODO: Cannot use try/catch here until b/161894067 is fixed.
+            creatingComposition = true
+            composition = setContent(Recomposer.current()) {
+                Content()
+            }
+            creatingComposition = false
+        }
+    }
+
+    override fun addView(child: View?) {
+        checkAddView()
+        super.addView(child)
+    }
+
+    override fun addView(child: View?, index: Int) {
+        checkAddView()
+        super.addView(child, index)
+    }
+
+    override fun addView(child: View?, width: Int, height: Int) {
+        checkAddView()
+        super.addView(child, width, height)
+    }
+
+    override fun addView(child: View?, params: LayoutParams?) {
+        checkAddView()
+        super.addView(child, params)
+    }
+
+    override fun addView(child: View?, index: Int, params: LayoutParams?) {
+        checkAddView()
+        super.addView(child, index, params)
+    }
+
+    override fun addViewInLayout(child: View?, index: Int, params: LayoutParams?): Boolean {
+        checkAddView()
+        return super.addViewInLayout(child, index, params)
+    }
+
+    override fun addViewInLayout(
+        child: View?,
+        index: Int,
+        params: LayoutParams?,
+        preventRequestLayout: Boolean
+    ): Boolean {
+        checkAddView()
+        return super.addViewInLayout(child, index, params, preventRequestLayout)
+    }
+
+    /**
+     * Dispose of the underlying composition.
+     * The result of this call is permanent; once disposed a ComposeView cannot be used again
+     * and will remain empty.
+     */
+    fun disposeComposition() {
+        composition?.dispose()
+        composition = DisposedComposition
+    }
+
+    /**
+     * `true` if [disposeComposition] has been called, either explicitly or by the host window's
+     * [ViewTreeLifecycleOwner] being destroyed.
+     */
+    val isDisposed: Boolean get() = composition === DisposedComposition
+
+    private var lastLifecycle: Lifecycle? = null
+
+    private val lifecycleObserver = LifecycleEventObserver { _, event ->
+        if (event == Lifecycle.Event.ON_DESTROY) {
+            disposeComposition()
+        }
+    }
+
+    override fun onAttachedToWindow() {
+        super.onAttachedToWindow()
+        val newLifecycleOwner = checkNotNull(ViewTreeLifecycleOwner.get(this)) {
+            "ViewTreeLifecycleOwner is not present in this window. Use ComponentActivity, " +
+                    "FragmentActivity or AppCompatActivity to configure ViewTreeLifecycleOwner " +
+                    "automatically, or call ViewTreeLifecycleOwner.set() for this View or an " +
+                    "ancestor in the same window."
+        }
+        val newLifecycle = newLifecycleOwner.lifecycle
+        if (newLifecycle !== lastLifecycle) {
+            lastLifecycle?.removeObserver(lifecycleObserver)
+            lastLifecycle = newLifecycle
+            newLifecycle.addObserver(lifecycleObserver)
+        }
+        ensureCompositionCreated()
+    }
+
+    final override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
+        val child = checkNotNull(getChildAt(0)) { "Composition view not present for measure!" }
+        child.measure(widthMeasureSpec, heightMeasureSpec)
+        setMeasuredDimension(child.measuredWidthAndState, child.measuredHeightAndState)
+    }
+
+    final override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
+        val child = checkNotNull(getChildAt(0)) { "Composition view not present for layout!" }
+        child.layout(0, 0, right - left, bottom - top)
+    }
+}
+
+/**
+ * A [android.view.View] that can host Jetpack Compose UI content.
+ * Use [setContent] to supply the content composable function for the view.
+ *
+ * This [android.view.View] requires that the window it is attached to contains a
+ * [ViewTreeLifecycleOwner]. This [androidx.lifecycle.LifecycleOwner] is used to
+ * [dispose][androidx.compose.Composition.dispose] of the underlying composition
+ * when the host [Lifecycle] is destroyed, permitting the view to be attached and
+ * detached repeatedly while preserving the composition. Call [disposeComposition]
+ * to dispose of the underlying composition earlier, or if the view is never initially
+ * attached to a window. (The requirement to dispose of the composition explicitly
+ * in the event that the view is never (re)attached is temporary.)
+ */
+class ComposeView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0
+) : AbstractComposeView(context, attrs, defStyleAttr) {
+
+    @Suppress("RemoveExplicitTypeArguments")
+    private val content = mutableStateOf<@Composable () -> Unit>({})
+
+    @Composable
+    override fun Content() {
+        content.value()
+    }
+
+    /**
+     * Set the Jetpack Compose UI content for this view.
+     * Initial composition will occur when the view becomes attached to a window or when
+     * [createComposition] is called, whichever comes first.
+     */
+    fun setContent(content: @Composable () -> Unit) {
+        this.content.value = content
+    }
+}
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/clipboard/AndroidClipboardManager.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/clipboard/AndroidClipboardManager.kt
index add5b41..18e9905 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/clipboard/AndroidClipboardManager.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/clipboard/AndroidClipboardManager.kt
@@ -18,7 +18,7 @@
 
 import android.content.ClipData
 import android.content.Context
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 
 private const val PLAIN_TEXT_LABEL = "plain text"
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/text/AndroidFontResourceLoader.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/text/AndroidFontResourceLoader.kt
index 8796454..ea89e8d 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/text/AndroidFontResourceLoader.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/text/AndroidFontResourceLoader.kt
@@ -19,8 +19,8 @@
 import android.content.Context
 import android.graphics.Typeface
 import androidx.core.content.res.ResourcesCompat
-import androidx.ui.text.font.Font
-import androidx.ui.text.font.ResourceFont
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.ResourceFont
 
 /**
  * Android implementation for [Font.ResourceLoader]
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt
index 029768f..0320fc9 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt
@@ -21,13 +21,13 @@
 import androidx.annotation.GuardedBy
 import androidx.compose.Composable
 import androidx.ui.core.ContextAmbient
-import androidx.ui.text.Typeface
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontListFontFamily
-import androidx.ui.text.font.LoadedFontFamily
-import androidx.ui.text.font.ResourceFont
-import androidx.ui.text.font.SystemFontFamily
-import androidx.ui.text.platform.typefaceFromFontFamily
+import androidx.compose.ui.text.Typeface
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontListFontFamily
+import androidx.compose.ui.text.font.LoadedFontFamily
+import androidx.compose.ui.text.font.ResourceFont
+import androidx.compose.ui.text.font.SystemFontFamily
+import androidx.compose.ui.text.platform.typefaceFromFontFamily
 import androidx.ui.util.fastForEach
 
 private val cacheLock = Object()
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt
index 039bdf3..a61ddab 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt
@@ -24,9 +24,9 @@
 import androidx.ui.core.clipboard.ClipboardManager
 import androidx.ui.core.hapticfeedback.HapticFeedback
 import androidx.ui.core.texttoolbar.TextToolbar
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.TextInputService
 import androidx.ui.platform.UriHandler
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.font.Font
 import androidx.ui.unit.Density
 import kotlin.coroutines.CoroutineContext
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InspectableParameter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InspectableParameter.kt
new file mode 100644
index 0000000..886b1b8
--- /dev/null
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InspectableParameter.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2020 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
+
+/**
+ * A compose parameter that is inspectable by tools. It gives access to private parts of a
+ * parameter value.
+ */
+interface InspectableParameter {
+
+    /**
+     * The elements of a compose parameter instance.
+     */
+    val inspectableElements: Sequence<ParameterElement>
+
+    /**
+     * Use this name as the parameter name shown in tools if this is a sub element of another
+     * [InspectableParameter] specified with an empty name. Example: a modifier with multiple
+     * elements.
+     */
+    val nameFallback: String?
+        get() = null
+
+    /**
+     * Use this value as a representation of the overall value of this parameter.
+     */
+    val valueOverride: Any?
+        get() = null
+}
+
+/**
+ * A parameter element describes the elements of a compose parameter instance.
+ * The [name] typically refers to a (possibly private) property name with its corresponding [value].
+ */
+data class ParameterElement(val name: String, val value: Any?)
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt
index b9d76cc..4c7ab3c 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt
@@ -24,9 +24,9 @@
 import androidx.ui.core.semantics.SemanticsOwner
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.graphics.Canvas
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.TextInputService
 import androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.font.Font
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntOffset
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt
index bcf44ec..a53284e 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt
@@ -70,8 +70,6 @@
  * The dropdown popup is positioned below its parent, using the [dropDownAlignment] and [offset].
  * The dropdown popup is visible as long as it is part of the composition hierarchy.
  *
- * @sample androidx.ui.core.samples.DropdownPopupSample
- *
  * @param dropDownAlignment The start or end alignment below the parent.
  * @param offset An offset from the original aligned position of the popup.
  * @param isFocusable Indicates if the popup can grab the focus.
@@ -80,7 +78,7 @@
  * @param children The content to be displayed inside the popup.
  */
 @Composable
-fun DropdownPopup(
+internal fun DropdownPopup(
     dropDownAlignment: DropDownAlignment = DropDownAlignment.Start,
     offset: IntOffset = IntOffset(0, 0),
     isFocusable: Boolean = false,
@@ -168,7 +166,7 @@
  * The [DropdownPopup] is aligned below its parent relative to its left or right corner.
  * [DropDownAlignment] is used to specify how should [DropdownPopup] be aligned.
  */
-enum class DropDownAlignment {
+internal enum class DropDownAlignment {
     Start,
     End
 }
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/clipboard/ClipboardManager.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/clipboard/ClipboardManager.kt
index 7608444..63414ae 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/clipboard/ClipboardManager.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/clipboard/ClipboardManager.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.clipboard
 
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 
 /**
  * Interface for managing the Clipboard.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selectable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selectable.kt
index f585a98..98bbf1c1 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selectable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selectable.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.geometry.Rect
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import androidx.ui.geometry.Offset
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt
index 860b854..0e1c3be 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt
@@ -17,8 +17,8 @@
 package androidx.ui.core.selection
 
 import androidx.compose.Immutable
-import androidx.ui.text.TextRange
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.style.ResolvedTextDirection
 
 /**
  * Information about the current Selection.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt
index ec1898b..d36932f 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.gesture.longPressDragGestureFilter
 import androidx.ui.core.gesture.tapGestureFilter
 import androidx.ui.core.onPositioned
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 
 /**
  * Default SelectionContainer to be used in order to make composables selectable by default.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt
index d61fd6a..fe1b48f 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt
@@ -26,8 +26,8 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.drawscope.DrawScope
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt
index 2a40746..16058a1 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt
@@ -31,8 +31,8 @@
 import androidx.ui.core.hasFixedHeight
 import androidx.ui.core.hasFixedWidth
 import androidx.ui.geometry.Offset
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntOffset
 import androidx.ui.unit.IntSize
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt
index 51f5a9e..7d54b9f 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt
@@ -30,11 +30,11 @@
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.core.texttoolbar.TextToolbarStatus
 import androidx.ui.geometry.Rect
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.length
-import androidx.ui.text.subSequence
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.length
+import androidx.compose.ui.text.subSequence
 import androidx.ui.geometry.Offset
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 import kotlin.math.max
 import kotlin.math.min
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
index 98c1c85..2b9abb5 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.semantics
 
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
 import kotlin.reflect.KProperty
 
 /**
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/input/RecordingInputConnectionUpdateTextFieldValueTest.kt b/ui/ui-core/src/test/kotlin/androidx/compose/ui/text/input/RecordingInputConnectionUpdateTextFieldValueTest.kt
similarity index 97%
rename from ui/ui-core/src/test/kotlin/androidx/ui/input/RecordingInputConnectionUpdateTextFieldValueTest.kt
rename to ui/ui-core/src/test/kotlin/androidx/compose/ui/text/input/RecordingInputConnectionUpdateTextFieldValueTest.kt
index 9962e57..481b8c2 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/input/RecordingInputConnectionUpdateTextFieldValueTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/compose/ui/text/input/RecordingInputConnectionUpdateTextFieldValueTest.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import android.view.View
 import android.view.inputmethod.ExtractedText
 import android.view.inputmethod.InputConnection
 import android.view.inputmethod.InputMethodManager
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
 import com.nhaarman.mockitokotlin2.eq
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/input/TextInputServiceAndroidTest.kt b/ui/ui-core/src/test/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroidTest.kt
similarity index 99%
rename from ui/ui-core/src/test/kotlin/androidx/ui/input/TextInputServiceAndroidTest.kt
rename to ui/ui-core/src/test/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroidTest.kt
index 200bf5b..b004c8c 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/input/TextInputServiceAndroidTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroidTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import android.content.Context
 import android.text.InputType
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerDragTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerDragTest.kt
index 7b54831..83fedf9 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerDragTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerDragTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt
index 0cc31cb..473a7ce 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerLongPressDragTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerTest.kt
index f5a33f9..cf282f9 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionManagerTest.kt
@@ -23,10 +23,10 @@
 import androidx.ui.core.hapticfeedback.HapticFeedbackType
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.geometry.Rect
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.length
-import androidx.ui.text.style.ResolvedTextDirection
-import androidx.ui.text.subSequence
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.length
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.subSequence
 import androidx.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionTest.kt
index 00f0ac4..42d966e 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionTest.kt
@@ -17,8 +17,8 @@
 package androidx.ui.core.selection
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import org.junit.Test
diff --git a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt
index 66577e8..976bba3 100644
--- a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt
+++ b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt
@@ -27,6 +27,7 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
 import androidx.ui.graphics.asImageAsset
+import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
@@ -39,11 +40,11 @@
 import androidx.ui.material.Scaffold
 import androidx.ui.material.Slider
 import androidx.ui.material.TopAppBar
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.SpanStyle
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
 import androidx.ui.unit.dp
 import androidx.ui.unit.sp
-import androidx.ui.text.font.fontFamily
+import androidx.compose.ui.text.font.fontFamily
 import androidx.ui.desktop.font
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.background
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt
index 2b8188a..466c594 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt
@@ -29,8 +29,8 @@
 import androidx.ui.graphics.DesktopPath
 import androidx.ui.graphics.DesktopRadialGradientShader
 import androidx.ui.graphics.GraphicsFactory
-import androidx.ui.text.platform.paragraphActualFactory
-import androidx.ui.text.platform.paragraphIntrinsicsActualFactory
+import androidx.compose.ui.text.platform.paragraphActualFactory
+import androidx.compose.ui.text.platform.paragraphIntrinsicsActualFactory
 import org.jetbrains.skija.Library
 
 /**
@@ -53,7 +53,7 @@
     ComposeInit
 }
 
-@OptIn(androidx.ui.text.platform.InternalPlatformTextApi::class, InternalComposeApi::class)
+@OptIn(androidx.compose.ui.text.android.InternalPlatformTextApi::class, InternalComposeApi::class)
 private object ComposeInit {
     init {
         Library.load("/", "skija")
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopFont.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopFont.kt
index 96973d6..4aca644 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopFont.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopFont.kt
@@ -15,11 +15,11 @@
 */
 package androidx.ui.desktop
 
-import androidx.ui.text.font.Font as uiFont
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontListFontFamily
+import androidx.compose.ui.text.font.Font as uiFont
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontListFontFamily
 import org.jetbrains.skija.FontMgr
 import org.jetbrains.skija.Typeface
 import org.jetbrains.skija.paragraph.FontCollection
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraph.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraph.kt
index 16b1710..96a839e 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraph.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraph.kt
@@ -21,11 +21,11 @@
 import androidx.ui.graphics.DesktopPath
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.toAndroidX
-import androidx.ui.text.Paragraph
-import androidx.ui.text.ParagraphConstraints
-import androidx.ui.text.ParagraphIntrinsics
-import androidx.ui.text.TextRange
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.Paragraph
+import androidx.compose.ui.text.ParagraphConstraints
+import androidx.compose.ui.text.ParagraphIntrinsics
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import org.jetbrains.skija.paragraph.LineMetrics
 import org.jetbrains.skija.paragraph.RectHeightMode
 import org.jetbrains.skija.paragraph.RectWidthMode
@@ -156,6 +156,11 @@
         lineMetricsForOffset(offset)?.run { lineNumber.toInt() }
             ?: 0
 
+    override fun getLineForVerticalPosition(vertical: Float): Int {
+        println("Paragraph.getLineForVerticalPosition $vertical")
+        return 0
+    }
+
     override fun getHorizontalPosition(offset: Int, usePrimaryDirection: Boolean): Float {
         val metrics = lineMetricsForOffset(offset)
 
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt
index a17b297..6c69c12 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt
@@ -17,13 +17,13 @@
 
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.toArgb
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.ParagraphIntrinsics
-import androidx.ui.text.Placeholder
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.SpanStyleRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.ParagraphIntrinsics
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.SpanStyleRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import kotlin.math.ceil
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopPlatformInput.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopPlatformInput.kt
index 7d717dc..73d6efb 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopPlatformInput.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopPlatformInput.kt
@@ -15,14 +15,14 @@
  */
 package androidx.ui.desktop
 
-import androidx.ui.input.BackspaceKeyEditOp
-import androidx.ui.input.CommitTextEditOp
-import androidx.ui.input.EditOperation
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.MoveCursorEditOp
-import androidx.ui.input.PlatformTextInputService
+import androidx.compose.ui.text.input.BackspaceKeyEditOp
+import androidx.compose.ui.text.input.CommitTextEditOp
+import androidx.compose.ui.text.input.EditOperation
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.MoveCursorEditOp
+import androidx.compose.ui.text.input.PlatformTextInputService
 import androidx.ui.geometry.Rect
 
 import java.awt.event.KeyEvent
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/SkiaWindow.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/SkiaWindow.kt
index 115bf1c..babe747 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/SkiaWindow.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/SkiaWindow.kt
@@ -17,8 +17,8 @@
 
 import androidx.compose.animation.core.AnimationClockObserver
 import androidx.compose.runtime.dispatch.DesktopUiDispatcher
-import androidx.ui.text.platform.paragraphActualFactory
-import androidx.ui.text.platform.paragraphIntrinsicsActualFactory
+import androidx.compose.ui.text.platform.paragraphActualFactory
+import androidx.compose.ui.text.platform.paragraphIntrinsicsActualFactory
 import com.jogamp.opengl.GL
 import com.jogamp.opengl.GLAutoDrawable
 import com.jogamp.opengl.GLCapabilities
@@ -103,7 +103,7 @@
 }
 
 class Dialog : JDialog, SkiaFrame {
-    @OptIn(androidx.ui.text.platform.InternalPlatformTextApi::class)
+    @OptIn(androidx.compose.ui.text.android.InternalPlatformTextApi::class)
     companion object {
         init {
             Library.load("/", "skija")
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt
index 972e74a..cacd0b8 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt
@@ -34,7 +34,7 @@
 import androidx.ui.desktop.DesktopPlatformInput
 import androidx.ui.desktop.FontLoader
 import androidx.ui.desktop.initCompose
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.TextInputService
 import org.jetbrains.skija.Canvas
 import org.jetbrains.skija.Surface
 
@@ -51,7 +51,7 @@
         androidCanvas = android.graphics.Canvas(canvas)
     }
 
-    @OptIn(androidx.ui.text.platform.InternalPlatformTextApi::class)
+    @OptIn(androidx.compose.ui.text.android.InternalPlatformTextApi::class)
     companion object {
         init {
             initCompose()
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt
index bcdc970..8b25fec 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt
@@ -37,7 +37,7 @@
 import androidx.ui.desktop.DesktopSelectionContainer
 import androidx.ui.desktop.FontLoader
 import androidx.ui.desktop.LayoutScopeGlobal
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.TextInputService
 import androidx.ui.unit.IntOffset
 import com.jogamp.opengl.awt.GLCanvas
 import org.jetbrains.skija.Canvas
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
index ec6154c..6049651 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
@@ -30,9 +30,9 @@
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.ui.material.Scaffold
 import androidx.ui.material.TopAppBar
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.font.fontFamily
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.font.fontFamily
 import androidx.ui.unit.dp
 import androidx.ui.unit.sp
 import org.junit.Rule
diff --git a/ui/ui-foundation/api/0.1.0-dev16.txt b/ui/ui-foundation/api/0.1.0-dev16.txt
index d023b01..ca739a2 100644
--- a/ui/ui-foundation/api/0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/0.1.0-dev16.txt
@@ -13,7 +13,7 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-hrKMqGY(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
   @androidx.compose.Immutable public final class Border {
@@ -46,7 +46,7 @@
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
@@ -197,10 +197,10 @@
   }
 
   public final class TextKt {
-    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-GyNEQHM(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static androidx.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Text-TzwKYGo(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-ofH8Il4(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -282,8 +282,8 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyItemsKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index d023b01..ca739a2 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -13,7 +13,7 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-hrKMqGY(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
   @androidx.compose.Immutable public final class Border {
@@ -46,7 +46,7 @@
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
@@ -197,10 +197,10 @@
   }
 
   public final class TextKt {
-    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-GyNEQHM(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static androidx.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Text-TzwKYGo(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-ofH8Il4(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -282,8 +282,8 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyItemsKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
index d023b01..ca739a2 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
@@ -13,7 +13,7 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-hrKMqGY(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
   @androidx.compose.Immutable public final class Border {
@@ -46,7 +46,7 @@
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
@@ -197,10 +197,10 @@
   }
 
   public final class TextKt {
-    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-GyNEQHM(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static androidx.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Text-TzwKYGo(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-ofH8Il4(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -282,8 +282,8 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyItemsKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index d023b01..ca739a2 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -13,7 +13,7 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-hrKMqGY(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
   @androidx.compose.Immutable public final class Border {
@@ -46,7 +46,7 @@
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
@@ -197,10 +197,10 @@
   }
 
   public final class TextKt {
-    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-GyNEQHM(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static androidx.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Text-TzwKYGo(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-ofH8Il4(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -282,8 +282,8 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyItemsKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev16.txt b/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
index d023b01..ca739a2 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
@@ -13,7 +13,7 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-hrKMqGY(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
   @androidx.compose.Immutable public final class Border {
@@ -46,7 +46,7 @@
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
@@ -197,10 +197,10 @@
   }
 
   public final class TextKt {
-    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-GyNEQHM(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static androidx.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Text-TzwKYGo(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-ofH8Il4(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -282,8 +282,8 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyItemsKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index d023b01..ca739a2 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -13,7 +13,7 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-63P0bO0(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.ui.text.TextStyle textStyle = currentTextStyle(), androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-hrKMqGY(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
   @androidx.compose.Immutable public final class Border {
@@ -46,7 +46,7 @@
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
@@ -197,10 +197,10 @@
   }
 
   public final class TextKt {
-    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-0VOI5ok(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-GyNEQHM(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.ui.text.font.FontStyle? fontStyle = null, androidx.ui.text.font.FontWeight? fontWeight = null, androidx.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.ui.text.style.TextDecoration? textDecoration = null, androidx.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static androidx.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Text-TzwKYGo(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-ofH8Il4(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -282,8 +282,8 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyItemsKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
index af930d2..d086c85 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
@@ -24,10 +24,10 @@
 import androidx.ui.core.gesture.longPressGestureFilter
 import androidx.compose.foundation.ClickableText
 import androidx.compose.foundation.Text
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextStyle
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.TextOverflow
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt
index ff14aa0..c7cc5fc 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt
@@ -33,7 +33,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.unit.dp
 
 @Sampled
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt
index 0e5699a..e428b8e 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.gestures.scrollable
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.dp
 import androidx.ui.unit.sp
 import kotlin.math.roundToInt
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt
index 59d6a20..4b4f1f2 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt
@@ -23,7 +23,7 @@
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.Text
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTextTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTextTest.kt
index 3a3c5c2..9917cf0 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTextTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTextTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.test.performClick
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnIdle
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.mock
 import com.nhaarman.mockitokotlin2.times
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
index f49e55f..021c327 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
@@ -27,7 +27,7 @@
 import androidx.ui.test.assertCountEquals
 import androidx.ui.test.assertIsInMutuallyExclusiveGroup
 import androidx.ui.test.assertIsSelected
-import androidx.ui.test.assertIsUnselected
+import androidx.ui.test.assertIsNotSelected
 import androidx.ui.test.center
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.performClick
@@ -83,11 +83,11 @@
         }
 
         onNode(isInMutuallyExclusiveGroup())
-            .assertIsUnselected()
+            .assertIsNotSelected()
             .performClick()
             .assertIsSelected()
             .performClick()
-            .assertIsUnselected()
+            .assertIsNotSelected()
     }
 
     @Test
@@ -103,9 +103,9 @@
         }
 
         onNode(isInMutuallyExclusiveGroup())
-            .assertIsUnselected()
+            .assertIsNotSelected()
             .performClick()
-            .assertIsUnselected()
+            .assertIsNotSelected()
     }
 
     @Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt
index 7f71bc4..4cb556f 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt
@@ -21,15 +21,15 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.TextInputServiceAmbient
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.TextInputService
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.hasInputMethodsSupport
 import androidx.ui.test.onNode
 import androidx.ui.test.performClick
 import androidx.ui.test.runOnIdle
-import androidx.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.SoftwareKeyboardController
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.mock
 import com.nhaarman.mockitokotlin2.times
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt
index 0f3a4a5..1914071 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.test.assertPixels
@@ -34,7 +34,7 @@
 import androidx.ui.test.onNode
 import androidx.ui.test.hasInputMethodsSupport
 import androidx.ui.test.waitForIdle
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt
index eadbce51..3f06c08 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt
@@ -22,7 +22,7 @@
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.focus.FocusModifier
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.width
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
index 8a8078b..0487fb7 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
@@ -21,14 +21,14 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.TextInputServiceAmbient
 import androidx.ui.geometry.Offset
-import androidx.ui.input.CommitTextEditOp
-import androidx.ui.input.DeleteSurroundingTextEditOp
-import androidx.ui.input.EditOperation
-import androidx.ui.input.FinishComposingTextEditOp
-import androidx.ui.input.SetComposingRegionEditOp
-import androidx.ui.input.SetComposingTextEditOp
-import androidx.ui.input.SetSelectionEditOp
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.CommitTextEditOp
+import androidx.compose.ui.text.input.DeleteSurroundingTextEditOp
+import androidx.compose.ui.text.input.EditOperation
+import androidx.compose.ui.text.input.FinishComposingTextEditOp
+import androidx.compose.ui.text.input.SetComposingRegionEditOp
+import androidx.compose.ui.text.input.SetComposingTextEditOp
+import androidx.compose.ui.text.input.SetSelectionEditOp
+import androidx.compose.ui.text.input.TextInputService
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.performGesture
 import androidx.ui.test.onNode
@@ -36,7 +36,7 @@
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.click
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
@@ -59,7 +59,7 @@
     @get:Rule
     val composeTestRule = createComposeRule()
 
-    val onValueChange: (androidx.ui.input.TextFieldValue) -> Unit = mock()
+    val onValueChange: (androidx.compose.ui.text.input.TextFieldValue) -> Unit = mock()
 
     lateinit var onEditCommandCallback: (List<EditOperation>) -> Unit
 
@@ -76,7 +76,7 @@
                 TextInputServiceAmbient provides textInputService
             ) {
                 val state = state {
-                    androidx.ui.input.TextFieldValue(
+                    androidx.compose.ui.text.input.TextFieldValue(
                         "abcde",
                         TextRange.Zero
                     )
@@ -126,7 +126,7 @@
         runOnIdle {
             verify(onValueChange, times(1))
                 .invoke(eq(
-                    androidx.ui.input.TextFieldValue(
+                    androidx.compose.ui.text.input.TextFieldValue(
                         "ABCDEabcde",
                         TextRange(5)
                     )
@@ -139,7 +139,8 @@
         // Composition change will be reported as a change
         performEditOperation(SetComposingRegionEditOp(0, 5))
         runOnIdle {
-            verify(onValueChange, times(1)).invoke(eq(androidx.ui.input.TextFieldValue(
+            verify(onValueChange, times(1)).invoke(eq(
+                androidx.compose.ui.text.input.TextFieldValue(
                 text = "abcde",
                 selection = TextRange.Zero,
                 composition = TextRange(0, 5)
@@ -154,7 +155,7 @@
         runOnIdle {
             verify(onValueChange, times(1))
                 .invoke(eq(
-                    androidx.ui.input.TextFieldValue(
+                    androidx.compose.ui.text.input.TextFieldValue(
                         text = "ABCDEabcde",
                         selection = TextRange(5),
                         composition = TextRange(0, 5)
@@ -169,7 +170,7 @@
         performEditOperation(SetSelectionEditOp(1, 1))
         runOnIdle {
             verify(onValueChange, times(1)).invoke(eq(
-                androidx.ui.input.TextFieldValue(
+                androidx.compose.ui.text.input.TextFieldValue(
                     "abcde",
                     TextRange(1)
                 )
@@ -181,7 +182,7 @@
     fun clearComposition_onValueChange_call_once() {
         val composingText = "ABCDE"
         performEditOperation(SetComposingTextEditOp(composingText, 1))
-        val expectedTextFieldValue = androidx.ui.input.TextFieldValue(
+        val expectedTextFieldValue = androidx.compose.ui.text.input.TextFieldValue(
             text = "ABCDEabcde",
             selection = TextRange(5),
             composition = TextRange(0, composingText.length)
@@ -205,7 +206,7 @@
         performEditOperation(DeleteSurroundingTextEditOp(0, 1))
         runOnIdle {
             verify(onValueChange, times(1)).invoke(eq(
-                androidx.ui.input.TextFieldValue(
+                androidx.compose.ui.text.input.TextFieldValue(
                     "bcde",
                     TextRange.Zero
                 )
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
index b116f74e..9202523 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
@@ -23,7 +23,15 @@
 import androidx.compose.Composable
 import androidx.compose.MutableState
 import androidx.compose.Providers
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.preferredSize
+import androidx.compose.foundation.layout.preferredWidth
+import androidx.compose.getValue
+import androidx.compose.setValue
+import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.state
+import androidx.compose.ui.text.AnnotatedString
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
@@ -35,18 +43,23 @@
 import androidx.ui.core.testTag
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
-import androidx.ui.input.CommitTextEditOp
-import androidx.ui.input.EditOperation
-import androidx.ui.input.ImeAction
-import androidx.ui.input.TextInputService
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.preferredSize
-import androidx.compose.foundation.layout.preferredWidth
-import androidx.compose.runtime.savedinstancestate.savedInstanceState
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.input.CommitTextEditOp
+import androidx.compose.ui.text.input.EditOperation
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue.Companion.Saver
+import androidx.compose.ui.text.input.TextInputService
+import androidx.compose.ui.text.length
+import androidx.ui.semantics.SemanticsActions
+import androidx.ui.semantics.SemanticsProperties
+import androidx.ui.test.SemanticsMatcher
 import androidx.ui.test.StateRestorationTester
 import androidx.ui.test.assert
+import androidx.ui.test.assertHasClickAction
 import androidx.ui.test.assertShape
+import androidx.ui.test.assertTextEquals
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.performClick
@@ -54,9 +67,10 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.hasImeAction
 import androidx.ui.test.hasInputMethodsSupport
+import androidx.ui.test.isFocused
+import androidx.ui.test.isNotFocused
+import androidx.ui.test.performSemanticsAction
 import androidx.ui.test.runOnIdle
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
 import androidx.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
@@ -89,7 +103,7 @@
 
         lateinit var focusModifier: FocusModifier
         composeTestRule.setContent {
-            val state = state { androidx.ui.input.TextFieldValue("") }
+            val state = state { TextFieldValue("") }
             Providers(
                 TextInputServiceAmbient provides inputService
             ) {
@@ -112,7 +126,7 @@
 
     @Composable
     private fun TextFieldApp() {
-        val state = state { androidx.ui.input.TextFieldValue("") }
+        val state = state { TextFieldValue("") }
         BaseTextField(
             value = state.value,
             modifier = Modifier.fillMaxSize(),
@@ -171,7 +185,7 @@
         }
 
         runOnIdle {
-            val stateCaptor = argumentCaptor<androidx.ui.input.TextFieldValue>()
+            val stateCaptor = argumentCaptor<TextFieldValue>()
             verify(textInputService, atLeastOnce())
                 .onStateUpdated(eq(inputSessionToken), stateCaptor.capture())
 
@@ -182,7 +196,7 @@
 
     @Composable
     private fun OnlyDigitsApp() {
-        val state = state { androidx.ui.input.TextFieldValue("") }
+        val state = state { TextFieldValue("") }
         BaseTextField(
             value = state.value,
             modifier = Modifier.fillMaxSize(),
@@ -243,7 +257,7 @@
         }
 
         runOnIdle {
-            val stateCaptor = argumentCaptor<androidx.ui.input.TextFieldValue>()
+            val stateCaptor = argumentCaptor<TextFieldValue>()
             verify(textInputService, atLeastOnce())
                 .onStateUpdated(eq(inputSessionToken), stateCaptor.capture())
 
@@ -266,7 +280,7 @@
             Providers(
                 TextInputServiceAmbient provides textInputService
             ) {
-                val state = state { androidx.ui.input.TextFieldValue("") }
+                val state = state { TextFieldValue("") }
                 BaseTextField(
                     value = state.value,
                     modifier = Modifier.fillMaxSize(),
@@ -323,7 +337,7 @@
         composeTestRule.setContent {
             Box {
                 BaseTextField(
-                    value = androidx.ui.input.TextFieldValue(),
+                    value = TextFieldValue(),
                     onValueChange = {},
                     modifier = Modifier.onPositioned {
                         size = it.size.width
@@ -344,7 +358,7 @@
         composeTestRule.setContent {
             Box {
                 BaseTextField(
-                    value = androidx.ui.input.TextFieldValue(),
+                    value = TextFieldValue(),
                     onValueChange = {},
                     modifier = Modifier
                         .preferredWidth(textFieldWidth)
@@ -369,7 +383,7 @@
             Box(Modifier.preferredSize(parentSize)) {
                 Row {
                     BaseTextField(
-                        value = androidx.ui.input.TextFieldValue(),
+                        value = TextFieldValue(),
                         onValueChange = {},
                         modifier = Modifier
                             .weight(1f)
@@ -389,17 +403,17 @@
 
     @Test
     fun textFieldValue_saverRestoresState() {
-        var state: MutableState<androidx.ui.input.TextFieldValue>? = null
+        var state: MutableState<TextFieldValue>? = null
 
         val restorationTester = StateRestorationTester(composeTestRule)
         restorationTester.setContent {
-            state = savedInstanceState(saver = androidx.ui.input.TextFieldValue.Saver) {
-                androidx.ui.input.TextFieldValue()
+            state = savedInstanceState(saver = Saver) {
+                TextFieldValue()
             }
         }
 
         runOnIdle {
-            state!!.value = androidx.ui.input.TextFieldValue("test", TextRange(1, 2))
+            state!!.value = TextFieldValue("test", TextRange(1, 2))
 
             // we null it to ensure recomposition happened
             state = null
@@ -409,7 +423,7 @@
 
         runOnIdle {
             assertThat(state!!.value).isEqualTo(
-                androidx.ui.input.TextFieldValue("test", TextRange(1, 2))
+                TextFieldValue("test", TextRange(1, 2))
             )
         }
     }
@@ -419,7 +433,7 @@
     fun textFieldNotFocused_cursorNotRendered() {
         composeTestRule.setContent {
             BaseTextField(
-                value = androidx.ui.input.TextFieldValue(),
+                value = TextFieldValue(),
                 onValueChange = {},
                 textColor = Color.White,
                 modifier = Modifier.preferredSize(10.dp, 20.dp).background(color = Color.White),
@@ -443,21 +457,79 @@
         composeTestRule.setContent {
             BaseTextField(
                 modifier = Modifier.testTag("textField"),
-                value = androidx.ui.input.TextFieldValue(),
+                value = TextFieldValue(),
                 onValueChange = {}
             )
         }
 
         onNodeWithTag("textField")
+            .assertTextEquals("")
+            .assertHasClickAction()
             .assert(hasInputMethodsSupport())
             .assert(hasImeAction(ImeAction.Unspecified))
+            .assert(isNotFocused())
+            .assert(SemanticsMatcher.expectValue(SemanticsProperties.TextSelectionRange,
+                TextRange.Zero))
+            .assert(SemanticsMatcher.keyIsDefined(SemanticsActions.SetText))
+            .assert(SemanticsMatcher.keyIsDefined(SemanticsActions.SetSelection))
+            .assert(SemanticsMatcher.keyIsDefined(SemanticsActions.GetTextLayoutResult))
+
+        val textLayoutResults = mutableListOf<TextLayoutResult>()
+        onNodeWithTag("textField")
+            .performSemanticsAction(SemanticsActions.GetTextLayoutResult) { it(textLayoutResults) }
+        assert(textLayoutResults.size == 1) { "TextLayoutResult is null" }
+    }
+
+    @Test
+    fun semantics_clickAction() {
+        composeTestRule.setContent {
+            var value by state { TextFieldValue() }
+            BaseTextField(
+                modifier = Modifier.testTag("textField"),
+                value = value,
+                onValueChange = { value = it }
+            )
+        }
+
+        onNodeWithTag("textField")
+            .assert(isNotFocused())
+            .performSemanticsAction(SemanticsActions.OnClick)
+        onNodeWithTag("textField")
+            .assert(isFocused())
+    }
+
+    @Test
+    fun semantics_setTextSetSelectionActions() {
+        composeTestRule.setContent {
+            var value by state { TextFieldValue() }
+            BaseTextField(
+                modifier = Modifier.testTag("textField"),
+                value = value,
+                onValueChange = { value = it }
+            )
+        }
+
+        val hello = AnnotatedString("Hello")
+        onNodeWithTag("textField")
+            .assertTextEquals("")
+            .performSemanticsAction(SemanticsActions.SetText) { it(hello) }
+        onNodeWithTag("textField")
+            .assertTextEquals(hello.text)
+            .assert(SemanticsMatcher.expectValue(SemanticsProperties.TextSelectionRange,
+                TextRange(hello.length)))
+
+        onNodeWithTag("textField")
+            .performSemanticsAction(SemanticsActions.SetSelection) { it(1, 3, true) }
+        onNodeWithTag("textField")
+            .assert(SemanticsMatcher.expectValue(SemanticsProperties.TextSelectionRange,
+                TextRange(1, 3)))
     }
 
     @Test
     fun setImeAction_isReflectedInSemantics() {
         composeTestRule.setContent {
             BaseTextField(
-                value = androidx.ui.input.TextFieldValue(),
+                value = TextFieldValue(),
                 imeAction = ImeAction.Search,
                 onValueChange = {}
             )
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt
index 89e4e69..d0d8692 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt
@@ -16,17 +16,20 @@
 
 package androidx.compose.foundation
 
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.style.TextAlign
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
 import androidx.ui.graphics.Color
+import androidx.ui.semantics.SemanticsActions
 import androidx.ui.test.assertTextEquals
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
+import androidx.ui.test.performSemanticsAction
 import androidx.ui.test.runOnIdle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.style.TextAlign
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
@@ -232,6 +235,10 @@
             }
         }
 
-        onNodeWithTag("text").assertTextEquals(TestText)
+        val textLayoutResults = mutableListOf<TextLayoutResult>()
+        onNodeWithTag("text")
+            .assertTextEquals(TestText)
+            .performSemanticsAction(SemanticsActions.GetTextLayoutResult) { it(textLayoutResults) }
+        assert(textLayoutResults.size == 1) { "TextLayoutResult is null" }
     }
 }
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt
index eebe5b4..d43a078 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt
@@ -37,10 +37,13 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.ui.core.Alignment
 import androidx.ui.test.SemanticsNodeInteraction
 import androidx.ui.test.assertCountEquals
 import androidx.ui.test.assertIsDisplayed
 import androidx.ui.test.assertIsNotDisplayed
+import androidx.ui.test.assertPositionInRootIsEqualTo
 import androidx.ui.test.center
 import androidx.ui.test.onChildren
 import androidx.ui.test.createComposeRule
@@ -400,8 +403,7 @@
         Truth.assertThat(lazyColumnBounds.left.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
         Truth.assertThat(lazyColumnBounds.right.toIntPx()).isWithin1PixelFrom(50.dp.toIntPx())
         Truth.assertThat(lazyColumnBounds.top.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
-        // TODO: wrap-content on the main-axis must be implemented
-//        Truth.assertThat(itemInsideBounds.bottom.toIntPx()).isWithin1PixelFrom(100.dp.toIntPx())
+        Truth.assertThat(lazyColumnBounds.bottom.toIntPx()).isWithin1PixelFrom(100.dp.toIntPx())
 
         runOnIdle {
             sameSizeItems = false
@@ -421,8 +423,74 @@
         Truth.assertThat(lazyColumnBounds.left.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
         Truth.assertThat(lazyColumnBounds.right.toIntPx()).isWithin1PixelFrom(70.dp.toIntPx())
         Truth.assertThat(lazyColumnBounds.top.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
-        // TODO: wrap-content on the main-axis must be implemented
-//        Truth.assertThat(itemInsideBounds.bottom.toIntPx()).isWithin1PixelFrom(120.dp.toIntPx())
+        Truth.assertThat(lazyColumnBounds.bottom.toIntPx()).isWithin1PixelFrom(120.dp.toIntPx())
+    }
+
+    private val firstItemTag = "firstItemTag"
+    private val secondItemTag = "secondItemTag"
+
+    private fun prepareLazyColumnsItemsAlignment(horizontalGravity: Alignment.Horizontal) {
+        composeTestRule.setContent {
+            LazyColumnItems(
+                items = listOf(1, 2),
+                modifier = Modifier.testTag(LazyColumnItemsTag).width(100.dp),
+                horizontalGravity = horizontalGravity
+            ) {
+                if (it == 1) {
+                    Spacer(Modifier.preferredSize(50.dp).testTag(firstItemTag))
+                } else {
+                    Spacer(Modifier.preferredSize(70.dp).testTag(secondItemTag))
+                }
+            }
+        }
+
+        onNodeWithTag(firstItemTag)
+            .assertIsDisplayed()
+
+        onNodeWithTag(secondItemTag)
+            .assertIsDisplayed()
+
+        val lazyColumnBounds = onNodeWithTag(LazyColumnItemsTag)
+            .getBoundsInRoot()
+
+        with(composeTestRule.density) {
+            // Verify the width of the column
+            Truth.assertThat(lazyColumnBounds.left.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
+            Truth.assertThat(lazyColumnBounds.right.toIntPx()).isWithin1PixelFrom(100.dp.toIntPx())
+        }
+    }
+
+    @Test
+    fun lazyColumnAlignmentCenterHorizontally() {
+        prepareLazyColumnsItemsAlignment(Alignment.CenterHorizontally)
+
+        onNodeWithTag(firstItemTag)
+            .assertPositionInRootIsEqualTo(25.dp, 0.dp)
+
+        onNodeWithTag(secondItemTag)
+            .assertPositionInRootIsEqualTo(15.dp, 50.dp)
+    }
+
+    @Test
+    fun lazyColumnAlignmentStart() {
+        prepareLazyColumnsItemsAlignment(Alignment.Start)
+
+        onNodeWithTag(firstItemTag)
+            .assertPositionInRootIsEqualTo(0.dp, 0.dp)
+
+        onNodeWithTag(secondItemTag)
+            .assertPositionInRootIsEqualTo(0.dp, 50.dp)
+    }
+
+    @Test
+    fun lazyColumnAlignmentEnd() {
+        prepareLazyColumnsItemsAlignment(Alignment.End)
+
+        onNodeWithTag(firstItemTag)
+            .assertPositionInRootIsEqualTo(50.dp, 0.dp)
+
+        onNodeWithTag(secondItemTag)
+            .assertPositionInRootIsEqualTo(30.dp, 50.dp)
     }
 }
 
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt
index 9cfe680..f10c3bd 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt
@@ -27,10 +27,13 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.compose.foundation.layout.size
+import androidx.ui.core.Alignment
 import androidx.ui.test.assertIsDisplayed
+import androidx.ui.test.assertPositionInRootIsEqualTo
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.getBoundsInRoot
 import androidx.ui.test.onNodeWithTag
@@ -46,7 +49,6 @@
 @MediumTest
 @RunWith(JUnit4::class)
 class LazyRowItemsTest {
-
     private val LazyRowItemsTag = "LazyRowItemsTag"
 
     @get:Rule
@@ -229,8 +231,7 @@
             .getBoundsInRoot()
 
         Truth.assertThat(lazyRowBounds.left.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
-        // TODO: wrap-content on the main-axis must be implemented
-//        Truth.assertThat(lazyRowBounds.right.toIntPx()).isWithin1PixelFrom(100.dp.toIntPx())
+        Truth.assertThat(lazyRowBounds.right.toIntPx()).isWithin1PixelFrom(100.dp.toIntPx())
         Truth.assertThat(lazyRowBounds.top.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
         Truth.assertThat(lazyRowBounds.bottom.toIntPx()).isWithin1PixelFrom(50.dp.toIntPx())
 
@@ -250,9 +251,75 @@
             .getBoundsInRoot()
 
         Truth.assertThat(lazyRowBounds.left.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
-        // TODO: wrap-content on the main-axis must be implemented
-//        Truth.assertThat(lazyRowBounds.right.toIntPx()).isWithin1PixelFrom(120.dp.toIntPx())
+        Truth.assertThat(lazyRowBounds.right.toIntPx()).isWithin1PixelFrom(120.dp.toIntPx())
         Truth.assertThat(lazyRowBounds.top.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
         Truth.assertThat(lazyRowBounds.bottom.toIntPx()).isWithin1PixelFrom(70.dp.toIntPx())
     }
+
+    private val firstItemTag = "firstItemTag"
+    private val secondItemTag = "secondItemTag"
+
+    private fun prepareLazyRowItemsAlignment(verticalGravity: Alignment.Vertical) {
+        composeTestRule.setContent {
+            LazyRowItems(
+                items = listOf(1, 2),
+                modifier = Modifier.testTag(LazyRowItemsTag).height(100.dp),
+                verticalGravity = verticalGravity
+            ) {
+                if (it == 1) {
+                    Spacer(Modifier.preferredSize(50.dp).testTag(firstItemTag))
+                } else {
+                    Spacer(Modifier.preferredSize(70.dp).testTag(secondItemTag))
+                }
+            }
+        }
+
+        onNodeWithTag(firstItemTag)
+            .assertIsDisplayed()
+
+        onNodeWithTag(secondItemTag)
+            .assertIsDisplayed()
+
+        val lazyColumnBounds = onNodeWithTag(LazyRowItemsTag)
+            .getBoundsInRoot()
+
+        with(composeTestRule.density) {
+            // Verify the height of the row
+            Truth.assertThat(lazyColumnBounds.top.toIntPx()).isWithin1PixelFrom(0.dp.toIntPx())
+            Truth.assertThat(lazyColumnBounds.bottom.toIntPx()).isWithin1PixelFrom(100.dp.toIntPx())
+        }
+    }
+
+    @Test
+    fun lazyRowAlignmentCenterVertically() {
+        prepareLazyRowItemsAlignment(Alignment.CenterVertically)
+
+        onNodeWithTag(firstItemTag)
+            .assertPositionInRootIsEqualTo(0.dp, 25.dp)
+
+        onNodeWithTag(secondItemTag)
+            .assertPositionInRootIsEqualTo(50.dp, 15.dp)
+    }
+
+    @Test
+    fun lazyRowAlignmentTop() {
+        prepareLazyRowItemsAlignment(Alignment.Top)
+
+        onNodeWithTag(firstItemTag)
+            .assertPositionInRootIsEqualTo(0.dp, 0.dp)
+
+        onNodeWithTag(secondItemTag)
+            .assertPositionInRootIsEqualTo(50.dp, 0.dp)
+    }
+
+    @Test
+    fun lazyRowAlignmentBottom() {
+        prepareLazyRowItemsAlignment(Alignment.Bottom)
+
+        onNodeWithTag(firstItemTag)
+            .assertPositionInRootIsEqualTo(0.dp, 50.dp)
+
+        onNodeWithTag(secondItemTag)
+            .assertPositionInRootIsEqualTo(50.dp, 30.dp)
+    }
 }
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt
index c71119bc..4e446ea 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt
@@ -38,19 +38,19 @@
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.useOrElse
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.VisualTransformation
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.VisualTransformation
 import androidx.compose.foundation.layout.defaultMinSizeConstraints
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.foundation.text.CoreTextField
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.SoftwareKeyboardController
 import androidx.compose.foundation.text.TextFieldDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextStyle
-import androidx.ui.text.constrain
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.constrain
 import androidx.ui.unit.dp
 
 // TODO(b/151940543): Remove this variable when we have a solution for idling animations
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt
index 5115c7b..7001b91 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt
@@ -20,11 +20,11 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.ui.core.gesture.tapGestureFilter
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextStyle
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextOverflow
 
 /**
  * A continent version of [Text] component to be able to handle click event on the text.
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt
index dece8e9..b565716 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt
@@ -26,18 +26,18 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.useOrElse
 import androidx.ui.semantics.text
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.foundation.text.CoreText
 import androidx.compose.foundation.text.InlineTextContent
-import androidx.ui.text.Paragraph
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.Paragraph
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.TextUnit
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt
index 1ab037e..aa59b8f 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt
@@ -36,6 +36,7 @@
 import androidx.compose.foundation.layout.InnerPadding
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.padding
+import androidx.ui.core.Alignment
 import androidx.ui.unit.dp
 
 /**
@@ -46,6 +47,7 @@
  * @param contentPadding convenience param to specify a padding around the whole content. This will
  * add padding for the content after it has been clipped, which is not possible via [modifier]
  * param. Note that it is *not* a padding applied for each item's content
+ * @param horizontalGravity the horizontal gravity applied to the items
  * @param itemContent emits the UI for an item from [items] list. May emit any number of components,
  * which will be stacked vertically. Note that [LazyColumnItems] can start scrolling incorrectly
  * if you emit nothing and then lazily recompose with the real content, so even if you load the
@@ -56,9 +58,17 @@
     items: List<T>,
     modifier: Modifier = Modifier,
     contentPadding: InnerPadding = InnerPadding(0.dp),
+    horizontalGravity: Alignment.Horizontal = Alignment.Start,
     itemContent: @Composable (T) -> Unit
 ) {
-    LazyItems(items, modifier, contentPadding, itemContent, isVertical = true)
+    LazyItems(
+        items = items,
+        modifier = modifier,
+        contentPadding = contentPadding,
+        horizontalGravity = horizontalGravity,
+        itemContent = itemContent,
+        isVertical = true
+    )
 }
 
 /**
@@ -69,6 +79,7 @@
  * @param contentPadding convenience param to specify a padding around the whole content. This will
  * add padding for the content after it has been clipped, which is not possible via [modifier]
  * param. Note that it is *not* a padding applied for each item's content
+ * @param verticalGravity the vertical gravity applied to the items
  * @param itemContent emits the UI for an item from [items] list. May emit any number of components,
  * which will be stacked horizontally. Note that [LazyRowItems] can start scrolling incorrectly
  * if you emit nothing and then lazily recompose with the real content, so even if you load the
@@ -79,9 +90,17 @@
     items: List<T>,
     modifier: Modifier = Modifier,
     contentPadding: InnerPadding = InnerPadding(0.dp),
+    verticalGravity: Alignment.Vertical = Alignment.Top,
     itemContent: @Composable (T) -> Unit
 ) {
-    LazyItems(items, modifier, contentPadding, itemContent, isVertical = false)
+    LazyItems(
+        items = items,
+        modifier = modifier,
+        contentPadding = contentPadding,
+        itemContent = itemContent,
+        verticalGravity = verticalGravity,
+        isVertical = false
+    )
 }
 
 @Composable
@@ -91,6 +110,8 @@
     modifier: Modifier = Modifier,
     contentPadding: InnerPadding,
     itemContent: @Composable (T) -> Unit,
+    horizontalGravity: Alignment.Horizontal = Alignment.Start,
+    verticalGravity: Alignment.Vertical = Alignment.Top,
     isVertical: Boolean
 ) {
     val state = remember { LazyItemsState<T>(isVertical = isVertical) }
@@ -100,6 +121,8 @@
     state.items = items
     state.compositionRef = compositionReference()
     state.forceRecompose = true
+    state.horizontalAlignment = horizontalGravity
+    state.verticalAlignment = verticalGravity
 
     val materialized = currentComposer.materialize(
         modifier
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt
index 3b759e3..06f71be 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt
@@ -22,6 +22,7 @@
 import androidx.compose.CompositionReference
 import androidx.compose.ExperimentalComposeApi
 import androidx.compose.Recomposer
+import androidx.ui.core.Alignment
 import androidx.ui.core.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.LayoutDirection
@@ -132,6 +133,16 @@
         }
     }
 
+    /**
+     * The horizontal alignment used by [LazyColumnItems].
+     */
+    var horizontalAlignment: Alignment.Horizontal = Alignment.CenterHorizontally
+
+    /**
+     * The vertical alignment used by [LazyRowItems].
+     */
+    var verticalAlignment: Alignment.Vertical = Alignment.CenterVertically
+
     private val Placeable.mainAxisSize get() = if (isVertical) height else width
     private val Placeable.crossAxisSize get() = if (!isVertical) height else width
 
@@ -363,28 +374,29 @@
                 )
             }
 
-            // Wrap the content of the children on the cross axis
-            val layoutWidth = if (isVertical) {
-                constraints.constrainWidth(maxCrossAxis)
-            } else {
-                constraints.maxWidth
-            }
-            val layoutHeight = if (!isVertical) {
-                constraints.constrainHeight(maxCrossAxis)
-            } else {
-                constraints.maxHeight
-            }
+            // Wrap the content of the children
+            val layoutWidth = constraints.constrainWidth(
+                if (isVertical) maxCrossAxis else mainAxisUsed
+            )
+            val layoutHeight = constraints.constrainHeight(
+                if (!isVertical) maxCrossAxis else mainAxisUsed
+            )
 
             return measureScope.layout(layoutWidth, layoutHeight) {
-                val currentMainAxis = (-firstItemScrollOffset).roundToInt()
-                var x = if (isVertical) 0 else currentMainAxis
-                var y = if (!isVertical) 0 else currentMainAxis
+                var currentMainAxis = (-firstItemScrollOffset).roundToInt()
+                var currentCrossAxis: Int
+
                 rootNode.children.forEach {
-                    it.place(x = x, y = y)
                     if (isVertical) {
-                        y += it.height
+                        currentCrossAxis = horizontalAlignment
+                            .align(layoutWidth - it.width, layoutDirection)
+                        // TODO(b/160139359): use placeAbsolute once RTL is fixed
+                        it.place(currentCrossAxis, currentMainAxis)
+                        currentMainAxis += it.height
                     } else {
-                        x += it.width
+                        currentCrossAxis = verticalAlignment.align(layoutHeight - it.height)
+                        it.place(currentMainAxis, currentCrossAxis)
+                        currentMainAxis += it.width
                     }
                 }
             }
diff --git a/ui/ui-graphics/api/0.1.0-dev16.txt b/ui/ui-graphics/api/0.1.0-dev16.txt
index e014534..652ec98 100644
--- a/ui/ui-graphics/api/0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/0.1.0-dev16.txt
@@ -111,6 +111,10 @@
     method public static androidx.ui.graphics.Path asComposePath(android.graphics.Path);
   }
 
+  public final class AndroidPathMeasureKt {
+    method public static androidx.ui.graphics.PathMeasure PathMeasure();
+  }
+
   public final class AndroidShaderKt {
   }
 
@@ -520,6 +524,13 @@
     enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
   }
 
+  public interface PathMeasure {
+    method public float getLength();
+    method public boolean getSegment(float startDistance, float stopDistance, androidx.ui.graphics.Path path, boolean startWithMoveTo);
+    method public void setPath(androidx.ui.graphics.Path path, boolean forceClosed);
+    property public abstract float length;
+  }
+
   public enum PathOperation {
     method public static androidx.ui.graphics.PathOperation valueOf(String name) throws java.lang.IllegalArgumentException;
     method public static androidx.ui.graphics.PathOperation[] values();
diff --git a/ui/ui-graphics/api/current.txt b/ui/ui-graphics/api/current.txt
index e014534..652ec98 100644
--- a/ui/ui-graphics/api/current.txt
+++ b/ui/ui-graphics/api/current.txt
@@ -111,6 +111,10 @@
     method public static androidx.ui.graphics.Path asComposePath(android.graphics.Path);
   }
 
+  public final class AndroidPathMeasureKt {
+    method public static androidx.ui.graphics.PathMeasure PathMeasure();
+  }
+
   public final class AndroidShaderKt {
   }
 
@@ -520,6 +524,13 @@
     enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
   }
 
+  public interface PathMeasure {
+    method public float getLength();
+    method public boolean getSegment(float startDistance, float stopDistance, androidx.ui.graphics.Path path, boolean startWithMoveTo);
+    method public void setPath(androidx.ui.graphics.Path path, boolean forceClosed);
+    property public abstract float length;
+  }
+
   public enum PathOperation {
     method public static androidx.ui.graphics.PathOperation valueOf(String name) throws java.lang.IllegalArgumentException;
     method public static androidx.ui.graphics.PathOperation[] values();
diff --git a/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt
index e014534..652ec98 100644
--- a/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt
@@ -111,6 +111,10 @@
     method public static androidx.ui.graphics.Path asComposePath(android.graphics.Path);
   }
 
+  public final class AndroidPathMeasureKt {
+    method public static androidx.ui.graphics.PathMeasure PathMeasure();
+  }
+
   public final class AndroidShaderKt {
   }
 
@@ -520,6 +524,13 @@
     enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
   }
 
+  public interface PathMeasure {
+    method public float getLength();
+    method public boolean getSegment(float startDistance, float stopDistance, androidx.ui.graphics.Path path, boolean startWithMoveTo);
+    method public void setPath(androidx.ui.graphics.Path path, boolean forceClosed);
+    property public abstract float length;
+  }
+
   public enum PathOperation {
     method public static androidx.ui.graphics.PathOperation valueOf(String name) throws java.lang.IllegalArgumentException;
     method public static androidx.ui.graphics.PathOperation[] values();
diff --git a/ui/ui-graphics/api/public_plus_experimental_current.txt b/ui/ui-graphics/api/public_plus_experimental_current.txt
index e014534..652ec98 100644
--- a/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -111,6 +111,10 @@
     method public static androidx.ui.graphics.Path asComposePath(android.graphics.Path);
   }
 
+  public final class AndroidPathMeasureKt {
+    method public static androidx.ui.graphics.PathMeasure PathMeasure();
+  }
+
   public final class AndroidShaderKt {
   }
 
@@ -520,6 +524,13 @@
     enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
   }
 
+  public interface PathMeasure {
+    method public float getLength();
+    method public boolean getSegment(float startDistance, float stopDistance, androidx.ui.graphics.Path path, boolean startWithMoveTo);
+    method public void setPath(androidx.ui.graphics.Path path, boolean forceClosed);
+    property public abstract float length;
+  }
+
   public enum PathOperation {
     method public static androidx.ui.graphics.PathOperation valueOf(String name) throws java.lang.IllegalArgumentException;
     method public static androidx.ui.graphics.PathOperation[] values();
diff --git a/ui/ui-graphics/api/restricted_0.1.0-dev16.txt b/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
index 3942120..5b534f2 100644
--- a/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
@@ -143,6 +143,10 @@
     method public static androidx.ui.graphics.Path asComposePath(android.graphics.Path);
   }
 
+  public final class AndroidPathMeasureKt {
+    method public static androidx.ui.graphics.PathMeasure PathMeasure();
+  }
+
   public final class AndroidShaderKt {
   }
 
@@ -553,6 +557,13 @@
     enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
   }
 
+  public interface PathMeasure {
+    method public float getLength();
+    method public boolean getSegment(float startDistance, float stopDistance, androidx.ui.graphics.Path path, boolean startWithMoveTo);
+    method public void setPath(androidx.ui.graphics.Path path, boolean forceClosed);
+    property public abstract float length;
+  }
+
   public enum PathOperation {
     method public static androidx.ui.graphics.PathOperation valueOf(String name) throws java.lang.IllegalArgumentException;
     method public static androidx.ui.graphics.PathOperation[] values();
diff --git a/ui/ui-graphics/api/restricted_current.txt b/ui/ui-graphics/api/restricted_current.txt
index 3942120..5b534f2 100644
--- a/ui/ui-graphics/api/restricted_current.txt
+++ b/ui/ui-graphics/api/restricted_current.txt
@@ -143,6 +143,10 @@
     method public static androidx.ui.graphics.Path asComposePath(android.graphics.Path);
   }
 
+  public final class AndroidPathMeasureKt {
+    method public static androidx.ui.graphics.PathMeasure PathMeasure();
+  }
+
   public final class AndroidShaderKt {
   }
 
@@ -553,6 +557,13 @@
     enum_constant public static final androidx.ui.graphics.PathFillType nonZero;
   }
 
+  public interface PathMeasure {
+    method public float getLength();
+    method public boolean getSegment(float startDistance, float stopDistance, androidx.ui.graphics.Path path, boolean startWithMoveTo);
+    method public void setPath(androidx.ui.graphics.Path path, boolean forceClosed);
+    property public abstract float length;
+  }
+
   public enum PathOperation {
     method public static androidx.ui.graphics.PathOperation valueOf(String name) throws java.lang.IllegalArgumentException;
     method public static androidx.ui.graphics.PathOperation[] values();
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidPathMeasure.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidPathMeasure.kt
new file mode 100644
index 0000000..21003fe
--- /dev/null
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidPathMeasure.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2020 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.graphics
+
+internal class AndroidPathMeasure() : PathMeasure {
+    private val measure = android.graphics.PathMeasure()
+
+    override fun setPath(path: Path, forceClosed: Boolean) {
+        measure.setPath(path.asAndroidPath(), forceClosed)
+    }
+
+    override fun getSegment(
+        startDistance: Float,
+        stopDistance: Float,
+        path: Path,
+        startWithMoveTo: Boolean
+    ): Boolean =
+        measure.getSegment(startDistance, stopDistance, path.asAndroidPath(), startWithMoveTo)
+
+    override val length: Float
+        get() = measure.length
+}
+
+actual fun PathMeasure(): PathMeasure = AndroidPathMeasure()
\ No newline at end of file
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Typeface.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/PathMeasure.kt
similarity index 66%
copy from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Typeface.kt
copy to ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/PathMeasure.kt
index f4ab861..3c246e0 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Typeface.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/PathMeasure.kt
@@ -14,16 +14,17 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.ui.graphics
 
-import androidx.ui.text.font.FontFamily
-
-/**
- * A class that can be used for changing the font used in text.
- */
-interface Typeface {
-    /**
-     * The font family used for creating this Typeface
-     */
-    val fontFamily: FontFamily
+interface PathMeasure {
+    val length: Float
+    fun setPath(path: Path, forceClosed: Boolean)
+    fun getSegment(
+        startDistance: Float,
+        stopDistance: Float,
+        path: Path,
+        startWithMoveTo: Boolean
+    ): Boolean
 }
+
+expect fun PathMeasure(): PathMeasure
\ No newline at end of file
diff --git a/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt b/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt
index d2d3a09..cc931db 100644
--- a/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt
+++ b/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt
@@ -67,7 +67,10 @@
             "androidx.ui.layout" to "androidx.compose.foundation.layout",
             "androidx.animation" to "androidx.compose.animation.core",
             "androidx.ui.animation" to "androidx.compose.animation",
-            "androidx.compose.dispatch" to "androidx.compose.runtime.dispatch"
+            "androidx.compose.dispatch" to "androidx.compose.runtime.dispatch",
+            "androidx.ui.text" to "androidx.compose.ui.text",
+            "androidx.ui.input" to "androidx.compose.ui.text.input",
+            "androidx.ui.intl" to "androidx.compose.ui.text.intl"
         )
 
         val ISSUE = Issue.create(
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt
index 11cade4..802492b 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt
@@ -19,12 +19,12 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LayoutDirection
 import androidx.ui.core.Modifier
-import androidx.ui.input.TextFieldValue
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.foundation.text.CoreText
 import androidx.compose.foundation.text.CoreTextField
-import androidx.ui.text.TextStyle
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.TextOverflow
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/api/0.1.0-dev16.txt b/ui/ui-material/api/0.1.0-dev16.txt
index a017899..721b127 100644
--- a/ui/ui-material/api/0.1.0-dev16.txt
+++ b/ui/ui-material/api/0.1.0-dev16.txt
@@ -179,8 +179,8 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-CVdlBpA(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-wI6llck(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-Ike-ftg(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-YAF2Ul0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -207,12 +207,12 @@
   public final class RadioButtonKt {
     method @androidx.compose.Composable public static void RadioButton-mLaF0B0(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
     method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.ui.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-HJ2D5H4(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public static void RadioGroup-pmj2ZzQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
     method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JJAyy3w(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JSFNu0c(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -316,41 +316,41 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
   @androidx.compose.Immutable public final class Typography {
-    ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, 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 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 @androidx.compose.Immutable public androidx.ui.material.Typography 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();
+    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle component1();
+    method public androidx.compose.ui.text.TextStyle component10();
+    method public androidx.compose.ui.text.TextStyle component11();
+    method public androidx.compose.ui.text.TextStyle component12();
+    method public androidx.compose.ui.text.TextStyle component13();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public androidx.compose.ui.text.TextStyle component3();
+    method public androidx.compose.ui.text.TextStyle component4();
+    method public androidx.compose.ui.text.TextStyle component5();
+    method public androidx.compose.ui.text.TextStyle component6();
+    method public androidx.compose.ui.text.TextStyle component7();
+    method public androidx.compose.ui.text.TextStyle component8();
+    method public androidx.compose.ui.text.TextStyle component9();
+    method @androidx.compose.Immutable public androidx.ui.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption();
+    method public androidx.compose.ui.text.TextStyle getH1();
+    method public androidx.compose.ui.text.TextStyle getH2();
+    method public androidx.compose.ui.text.TextStyle getH3();
+    method public androidx.compose.ui.text.TextStyle getH4();
+    method public androidx.compose.ui.text.TextStyle getH5();
+    method public androidx.compose.ui.text.TextStyle getH6();
+    method public androidx.compose.ui.text.TextStyle getOverline();
+    method public androidx.compose.ui.text.TextStyle getSubtitle1();
+    method public androidx.compose.ui.text.TextStyle getSubtitle2();
   }
 
   public final class TypographyKt {
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index a017899..721b127 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -179,8 +179,8 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-CVdlBpA(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-wI6llck(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-Ike-ftg(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-YAF2Ul0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -207,12 +207,12 @@
   public final class RadioButtonKt {
     method @androidx.compose.Composable public static void RadioButton-mLaF0B0(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
     method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.ui.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-HJ2D5H4(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public static void RadioGroup-pmj2ZzQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
     method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JJAyy3w(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JSFNu0c(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -316,41 +316,41 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
   @androidx.compose.Immutable public final class Typography {
-    ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, 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 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 @androidx.compose.Immutable public androidx.ui.material.Typography 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();
+    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle component1();
+    method public androidx.compose.ui.text.TextStyle component10();
+    method public androidx.compose.ui.text.TextStyle component11();
+    method public androidx.compose.ui.text.TextStyle component12();
+    method public androidx.compose.ui.text.TextStyle component13();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public androidx.compose.ui.text.TextStyle component3();
+    method public androidx.compose.ui.text.TextStyle component4();
+    method public androidx.compose.ui.text.TextStyle component5();
+    method public androidx.compose.ui.text.TextStyle component6();
+    method public androidx.compose.ui.text.TextStyle component7();
+    method public androidx.compose.ui.text.TextStyle component8();
+    method public androidx.compose.ui.text.TextStyle component9();
+    method @androidx.compose.Immutable public androidx.ui.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption();
+    method public androidx.compose.ui.text.TextStyle getH1();
+    method public androidx.compose.ui.text.TextStyle getH2();
+    method public androidx.compose.ui.text.TextStyle getH3();
+    method public androidx.compose.ui.text.TextStyle getH4();
+    method public androidx.compose.ui.text.TextStyle getH5();
+    method public androidx.compose.ui.text.TextStyle getH6();
+    method public androidx.compose.ui.text.TextStyle getOverline();
+    method public androidx.compose.ui.text.TextStyle getSubtitle1();
+    method public androidx.compose.ui.text.TextStyle getSubtitle2();
   }
 
   public final class TypographyKt {
diff --git a/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
index a017899..721b127 100644
--- a/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
@@ -179,8 +179,8 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-CVdlBpA(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-wI6llck(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-Ike-ftg(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-YAF2Ul0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -207,12 +207,12 @@
   public final class RadioButtonKt {
     method @androidx.compose.Composable public static void RadioButton-mLaF0B0(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
     method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.ui.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-HJ2D5H4(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public static void RadioGroup-pmj2ZzQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
     method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JJAyy3w(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JSFNu0c(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -316,41 +316,41 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
   @androidx.compose.Immutable public final class Typography {
-    ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, 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 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 @androidx.compose.Immutable public androidx.ui.material.Typography 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();
+    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle component1();
+    method public androidx.compose.ui.text.TextStyle component10();
+    method public androidx.compose.ui.text.TextStyle component11();
+    method public androidx.compose.ui.text.TextStyle component12();
+    method public androidx.compose.ui.text.TextStyle component13();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public androidx.compose.ui.text.TextStyle component3();
+    method public androidx.compose.ui.text.TextStyle component4();
+    method public androidx.compose.ui.text.TextStyle component5();
+    method public androidx.compose.ui.text.TextStyle component6();
+    method public androidx.compose.ui.text.TextStyle component7();
+    method public androidx.compose.ui.text.TextStyle component8();
+    method public androidx.compose.ui.text.TextStyle component9();
+    method @androidx.compose.Immutable public androidx.ui.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption();
+    method public androidx.compose.ui.text.TextStyle getH1();
+    method public androidx.compose.ui.text.TextStyle getH2();
+    method public androidx.compose.ui.text.TextStyle getH3();
+    method public androidx.compose.ui.text.TextStyle getH4();
+    method public androidx.compose.ui.text.TextStyle getH5();
+    method public androidx.compose.ui.text.TextStyle getH6();
+    method public androidx.compose.ui.text.TextStyle getOverline();
+    method public androidx.compose.ui.text.TextStyle getSubtitle1();
+    method public androidx.compose.ui.text.TextStyle getSubtitle2();
   }
 
   public final class TypographyKt {
diff --git a/ui/ui-material/api/public_plus_experimental_current.txt b/ui/ui-material/api/public_plus_experimental_current.txt
index a017899..721b127 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -179,8 +179,8 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-CVdlBpA(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-wI6llck(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-Ike-ftg(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-YAF2Ul0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -207,12 +207,12 @@
   public final class RadioButtonKt {
     method @androidx.compose.Composable public static void RadioButton-mLaF0B0(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
     method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.ui.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-HJ2D5H4(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public static void RadioGroup-pmj2ZzQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
     method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JJAyy3w(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JSFNu0c(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -316,41 +316,41 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
   @androidx.compose.Immutable public final class Typography {
-    ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, 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 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 @androidx.compose.Immutable public androidx.ui.material.Typography 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();
+    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle component1();
+    method public androidx.compose.ui.text.TextStyle component10();
+    method public androidx.compose.ui.text.TextStyle component11();
+    method public androidx.compose.ui.text.TextStyle component12();
+    method public androidx.compose.ui.text.TextStyle component13();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public androidx.compose.ui.text.TextStyle component3();
+    method public androidx.compose.ui.text.TextStyle component4();
+    method public androidx.compose.ui.text.TextStyle component5();
+    method public androidx.compose.ui.text.TextStyle component6();
+    method public androidx.compose.ui.text.TextStyle component7();
+    method public androidx.compose.ui.text.TextStyle component8();
+    method public androidx.compose.ui.text.TextStyle component9();
+    method @androidx.compose.Immutable public androidx.ui.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption();
+    method public androidx.compose.ui.text.TextStyle getH1();
+    method public androidx.compose.ui.text.TextStyle getH2();
+    method public androidx.compose.ui.text.TextStyle getH3();
+    method public androidx.compose.ui.text.TextStyle getH4();
+    method public androidx.compose.ui.text.TextStyle getH5();
+    method public androidx.compose.ui.text.TextStyle getH6();
+    method public androidx.compose.ui.text.TextStyle getOverline();
+    method public androidx.compose.ui.text.TextStyle getSubtitle1();
+    method public androidx.compose.ui.text.TextStyle getSubtitle2();
   }
 
   public final class TypographyKt {
diff --git a/ui/ui-material/api/restricted_0.1.0-dev16.txt b/ui/ui-material/api/restricted_0.1.0-dev16.txt
index 1d5b4f0..0bd6bc5 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev16.txt
@@ -180,8 +180,8 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-CVdlBpA(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-wI6llck(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-Ike-ftg(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-YAF2Ul0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -208,12 +208,12 @@
   public final class RadioButtonKt {
     method @androidx.compose.Composable public static void RadioButton-mLaF0B0(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
     method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.ui.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-HJ2D5H4(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public static void RadioGroup-pmj2ZzQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
     method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JJAyy3w(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JSFNu0c(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -317,41 +317,41 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
   @androidx.compose.Immutable public final class Typography {
-    ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, 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 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 @androidx.compose.Immutable public androidx.ui.material.Typography 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();
+    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle component1();
+    method public androidx.compose.ui.text.TextStyle component10();
+    method public androidx.compose.ui.text.TextStyle component11();
+    method public androidx.compose.ui.text.TextStyle component12();
+    method public androidx.compose.ui.text.TextStyle component13();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public androidx.compose.ui.text.TextStyle component3();
+    method public androidx.compose.ui.text.TextStyle component4();
+    method public androidx.compose.ui.text.TextStyle component5();
+    method public androidx.compose.ui.text.TextStyle component6();
+    method public androidx.compose.ui.text.TextStyle component7();
+    method public androidx.compose.ui.text.TextStyle component8();
+    method public androidx.compose.ui.text.TextStyle component9();
+    method @androidx.compose.Immutable public androidx.ui.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption();
+    method public androidx.compose.ui.text.TextStyle getH1();
+    method public androidx.compose.ui.text.TextStyle getH2();
+    method public androidx.compose.ui.text.TextStyle getH3();
+    method public androidx.compose.ui.text.TextStyle getH4();
+    method public androidx.compose.ui.text.TextStyle getH5();
+    method public androidx.compose.ui.text.TextStyle getH6();
+    method public androidx.compose.ui.text.TextStyle getOverline();
+    method public androidx.compose.ui.text.TextStyle getSubtitle1();
+    method public androidx.compose.ui.text.TextStyle getSubtitle2();
   }
 
   public final class TypographyKt {
diff --git a/ui/ui-material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
index 1d5b4f0..0bd6bc5 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -180,8 +180,8 @@
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-CVdlBpA(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-wI6llck(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-Ike-ftg(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.Composable public static void OutlinedTextField-YAF2Ul0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -208,12 +208,12 @@
   public final class RadioButtonKt {
     method @androidx.compose.Composable public static void RadioButton-mLaF0B0(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
     method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.ui.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-HJ2D5H4(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public static void RadioGroup-pmj2ZzQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
     method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JJAyy3w(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.ui.text.TextStyle? textStyle = null);
+    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-JSFNu0c(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -317,41 +317,41 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-Vmoa5zc(androidx.ui.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-o4GafH0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.ui.input.ImeAction,? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.Composable public static void FilledTextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-M28u9F8(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.Composable public static void TextField-j88Ozi0(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
   @androidx.compose.Immutable public final class Typography {
-    ctor public Typography(androidx.ui.text.font.FontFamily defaultFontFamily, 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 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 @androidx.compose.Immutable public androidx.ui.material.Typography 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();
+    ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle component1();
+    method public androidx.compose.ui.text.TextStyle component10();
+    method public androidx.compose.ui.text.TextStyle component11();
+    method public androidx.compose.ui.text.TextStyle component12();
+    method public androidx.compose.ui.text.TextStyle component13();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public androidx.compose.ui.text.TextStyle component3();
+    method public androidx.compose.ui.text.TextStyle component4();
+    method public androidx.compose.ui.text.TextStyle component5();
+    method public androidx.compose.ui.text.TextStyle component6();
+    method public androidx.compose.ui.text.TextStyle component7();
+    method public androidx.compose.ui.text.TextStyle component8();
+    method public androidx.compose.ui.text.TextStyle component9();
+    method @androidx.compose.Immutable public androidx.ui.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method public androidx.compose.ui.text.TextStyle getBody1();
+    method public androidx.compose.ui.text.TextStyle getBody2();
+    method public androidx.compose.ui.text.TextStyle getButton();
+    method public androidx.compose.ui.text.TextStyle getCaption();
+    method public androidx.compose.ui.text.TextStyle getH1();
+    method public androidx.compose.ui.text.TextStyle getH2();
+    method public androidx.compose.ui.text.TextStyle getH3();
+    method public androidx.compose.ui.text.TextStyle getH4();
+    method public androidx.compose.ui.text.TextStyle getH5();
+    method public androidx.compose.ui.text.TextStyle getH6();
+    method public androidx.compose.ui.text.TextStyle getOverline();
+    method public androidx.compose.ui.text.TextStyle getSubtitle1();
+    method public androidx.compose.ui.text.TextStyle getSubtitle2();
   }
 
   public final class TypographyKt {
diff --git a/ui/ui-material/build.gradle b/ui/ui-material/build.gradle
index 8b1b759..532428b2 100644
--- a/ui/ui-material/build.gradle
+++ b/ui/ui-material/build.gradle
@@ -25,45 +25,57 @@
     id("AndroidXPlugin")
     id("com.android.library")
     id("AndroidXUiPlugin")
-    id("org.jetbrains.kotlin.android")
+    id("kotlin-multiplatform")
 }
 
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler")
+}
 
-    implementation(KOTLIN_STDLIB)
+kotlin {
+    android()
+    sourceSets {
+        commonMain.dependencies {
+            implementation(KOTLIN_STDLIB_COMMON)
+            api project(":compose:runtime:runtime")
+            implementation project(":compose:ui:ui-util")
+            api project(":compose:ui:ui")
+            api project(":compose:foundation:foundation")
+            api project(":compose:material:material-icons-core")
+            api project(":compose:ui:ui-text")
+            api project(":compose:foundation:foundation-text")
+            api project(":compose:animation:animation-core")
 
-    api "androidx.annotation:annotation:1.1.0"
+            implementation project(":compose:foundation:foundation-layout")
+            implementation project(":compose:animation:animation")
+        }
 
-    api project(":compose:runtime:runtime")
-    implementation project(":compose:ui:ui-util")
-    api project(":compose:ui:ui")
-    api project(":compose:foundation:foundation")
-    api project(":compose:material:material-icons-core")
-    api project(":compose:ui:ui-text")
-    api project(":compose:foundation:foundation-text")
-    api project(":compose:animation:animation-core")
+        androidMain.dependencies {
+            api "androidx.annotation:annotation:1.1.0"
+        }
 
-    implementation project(":compose:foundation:foundation-layout")
-    implementation project(":compose:animation:animation")
+        test.dependencies {
+            implementation(ANDROIDX_TEST_RULES)
+            implementation(ANDROIDX_TEST_RUNNER)
+            implementation(JUNIT)
+            implementation(TRUTH)
+        }
 
-    testImplementation(ANDROIDX_TEST_RULES)
-    testImplementation(ANDROIDX_TEST_RUNNER)
-    testImplementation(JUNIT)
-    testImplementation(TRUTH)
+        androidAndroidTest.dependencies {
+            implementation project(":compose:material:material:samples")
+            implementation project(":ui:ui-test")
+            implementation project(":test-screenshot")
 
-    androidTestImplementation project(":compose:material:material:samples")
-    androidTestImplementation project(":ui:ui-test")
-    androidTestImplementation project(":test-screenshot")
-
-    androidTestImplementation(ANDROIDX_TEST_RULES)
-    androidTestImplementation(ANDROIDX_TEST_RUNNER)
-    androidTestImplementation(JUNIT)
-    androidTestImplementation(TRUTH)
-    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
-    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
-    androidTestImplementation MOCKITO_KOTLIN, {
-        exclude group: 'org.mockito' // to keep control on the mockito version
+            implementation(ANDROIDX_TEST_RULES)
+            implementation(ANDROIDX_TEST_RUNNER)
+            implementation(JUNIT)
+            implementation(TRUTH)
+            implementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
+            implementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
+            implementation MOCKITO_KOTLIN, {
+                exclude group: 'org.mockito' // to keep control on the mockito version
+            }
+        }
     }
 }
 
diff --git a/ui/ui-material/icons/core/build.gradle b/ui/ui-material/icons/core/build.gradle
index 024dae1..740f4d5 100644
--- a/ui/ui-material/icons/core/build.gradle
+++ b/ui/ui-material/icons/core/build.gradle
@@ -26,16 +26,24 @@
     id("AndroidXPlugin")
     id("com.android.library")
     id("AndroidXUiPlugin")
-    id("org.jetbrains.kotlin.android")
+    id("kotlin-multiplatform")
 }
 
-dependencies {
-    implementation(KOTLIN_STDLIB)
+kotlin {
+    android()
+    sourceSets {
+        commonMain.dependencies {
+            implementation(KOTLIN_STDLIB_COMMON)
+            api project(":compose:ui:ui")
+        }
 
-    api project(":compose:ui:ui")
+        androidMain.dependencies {
+            implementation(KOTLIN_STDLIB)
+        }
+    }
 }
 
-IconGenerationTask.registerCoreIconProject(project, android)
+IconGenerationTask.registerCoreIconProject(project)
 
 androidx {
     name = "AndroidX Core Material Icons"
diff --git a/ui/ui-material/icons/core/src/main/AndroidManifest.xml b/ui/ui-material/icons/core/src/androidMain/AndroidManifest.xml
similarity index 100%
rename from ui/ui-material/icons/core/src/main/AndroidManifest.xml
rename to ui/ui-material/icons/core/src/androidMain/AndroidManifest.xml
diff --git a/ui/ui-material/icons/core/src/main/java/androidx/ui/material/icons/Icons.kt b/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt
similarity index 100%
rename from ui/ui-material/icons/core/src/main/java/androidx/ui/material/icons/Icons.kt
rename to ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt
diff --git a/ui/ui-material/icons/extended/build.gradle b/ui/ui-material/icons/extended/build.gradle
index 8f774c6..7efed7e 100644
--- a/ui/ui-material/icons/extended/build.gradle
+++ b/ui/ui-material/icons/extended/build.gradle
@@ -26,29 +26,37 @@
     id("AndroidXPlugin")
     id("com.android.library")
     id("AndroidXUiPlugin")
-    id("org.jetbrains.kotlin.android")
+    id("kotlin-multiplatform")
 }
 
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler")
-    implementation(KOTLIN_STDLIB)
-
-    api project(":compose:material:material-icons-core")
-    implementation project(":compose:runtime:runtime")
-
-    androidTestImplementation project(":compose:foundation:foundation")
-    androidTestImplementation project(":compose:foundation:foundation-layout")
-    androidTestImplementation project(":compose:ui:ui")
-    androidTestImplementation project(":ui:ui-test")
-    androidTestImplementation project(":test-screenshot")
-
-    androidTestImplementation(ANDROIDX_TEST_RULES)
-    androidTestImplementation(ANDROIDX_TEST_RUNNER)
-    androidTestImplementation(JUNIT)
-    androidTestImplementation(KOTLIN_REFLECT)
-    androidTestImplementation(TRUTH)
 }
 
+kotlin {
+    android()
+    sourceSets {
+        commonMain.dependencies {
+            implementation(KOTLIN_STDLIB_COMMON)
+            api project(":compose:material:material-icons-core")
+            implementation project(":compose:runtime:runtime")
+        }
+
+        androidTest.dependencies {
+            implementation project(":compose:foundation:foundation")
+            implementation project(":compose:foundation:foundation-layout")
+            implementation project(":compose:ui:ui")
+            implementation project(":ui:ui-test")
+            implementation project(":test-screenshot")
+
+            implementation(ANDROIDX_TEST_RULES)
+            implementation(ANDROIDX_TEST_RUNNER)
+            implementation(JUNIT)
+            implementation(KOTLIN_REFLECT)
+            implementation(TRUTH)
+        }
+    }
+}
 android.buildTypes.all {
     // Jacoco hangs intermittently due to the large number of files
     testCoverageEnabled = false
diff --git a/ui/ui-material/icons/extended/src/androidTest/AndroidManifest.xml b/ui/ui-material/icons/extended/src/androidAndroidTest/AndroidManifest.xml
similarity index 100%
rename from ui/ui-material/icons/extended/src/androidTest/AndroidManifest.xml
rename to ui/ui-material/icons/extended/src/androidAndroidTest/AndroidManifest.xml
diff --git a/ui/ui-material/icons/extended/src/androidTest/java/androidx/ui/material/icons/test/IconComparisonTest.kt b/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/ui/material/icons/test/IconComparisonTest.kt
similarity index 98%
rename from ui/ui-material/icons/extended/src/androidTest/java/androidx/ui/material/icons/test/IconComparisonTest.kt
rename to ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/ui/material/icons/test/IconComparisonTest.kt
index 6fe0529..59e385d 100644
--- a/ui/ui-material/icons/extended/src/androidTest/java/androidx/ui/material/icons/test/IconComparisonTest.kt
+++ b/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/ui/material/icons/test/IconComparisonTest.kt
@@ -40,7 +40,7 @@
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.res.vectorResource
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnUiThread
@@ -92,7 +92,7 @@
     }
 
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     private val matcher = MSSIMMatcher(threshold = 0.99)
 
diff --git a/ui/ui-material/icons/extended/src/androidTest/AndroidManifest.xml b/ui/ui-material/icons/extended/src/androidMain/AndroidManifest.xml
similarity index 100%
copy from ui/ui-material/icons/extended/src/androidTest/AndroidManifest.xml
copy to ui/ui-material/icons/extended/src/androidMain/AndroidManifest.xml
diff --git a/ui/ui-material/icons/extended/src/main/AndroidManifest.xml b/ui/ui-material/icons/extended/src/main/AndroidManifest.xml
deleted file mode 100644
index 88c6032..0000000
--- a/ui/ui-material/icons/extended/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright 2020 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 package="androidx.ui.material.icons" />
diff --git a/ui/ui-material/icons/generator/build.gradle b/ui/ui-material/icons/generator/build.gradle
index 286a7a6..9158245 100644
--- a/ui/ui-material/icons/generator/build.gradle
+++ b/ui/ui-material/icons/generator/build.gradle
@@ -30,6 +30,7 @@
 
     implementation(AGP_STABLE)
     implementation(GUAVA)
+    implementation(KOTLIN_GRADLE_PLUGIN)
     implementation(KOTLIN_STDLIB)
     implementation(KOTLINPOET)
     implementation(XMLPULL)
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconGenerationTask.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconGenerationTask.kt
index 6fe7284..d55750b 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconGenerationTask.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconGenerationTask.kt
@@ -27,6 +27,8 @@
 import org.gradle.api.tasks.OutputDirectory
 import org.gradle.api.tasks.OutputFile
 import org.gradle.api.tasks.TaskAction
+import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
+import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
 import java.io.File
 
 /**
@@ -70,11 +72,11 @@
 
     @get:OutputDirectory
     val generatedSrcMainDirectory: File
-        get() = buildDirectory.resolve("src/main/kotlin")
+        get() = buildDirectory.resolve("src/commonMain/kotlin")
 
     @get:OutputDirectory
     val generatedSrcAndroidTestDirectory: File
-        get() = buildDirectory.resolve("src/androidTest/kotlin")
+        get() = buildDirectory.resolve("src/androidAndroidTest/kotlin")
 
     @get:OutputDirectory
     val generatedResourceDirectory: File
@@ -92,10 +94,8 @@
          * [androidx.ui.material.icons.generator.CoreIcons], and no tests.
          */
         @JvmStatic
-        fun registerCoreIconProject(project: Project, libraryExtension: LibraryExtension) {
-            libraryExtension.libraryVariants.all { variant ->
-                CoreIconGenerationTask.register(project, variant)
-            }
+        fun registerCoreIconProject(project: Project) {
+            CoreIconGenerationTask.register(project)
         }
 
         /**
@@ -105,9 +105,7 @@
          */
         @JvmStatic
         fun registerExtendedIconProject(project: Project, libraryExtension: LibraryExtension) {
-            libraryExtension.libraryVariants.all { variant ->
-                ExtendedIconGenerationTask.register(project, variant)
-            }
+            ExtendedIconGenerationTask.register(project)
 
             libraryExtension.testVariants.all { variant ->
                 IconTestingGenerationTask.register(project, variant)
@@ -123,14 +121,28 @@
  * Registers a new [T] in [this], and sets [IconGenerationTask.buildDirectory] depending on
  * [variant].
  *
+ * @param variant the [BaseVariant] to associate this task with, or `null` if this task does not
+ * change between variants.
  * @return the created [T] of [IconGenerationTask]
  */
+@Suppress("DefaultLocale")
 fun <T : IconGenerationTask> Project.createGenerationTask(
     taskName: String,
-    variant: BaseVariant,
-    taskClass: Class<T>
+    taskClass: Class<T>,
+    variant: BaseVariant? = null
 ): T {
-    return tasks.create("$taskName${variant.name.capitalize()}", taskClass) {
-        it.buildDirectory = project.buildDir.resolve("generatedIcons/${variant.name}")
+    val variantName = variant?.name ?: "allVariants"
+    return tasks.create("$taskName${variantName.capitalize()}", taskClass) {
+        it.buildDirectory = project.buildDir.resolve("generatedIcons/$variantName")
     }
 }
+
+fun Project.getMultiplatformSourceSet(name: String): KotlinSourceSet {
+    val sourceSet = project.multiplatformExtension!!.sourceSets.find { it.name == name }
+    return requireNotNull(sourceSet) {
+        "No source sets found matching $name"
+    }
+}
+
+private val Project.multiplatformExtension
+    get() = extensions.findByType(KotlinMultiplatformExtension::class.java)
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconSourceTasks.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconSourceTasks.kt
index 2601163..439a7dc 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconSourceTasks.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconSourceTasks.kt
@@ -18,8 +18,8 @@
 
 import androidx.ui.material.icons.generator.CoreIcons
 import androidx.ui.material.icons.generator.IconWriter
-import com.android.build.gradle.api.BaseVariant
 import org.gradle.api.Project
+import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
 
 /**
  * Task responsible for converting core icons from xml to a programmatic representation.
@@ -30,15 +30,14 @@
 
     companion object {
         /**
-         * Registers [CoreIconGenerationTask] in [project] for [variant].
+         * Registers [CoreIconGenerationTask] in [project].
          */
-        fun register(project: Project, variant: BaseVariant) {
+        fun register(project: Project) {
             val task = project.createGenerationTask(
                 "generateCoreIcons",
-                variant,
                 CoreIconGenerationTask::class.java
             )
-            variant.registerIconGenerationTask(project, task)
+            registerIconGenerationTask(project, task)
         }
     }
 }
@@ -52,28 +51,25 @@
 
     companion object {
         /**
-         * Registers [ExtendedIconGenerationTask] in [project] for [variant].
+         * Registers [ExtendedIconGenerationTask] in [project].
          */
-        fun register(project: Project, variant: BaseVariant) {
+        fun register(project: Project) {
             val task = project.createGenerationTask(
                 "generateExtendedIcons",
-                variant,
                 ExtendedIconGenerationTask::class.java
             )
-            variant.registerIconGenerationTask(project, task)
+            registerIconGenerationTask(project, task)
         }
     }
 }
 
 /**
- * Helper to register [task] as the java source generating task for [project].
+ * Helper to register [task] as the Kotlin source generating task for [project].
  */
-private fun BaseVariant.registerIconGenerationTask(
+private fun registerIconGenerationTask(
     project: Project,
     task: IconGenerationTask
 ) {
-    registerJavaGeneratingTask(task, task.generatedSrcMainDirectory)
-    // TODO: b/144249620 - fixed in AGP 4.0.0 alpha 4 +
-    javaCompileProvider.configure { it.enabled = false }
-    project.tasks.named("runErrorProne").configure { it.enabled = false }
+    val sourceSet = project.getMultiplatformSourceSet(KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME)
+    sourceSet.kotlin.srcDir(project.files(task.generatedSrcMainDirectory).builtBy(task))
 }
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconTestingGenerationTask.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconTestingGenerationTask.kt
index ac01c44..3227b371 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconTestingGenerationTask.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconTestingGenerationTask.kt
@@ -58,13 +58,15 @@
         fun register(project: Project, variant: BaseVariant) {
             val task = project.createGenerationTask(
                 "generateTestFiles",
-                variant,
-                IconTestingGenerationTask::class.java
+                IconTestingGenerationTask::class.java,
+                variant
             )
             variant.registerGeneratedResFolders(
                 project.files(task.generatedResourceDirectory).builtBy(task)
             )
-            variant.registerJavaGeneratingTask(task, task.generatedSrcAndroidTestDirectory)
+            val sourceSet = project.getMultiplatformSourceSet("androidAndroidTest")
+            sourceSet.kotlin
+                .srcDir(project.files(task.generatedSrcAndroidTestDirectory).builtBy(task))
         }
     }
 }
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
index e87714c..14a55c26 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
@@ -67,7 +67,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.material.Surface
 import androidx.ui.material.TopAppBar
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
 import java.util.Locale
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
index 60abbdf..9559556 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
@@ -21,9 +21,9 @@
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.Typography
 import androidx.ui.material.darkColorPalette
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontWeight
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
 
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
index 219475a..997703a 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
@@ -23,10 +23,10 @@
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.PasswordVisualTransformation
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.PasswordVisualTransformation
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.padding
 import androidx.ui.material.EmphasisAmbient
@@ -37,7 +37,7 @@
 import androidx.ui.material.icons.filled.Favorite
 import androidx.ui.material.icons.filled.Info
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import androidx.ui.unit.dp
 
 @Sampled
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
index 4b024a9..b20ea3c 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
@@ -31,8 +31,8 @@
 import androidx.ui.material.Typography
 import androidx.ui.material.darkColorPalette
 import androidx.ui.material.lightColorPalette
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontWeight
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
 import androidx.ui.unit.sp
 
 @Sampled
diff --git a/ui/ui-material/src/androidTest/AndroidManifest.xml b/ui/ui-material/src/androidAndroidTest/AndroidManifest.xml
similarity index 100%
rename from ui/ui-material/src/androidTest/AndroidManifest.xml
rename to ui/ui-material/src/androidAndroidTest/AndroidManifest.xml
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/AppBarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
similarity index 99%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/AppBarTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
index 8186454..d916385 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/AppBarTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
@@ -34,7 +34,7 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.onNodeWithText
 import androidx.ui.test.getBoundsInRoot
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
 import androidx.ui.unit.height
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/BottomNavigationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
similarity index 97%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/BottomNavigationTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
index d251ad6..a2adcda 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/BottomNavigationTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
@@ -32,7 +32,7 @@
 import androidx.ui.test.assertIsEqualTo
 import androidx.ui.test.assertIsNotDisplayed
 import androidx.ui.test.assertIsSelected
-import androidx.ui.test.assertIsUnselected
+import androidx.ui.test.assertIsNotSelected
 import androidx.ui.test.assertLeftPositionInRootIsEqualTo
 import androidx.ui.test.assertTopPositionInRootIsEqualTo
 import androidx.ui.test.createComposeRule
@@ -233,16 +233,16 @@
             // Ensure semantics match for selected state of the items
             .apply {
                 get(0).assertIsSelected()
-                get(1).assertIsUnselected()
-                get(2).assertIsUnselected()
+                get(1).assertIsNotSelected()
+                get(2).assertIsNotSelected()
             }
             // Click the last item
             .apply {
                 get(2).performClick()
             }
             .apply {
-                get(0).assertIsUnselected()
-                get(1).assertIsUnselected()
+                get(0).assertIsNotSelected()
+                get(1).assertIsNotSelected()
                 get(2).assertIsSelected()
             }
     }
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/CardTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/CardTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxScreenshotTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxScreenshotTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/DividerUiTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/DividerUiTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/DrawerScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/DrawerScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/DrawerTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/DrawerTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/ElevationOverlayTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/ElevationOverlayTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/EmphasisTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/EmphasisTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/EmphasisTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/EmphasisTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/GoldenCommon.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/GoldenCommon.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/GoldenCommon.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/GoldenCommon.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/IconButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/IconButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/IconTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/IconTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/ListItemTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/ListItemTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/MaterialTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/MaterialTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/MenuTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/MenuTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/ProgressIndicatorTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/ProgressIndicatorTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonScreenshotTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonScreenshotTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
similarity index 98%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
index 7e61b92..f1875ad 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.test.SemanticsNodeInteraction
 import androidx.ui.test.assertIsInMutuallyExclusiveGroup
 import androidx.ui.test.assertIsSelected
-import androidx.ui.test.assertIsUnselected
+import androidx.ui.test.assertIsNotSelected
 import androidx.ui.test.assertValueEquals
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.performClick
@@ -54,7 +54,7 @@
 
     private fun SemanticsNodeInteraction.assertHasUnSelectedSemantics(): SemanticsNodeInteraction =
         assertIsInMutuallyExclusiveGroup()
-            .assertIsUnselected()
+            .assertIsNotSelected()
             .assertValueEquals(Strings.NotSelected)
 
     private val options = listOf(itemOne, itemTwo, itemThree)
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/ScaffoldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/ScaffoldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SliderTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/SliderTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SnackbarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/SnackbarTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceContentColorTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceContentColorTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceContentColorTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceContentColorTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchScreenshotTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchScreenshotTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
similarity index 96%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
index 59b5277..2ce3ec9 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
@@ -37,7 +37,7 @@
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertIsEqualTo
 import androidx.ui.test.assertIsSelected
-import androidx.ui.test.assertIsUnselected
+import androidx.ui.test.assertIsNotSelected
 import androidx.ui.test.assertPositionInRootIsEqualTo
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.performClick
@@ -337,8 +337,8 @@
             .assertCountEquals(3)
             .apply {
                 get(0).assertIsSelected()
-                get(1).assertIsUnselected()
-                get(2).assertIsUnselected()
+                get(1).assertIsNotSelected()
+                get(2).assertIsNotSelected()
             }
     }
 
@@ -354,8 +354,8 @@
             .assertCountEquals(3)
             .apply {
                 get(0).assertIsSelected()
-                get(1).assertIsUnselected()
-                get(2).assertIsUnselected()
+                get(1).assertIsNotSelected()
+                get(2).assertIsNotSelected()
             }
 
         // Click the last tab
@@ -365,8 +365,8 @@
         onAllNodes(isInMutuallyExclusiveGroup())
             .assertCountEquals(3)
             .apply {
-                get(0).assertIsUnselected()
-                get(1).assertIsUnselected()
+                get(0).assertIsNotSelected()
+                get(1).assertIsNotSelected()
                 get(2).assertIsSelected()
             }
     }
@@ -384,7 +384,7 @@
             .apply {
                 get(0).assertIsSelected()
                 (1..9).forEach {
-                    get(it).assertIsUnselected()
+                    get(it).assertIsNotSelected()
                 }
             }
     }
@@ -402,7 +402,7 @@
             .apply {
                 get(0).assertIsSelected()
                 (1..9).forEach {
-                    get(it).assertIsUnselected()
+                    get(it).assertIsNotSelected()
                 }
             }
 
@@ -413,10 +413,10 @@
         onAllNodes(isInMutuallyExclusiveGroup())
             .assertCountEquals(10)
             .apply {
-                get(0).assertIsUnselected()
+                get(0).assertIsNotSelected()
                 get(1).assertIsSelected()
                 (2..9).forEach {
-                    get(it).assertIsUnselected()
+                    get(it).assertIsNotSelected()
                 }
             }
     }
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/ripple/RippleIndicationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/ripple/RippleIndicationTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/FilledTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
similarity index 98%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/FilledTextFieldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
index 53d24f6..2d4f047 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/FilledTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
@@ -36,11 +36,11 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
 import androidx.ui.graphics.compositeOver
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.PasswordVisualTransformation
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.PasswordVisualTransformation
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.TextInputService
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.height
@@ -63,7 +63,7 @@
 import androidx.ui.test.performImeAction
 import androidx.ui.test.waitForIdle
 import androidx.compose.foundation.text.FirstBaseline
-import androidx.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.SoftwareKeyboardController
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
 import androidx.ui.unit.sp
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/OutlinedTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
similarity index 98%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
index f367ca5..4c79754 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
@@ -35,11 +35,11 @@
 import androidx.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.PasswordVisualTransformation
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.PasswordVisualTransformation
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.TextInputService
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
@@ -57,7 +57,7 @@
 import androidx.ui.test.click
 import androidx.ui.test.performImeAction
 import androidx.ui.test.waitForIdle
-import androidx.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.SoftwareKeyboardController
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
similarity index 100%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
diff --git a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
similarity index 98%
rename from ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
index ebe9a71..fce5dff 100644
--- a/ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.background
 import androidx.ui.graphics.Color
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.material.TextFieldScroller
diff --git a/ui/ui-material/src/main/AndroidManifest.xml b/ui/ui-material/src/androidMain/AndroidManifest.xml
similarity index 100%
rename from ui/ui-material/src/main/AndroidManifest.xml
rename to ui/ui-material/src/androidMain/AndroidManifest.xml
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/AlertDialog.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/BottomNavigation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
similarity index 98%
rename from ui/ui-material/src/main/java/androidx/ui/material/BottomNavigation.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
index 5f0444b..c6b91f3 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/BottomNavigation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
@@ -19,7 +19,6 @@
 import androidx.compose.animation.core.VectorizedAnimationSpec
 import androidx.compose.animation.core.FastOutSlowInEasing
 import androidx.compose.animation.core.TweenSpec
-import androidx.annotation.FloatRange
 import androidx.compose.Composable
 import androidx.compose.Providers
 import androidx.compose.emptyContent
@@ -46,9 +45,10 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.text.LastBaseline
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
+import androidx.ui.util.annotation.FloatRange
 import kotlin.math.max
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Button.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Button.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Card.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Card.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
similarity index 97%
rename from ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
index f432076b..e60365185 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
@@ -16,7 +16,6 @@
 
 package androidx.ui.material
 
-import android.graphics.PathMeasure
 import androidx.compose.animation.core.FloatPropKey
 import androidx.compose.animation.core.TransitionSpec
 import androidx.compose.animation.core.keyframes
@@ -38,8 +37,8 @@
 import androidx.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Path
+import androidx.ui.graphics.PathMeasure
 import androidx.ui.graphics.StrokeCap
-import androidx.ui.graphics.asAndroidPath
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.ui.graphics.drawscope.Fill
 import androidx.ui.graphics.drawscope.Stroke
@@ -251,10 +250,10 @@
         checkPath.lineTo(width * gravitatedCrossX, width * gravitatedCrossY)
         checkPath.lineTo(width * rightX, width * gravitatedRightY)
         // TODO: replace with proper declarative non-android alternative when ready (b/158188351)
-        pathMeasure.setPath(checkPath.asAndroidPath(), false)
+        pathMeasure.setPath(checkPath, false)
         pathToDraw.reset()
         pathMeasure.getSegment(
-            0f, pathMeasure.length * checkFraction, pathToDraw.asAndroidPath(), true
+            0f, pathMeasure.length * checkFraction, pathToDraw, true
         )
     }
     drawPath(drawingCache.pathToDraw, checkColor, style = stroke)
@@ -279,7 +278,7 @@
 private val CheckAnimationDuration = 100
 
 private fun generateTransitionDefinition(color: Color, unselectedColor: Color) =
-    transitionDefinition {
+    transitionDefinition<ToggleableState> {
         state(ToggleableState.On) {
             this[CheckDrawFraction] = 1f
             this[BoxOpacityFraction] = 1f
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Color.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Color.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Color.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Color.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Emphasis.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Emphasis.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/Emphasis.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Emphasis.kt
index b93a46f..7f93d56 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Emphasis.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Emphasis.kt
@@ -16,7 +16,6 @@
 
 package androidx.ui.material
 
-import androidx.annotation.FloatRange
 import androidx.compose.Ambient
 import androidx.compose.Composable
 import androidx.compose.Immutable
@@ -26,6 +25,7 @@
 import androidx.compose.foundation.contentColor
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.luminance
+import androidx.ui.util.annotation.FloatRange
 
 /**
  * Emphasis allows certain parts of a component to be accentuated, or shown with lower contrast
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ExperimentalMaterialApi.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ExperimentalMaterialApi.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/ExperimentalMaterialApi.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ExperimentalMaterialApi.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/IconButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/IconButton.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ListItem.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/ListItem.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
index 0e9765a..13e0125 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ListItem.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
@@ -37,8 +37,8 @@
 import androidx.ui.material.ripple.RippleIndication
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
-import androidx.ui.text.TextStyle
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/MaterialTheme.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/MaterialTheme.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/MaterialTheme.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/MaterialTheme.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Menu.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Menu.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/OutlinedTextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
similarity index 97%
rename from ui/ui-material/src/main/java/androidx/ui/material/OutlinedTextField.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
index 050e4ac..1234f13 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/OutlinedTextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
@@ -46,15 +46,15 @@
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.RectangleShape
 import androidx.ui.graphics.drawscope.Stroke
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.VisualTransformation
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.VisualTransformation
 import androidx.compose.foundation.layout.padding
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.SoftwareKeyboardController
-import androidx.ui.text.TextStyle
-import androidx.ui.text.constrain
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.constrain
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
 import kotlin.math.max
@@ -89,7 +89,7 @@
  * @param isErrorValue indicates if the text field's current value is in error. If set to true, the
  * label, bottom indicator and trailing icon will be displayed in [errorColor] color
  * @param visualTransformation transforms the visual representation of the input [value].
- * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * For example, you can use [androidx.compose.ui.text.input.PasswordVisualTransformation] to create a password
  * text field. By default no visual transformation is applied
  * @param keyboardType the keyboard type to be used with the text field.
  * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
@@ -205,7 +205,7 @@
  * @param isErrorValue indicates if the text field's current value is in error state. If set to
  * true, the label, bottom indicator and trailing icon will be displayed in [errorColor] color
  * @param visualTransformation transforms the visual representation of the input [value].
- * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * For example, you can use [androidx.compose.ui.text.input.PasswordVisualTransformation] to create a password
  * text field. By default no visual transformation is applied
  * @param keyboardType the keyboard type to be used with the text field.
  * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
index 183f295..34ce6c4 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
@@ -25,7 +25,6 @@
 import androidx.compose.animation.core.repeatable
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.annotation.FloatRange
 import androidx.compose.Composable
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
@@ -47,6 +46,7 @@
 import androidx.ui.semantics.accessibilityValue
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
+import androidx.ui.util.annotation.FloatRange
 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/commonMain/kotlin/androidx/ui/material/RadioButton.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt
index a5caff4..7969a0f 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt
@@ -41,7 +41,7 @@
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.ui.material.ripple.RippleIndication
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
 
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Scaffold.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Scaffold.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Shapes.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Shapes.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
similarity index 98%
rename from ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
index a30dfda..6d9b74d 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Slider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
@@ -16,13 +16,11 @@
 
 package androidx.ui.material
 
-import android.annotation.SuppressLint
 import androidx.compose.animation.core.AnimatedFloat
 import androidx.compose.animation.core.AnimationClockObservable
 import androidx.compose.animation.core.AnimationEndReason
 import androidx.compose.animation.core.TargetAnimation
 import androidx.compose.animation.core.TweenSpec
-import androidx.annotation.IntRange
 import androidx.compose.Composable
 import androidx.compose.remember
 import androidx.compose.animation.asDisposableClock
@@ -66,7 +64,9 @@
 import androidx.ui.semantics.scrollForward
 import androidx.ui.semantics.setProgress
 import androidx.ui.unit.dp
+import androidx.ui.util.format
 import androidx.ui.util.lerp
+import androidx.ui.util.annotation.IntRange
 import kotlin.math.abs
 import kotlin.math.roundToInt
 
@@ -428,7 +428,7 @@
     internal var anchorsPx: List<Float> = emptyList()
         private set
 
-    @SuppressLint("UnnecessaryLambdaCreation")
+    @Suppress("UnnecessaryLambdaCreation")
     internal val holder =
         CallbackBasedAnimatedFloat(
             scale(startValue, endValue, initial, startPx, endPx),
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Snackbar.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Surface.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/Surface.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
index c09b7a1..30dbfca 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Surface.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
@@ -34,7 +34,7 @@
 import androidx.ui.graphics.RectangleShape
 import androidx.ui.graphics.Shape
 import androidx.ui.graphics.compositeOver
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
 import kotlin.math.ln
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
index d165bac..bee5d43 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
@@ -62,7 +62,7 @@
 import androidx.ui.material.TabRow.TabPosition
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
similarity index 97%
rename from ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
index de79d74..35fecec 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/TextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
@@ -37,16 +37,16 @@
 import androidx.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shape
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.VisualTransformation
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.VisualTransformation
 import androidx.compose.foundation.layout.padding
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 import androidx.compose.foundation.text.LastBaseline
-import androidx.ui.text.SoftwareKeyboardController
-import androidx.ui.text.TextStyle
-import androidx.ui.text.constrain
+import androidx.compose.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.constrain
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
@@ -108,7 +108,7 @@
  * @param isErrorValue indicates if the text field's current value is in error. If set to true, the
  * label, bottom indicator and trailing icon will be displayed in [errorColor] color
  * @param visualTransformation transforms the visual representation of the input [value].
- * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * For example, you can use [androidx.compose.ui.text.input.PasswordVisualTransformation] to create a password
  * text field. By default no visual transformation is applied
  * @param keyboardType the keyboard type to be used with the text field.
  * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
@@ -253,7 +253,7 @@
  * @param isErrorValue indicates if the text field's current value is in error. If set to true, the
  * label, bottom indicator and trailing icon will be displayed in [errorColor] color
  * @param visualTransformation transforms the visual representation of the input [value].
- * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * For example, you can use [androidx.compose.ui.text.input.PasswordVisualTransformation] to create a password
  * text field. By default no visual transformation is applied
  * @param keyboardType the keyboard type to be used with the text field.
  * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
@@ -387,7 +387,7 @@
  * @param isErrorValue indicates if the text field's current value is in error state. If set to
  * true, the label, bottom indicator and trailing icon will be displayed in [errorColor] color
  * @param visualTransformation transforms the visual representation of the input [value].
- * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * For example, you can use [androidx.compose.ui.text.input.PasswordVisualTransformation] to create a password
  * text field. By default no visual transformation is applied
  * @param keyboardType the keyboard type to be used with the text field.
  * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
@@ -494,7 +494,7 @@
  * @param isErrorValue indicates if the text field's current value is in error. If set to true, the
  * label, bottom indicator and trailing icon will be displayed in [errorColor] color
  * @param visualTransformation transforms the visual representation of the input [value].
- * For example, you can use [androidx.ui.input.PasswordVisualTransformation] to create a password
+ * For example, you can use [androidx.compose.ui.text.input.PasswordVisualTransformation] to create a password
  * text field. By default no visual transformation is applied
  * @param keyboardType the keyboard type to be used with the text field.
  * Note that the input type is not guaranteed. For example, an IME may send a non-ASCII character
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
similarity index 97%
rename from ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
index e33db4a..dae7b49 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
@@ -23,7 +23,6 @@
 import androidx.compose.animation.core.TransitionSpec
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.annotation.VisibleForTesting
 import androidx.compose.Composable
 import androidx.compose.Providers
 import androidx.compose.Stable
@@ -61,20 +60,21 @@
 import androidx.compose.foundation.gestures.scrollable
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shape
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.VisualTransformation
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.VisualTransformation
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSizeIn
 import androidx.ui.material.ripple.RippleIndication
 import androidx.compose.runtime.savedinstancestate.Saver
 import androidx.compose.runtime.savedinstancestate.rememberSavedInstanceState
-import androidx.ui.text.SoftwareKeyboardController
-import androidx.ui.text.TextStyle
-import androidx.ui.text.lerp
+import androidx.compose.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.lerp
 import androidx.ui.unit.Dp
 import androidx.ui.unit.dp
+import androidx.ui.util.annotation.VisibleForTesting
 import kotlin.math.min
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/Typography.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
similarity index 98%
rename from ui/ui-material/src/main/java/androidx/ui/material/Typography.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
index 8eb265e..35bcec7 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/Typography.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
@@ -18,9 +18,9 @@
 
 import androidx.compose.Immutable
 import androidx.compose.staticAmbientOf
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontWeight
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontWeight
 import androidx.ui.unit.sp
 
 /**
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/internal/StateDraggable.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/internal/StateDraggable.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/internal/StateDraggable.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/internal/StateDraggable.kt
index bf8202c..6f16100 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/internal/StateDraggable.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/internal/StateDraggable.kt
@@ -24,7 +24,6 @@
 import androidx.compose.animation.core.OnAnimationEnd
 import androidx.compose.animation.core.Spring
 import androidx.compose.animation.core.TargetAnimation
-import androidx.annotation.FloatRange
 import androidx.compose.onCommit
 import androidx.compose.remember
 import androidx.compose.state
@@ -39,6 +38,7 @@
 import androidx.compose.foundation.gestures.draggable
 import androidx.ui.util.fastFirstOrNull
 import androidx.ui.util.lerp
+import androidx.ui.util.annotation.FloatRange
 import kotlin.math.sign
 
 /**
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleAnimation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
similarity index 99%
rename from ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleAnimation.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
index 87cafc5..39c7803 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleAnimation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
@@ -158,7 +158,7 @@
         endRadius: Float,
         startCenter: Offset,
         endCenter: Offset
-    ) = transitionDefinition {
+    ) = transitionDefinition<State> {
         state(State.Initial) {
             this[Alpha] = 0f
             this[Radius] = startRadius
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleIndication.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
similarity index 98%
rename from ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleIndication.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
index efa3282..4dfcd78 100644
--- a/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleIndication.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
@@ -45,6 +45,7 @@
 import androidx.ui.material.MaterialTheme
 import androidx.ui.unit.Dp
 import androidx.ui.util.fastForEach
+import androidx.ui.util.nativeClass
 
 /**
  * Material implementation of [IndicationInstance] that expresses indication via ripples. This
@@ -118,7 +119,7 @@
     // making this class to be "data class"
     override fun equals(other: Any?): Boolean {
         if (this === other) return true
-        if (javaClass != other?.javaClass) return false
+        if (this.nativeClass() != other?.nativeClass()) return false
 
         other as RippleIndication
 
diff --git a/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleTheme.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleTheme.kt
similarity index 100%
rename from ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleTheme.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleTheme.kt
diff --git a/ui/ui-material/src/test/java/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt b/ui/ui-material/src/test/kotlin/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt
similarity index 100%
rename from ui/ui-material/src/test/java/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt
rename to ui/ui-material/src/test/kotlin/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt
diff --git a/ui/ui-material/src/test/java/androidx/ui/material/ripple/RippleAnimationTest.kt b/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
similarity index 100%
rename from ui/ui-material/src/test/java/androidx/ui/material/ripple/RippleAnimationTest.kt
rename to ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
diff --git a/ui/ui-test-font/src/main/AndroidManifest.xml b/ui/ui-test-font/src/main/AndroidManifest.xml
index f6cc38b..2751a04 100644
--- a/ui/ui-test-font/src/main/AndroidManifest.xml
+++ b/ui/ui-test-font/src/main/AndroidManifest.xml
@@ -14,5 +14,5 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.ui.text.font.test">
+    package="androidx.compose.ui.text.font.test">
 </manifest>
diff --git a/ui/ui-test/api/0.1.0-dev16.txt b/ui/ui-test/api/0.1.0-dev16.txt
index fff9759..9dd52b4 100644
--- a/ui/ui-test/api/0.1.0-dev16.txt
+++ b/ui/ui-test/api/0.1.0-dev16.txt
@@ -42,12 +42,12 @@
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotHidden(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertLabelEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.semantics.AccessibilityRangeInfo value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
@@ -146,7 +146,7 @@
   }
 
   public final class ComposeTestRuleKt {
-    method public static androidx.ui.test.ComposeTestRule createComposeRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static androidx.ui.test.ComposeTestRule createComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class DisableTransitions implements org.junit.rules.TestRule {
@@ -171,7 +171,7 @@
     method public static androidx.ui.test.SemanticsMatcher hasAnyDescendant(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasAnySibling(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasClickAction();
-    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.ui.input.ImeAction actionType);
+    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.compose.ui.text.input.ImeAction actionType);
     method public static androidx.ui.test.SemanticsMatcher hasInputMethodsSupport();
     method public static androidx.ui.test.SemanticsMatcher hasLabel(String label, boolean ignoreCase = false);
     method public static androidx.ui.test.SemanticsMatcher hasNoClickAction();
@@ -185,10 +185,13 @@
     method public static androidx.ui.test.SemanticsMatcher hasValue(String value);
     method public static androidx.ui.test.SemanticsMatcher isDialog();
     method public static androidx.ui.test.SemanticsMatcher isEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isFocused();
     method public static androidx.ui.test.SemanticsMatcher isHidden();
     method public static androidx.ui.test.SemanticsMatcher isInMutuallyExclusiveGroup();
     method public static androidx.ui.test.SemanticsMatcher isNotEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isNotFocused();
     method public static androidx.ui.test.SemanticsMatcher isNotHidden();
+    method public static androidx.ui.test.SemanticsMatcher isNotSelected();
     method public static androidx.ui.test.SemanticsMatcher isOff();
     method public static androidx.ui.test.SemanticsMatcher isOn();
     method public static androidx.ui.test.SemanticsMatcher isPopup();
@@ -196,7 +199,6 @@
     method public static androidx.ui.test.SemanticsMatcher isSelectable();
     method public static androidx.ui.test.SemanticsMatcher isSelected();
     method public static androidx.ui.test.SemanticsMatcher isToggleable();
-    method public static androidx.ui.test.SemanticsMatcher isUnselected();
   }
 
   public final class FindersKt {
@@ -408,14 +410,13 @@
   }
 
   public final class AndroidComposeTestRule<T extends androidx.activity.ComponentActivity> implements androidx.ui.test.ComposeTestRule {
-    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, androidx.compose.Recomposer? recomposer, boolean disableTransitions, boolean disableBlinkingCursor);
+    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, boolean disableTransitions, boolean disableBlinkingCursor);
     method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
     method public androidx.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
-    method public androidx.compose.Recomposer? getRecomposer();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
     property public androidx.ui.unit.Density density;
@@ -428,7 +429,8 @@
   }
 
   public final class AndroidComposeTestRuleKt {
-    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! createAndroidComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class ComposeIdlingResourceKt {
diff --git a/ui/ui-test/api/api_lint.ignore b/ui/ui-test/api/api_lint.ignore
index 9ed2298..27ce4b5 100644
--- a/ui/ui-test/api/api_lint.ignore
+++ b/ui/ui-test/api/api_lint.ignore
@@ -1,3 +1,5 @@
 // Baseline format: 1.0
-MissingNullability: androidx.ui.test.android.AndroidComposeTestRuleKt#AndroidComposeTestRule(androidx.compose.Recomposer, boolean, boolean):
+MissingNullability: androidx.ui.test.android.AndroidComposeTestRuleKt#AndroidComposeTestRule(boolean, boolean):
     Missing nullability on method `AndroidComposeTestRule` return
+MissingNullability: androidx.ui.test.android.AndroidComposeTestRuleKt#createAndroidComposeRule(boolean, boolean):
+    Missing nullability on method `createAndroidComposeRule` return
diff --git a/ui/ui-test/api/current.txt b/ui/ui-test/api/current.txt
index fff9759..9dd52b4 100644
--- a/ui/ui-test/api/current.txt
+++ b/ui/ui-test/api/current.txt
@@ -42,12 +42,12 @@
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotHidden(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertLabelEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.semantics.AccessibilityRangeInfo value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
@@ -146,7 +146,7 @@
   }
 
   public final class ComposeTestRuleKt {
-    method public static androidx.ui.test.ComposeTestRule createComposeRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static androidx.ui.test.ComposeTestRule createComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class DisableTransitions implements org.junit.rules.TestRule {
@@ -171,7 +171,7 @@
     method public static androidx.ui.test.SemanticsMatcher hasAnyDescendant(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasAnySibling(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasClickAction();
-    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.ui.input.ImeAction actionType);
+    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.compose.ui.text.input.ImeAction actionType);
     method public static androidx.ui.test.SemanticsMatcher hasInputMethodsSupport();
     method public static androidx.ui.test.SemanticsMatcher hasLabel(String label, boolean ignoreCase = false);
     method public static androidx.ui.test.SemanticsMatcher hasNoClickAction();
@@ -185,10 +185,13 @@
     method public static androidx.ui.test.SemanticsMatcher hasValue(String value);
     method public static androidx.ui.test.SemanticsMatcher isDialog();
     method public static androidx.ui.test.SemanticsMatcher isEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isFocused();
     method public static androidx.ui.test.SemanticsMatcher isHidden();
     method public static androidx.ui.test.SemanticsMatcher isInMutuallyExclusiveGroup();
     method public static androidx.ui.test.SemanticsMatcher isNotEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isNotFocused();
     method public static androidx.ui.test.SemanticsMatcher isNotHidden();
+    method public static androidx.ui.test.SemanticsMatcher isNotSelected();
     method public static androidx.ui.test.SemanticsMatcher isOff();
     method public static androidx.ui.test.SemanticsMatcher isOn();
     method public static androidx.ui.test.SemanticsMatcher isPopup();
@@ -196,7 +199,6 @@
     method public static androidx.ui.test.SemanticsMatcher isSelectable();
     method public static androidx.ui.test.SemanticsMatcher isSelected();
     method public static androidx.ui.test.SemanticsMatcher isToggleable();
-    method public static androidx.ui.test.SemanticsMatcher isUnselected();
   }
 
   public final class FindersKt {
@@ -408,14 +410,13 @@
   }
 
   public final class AndroidComposeTestRule<T extends androidx.activity.ComponentActivity> implements androidx.ui.test.ComposeTestRule {
-    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, androidx.compose.Recomposer? recomposer, boolean disableTransitions, boolean disableBlinkingCursor);
+    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, boolean disableTransitions, boolean disableBlinkingCursor);
     method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
     method public androidx.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
-    method public androidx.compose.Recomposer? getRecomposer();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
     property public androidx.ui.unit.Density density;
@@ -428,7 +429,8 @@
   }
 
   public final class AndroidComposeTestRuleKt {
-    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! createAndroidComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class ComposeIdlingResourceKt {
diff --git a/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt
index fff9759..9dd52b4 100644
--- a/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt
@@ -42,12 +42,12 @@
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotHidden(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertLabelEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.semantics.AccessibilityRangeInfo value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
@@ -146,7 +146,7 @@
   }
 
   public final class ComposeTestRuleKt {
-    method public static androidx.ui.test.ComposeTestRule createComposeRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static androidx.ui.test.ComposeTestRule createComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class DisableTransitions implements org.junit.rules.TestRule {
@@ -171,7 +171,7 @@
     method public static androidx.ui.test.SemanticsMatcher hasAnyDescendant(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasAnySibling(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasClickAction();
-    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.ui.input.ImeAction actionType);
+    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.compose.ui.text.input.ImeAction actionType);
     method public static androidx.ui.test.SemanticsMatcher hasInputMethodsSupport();
     method public static androidx.ui.test.SemanticsMatcher hasLabel(String label, boolean ignoreCase = false);
     method public static androidx.ui.test.SemanticsMatcher hasNoClickAction();
@@ -185,10 +185,13 @@
     method public static androidx.ui.test.SemanticsMatcher hasValue(String value);
     method public static androidx.ui.test.SemanticsMatcher isDialog();
     method public static androidx.ui.test.SemanticsMatcher isEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isFocused();
     method public static androidx.ui.test.SemanticsMatcher isHidden();
     method public static androidx.ui.test.SemanticsMatcher isInMutuallyExclusiveGroup();
     method public static androidx.ui.test.SemanticsMatcher isNotEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isNotFocused();
     method public static androidx.ui.test.SemanticsMatcher isNotHidden();
+    method public static androidx.ui.test.SemanticsMatcher isNotSelected();
     method public static androidx.ui.test.SemanticsMatcher isOff();
     method public static androidx.ui.test.SemanticsMatcher isOn();
     method public static androidx.ui.test.SemanticsMatcher isPopup();
@@ -196,7 +199,6 @@
     method public static androidx.ui.test.SemanticsMatcher isSelectable();
     method public static androidx.ui.test.SemanticsMatcher isSelected();
     method public static androidx.ui.test.SemanticsMatcher isToggleable();
-    method public static androidx.ui.test.SemanticsMatcher isUnselected();
   }
 
   public final class FindersKt {
@@ -408,14 +410,13 @@
   }
 
   public final class AndroidComposeTestRule<T extends androidx.activity.ComponentActivity> implements androidx.ui.test.ComposeTestRule {
-    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, androidx.compose.Recomposer? recomposer, boolean disableTransitions, boolean disableBlinkingCursor);
+    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, boolean disableTransitions, boolean disableBlinkingCursor);
     method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
     method public androidx.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
-    method public androidx.compose.Recomposer? getRecomposer();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
     property public androidx.ui.unit.Density density;
@@ -428,7 +429,8 @@
   }
 
   public final class AndroidComposeTestRuleKt {
-    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! createAndroidComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class ComposeIdlingResourceKt {
diff --git a/ui/ui-test/api/public_plus_experimental_current.txt b/ui/ui-test/api/public_plus_experimental_current.txt
index fff9759..9dd52b4 100644
--- a/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/ui/ui-test/api/public_plus_experimental_current.txt
@@ -42,12 +42,12 @@
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotHidden(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertLabelEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.semantics.AccessibilityRangeInfo value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
@@ -146,7 +146,7 @@
   }
 
   public final class ComposeTestRuleKt {
-    method public static androidx.ui.test.ComposeTestRule createComposeRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static androidx.ui.test.ComposeTestRule createComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class DisableTransitions implements org.junit.rules.TestRule {
@@ -171,7 +171,7 @@
     method public static androidx.ui.test.SemanticsMatcher hasAnyDescendant(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasAnySibling(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasClickAction();
-    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.ui.input.ImeAction actionType);
+    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.compose.ui.text.input.ImeAction actionType);
     method public static androidx.ui.test.SemanticsMatcher hasInputMethodsSupport();
     method public static androidx.ui.test.SemanticsMatcher hasLabel(String label, boolean ignoreCase = false);
     method public static androidx.ui.test.SemanticsMatcher hasNoClickAction();
@@ -185,10 +185,13 @@
     method public static androidx.ui.test.SemanticsMatcher hasValue(String value);
     method public static androidx.ui.test.SemanticsMatcher isDialog();
     method public static androidx.ui.test.SemanticsMatcher isEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isFocused();
     method public static androidx.ui.test.SemanticsMatcher isHidden();
     method public static androidx.ui.test.SemanticsMatcher isInMutuallyExclusiveGroup();
     method public static androidx.ui.test.SemanticsMatcher isNotEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isNotFocused();
     method public static androidx.ui.test.SemanticsMatcher isNotHidden();
+    method public static androidx.ui.test.SemanticsMatcher isNotSelected();
     method public static androidx.ui.test.SemanticsMatcher isOff();
     method public static androidx.ui.test.SemanticsMatcher isOn();
     method public static androidx.ui.test.SemanticsMatcher isPopup();
@@ -196,7 +199,6 @@
     method public static androidx.ui.test.SemanticsMatcher isSelectable();
     method public static androidx.ui.test.SemanticsMatcher isSelected();
     method public static androidx.ui.test.SemanticsMatcher isToggleable();
-    method public static androidx.ui.test.SemanticsMatcher isUnselected();
   }
 
   public final class FindersKt {
@@ -408,14 +410,13 @@
   }
 
   public final class AndroidComposeTestRule<T extends androidx.activity.ComponentActivity> implements androidx.ui.test.ComposeTestRule {
-    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, androidx.compose.Recomposer? recomposer, boolean disableTransitions, boolean disableBlinkingCursor);
+    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, boolean disableTransitions, boolean disableBlinkingCursor);
     method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
     method public androidx.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
-    method public androidx.compose.Recomposer? getRecomposer();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
     property public androidx.ui.unit.Density density;
@@ -428,7 +429,8 @@
   }
 
   public final class AndroidComposeTestRuleKt {
-    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! createAndroidComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class ComposeIdlingResourceKt {
diff --git a/ui/ui-test/api/restricted_0.1.0-dev16.txt b/ui/ui-test/api/restricted_0.1.0-dev16.txt
index fff9759..9dd52b4 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev16.txt
@@ -42,12 +42,12 @@
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotHidden(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertLabelEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.semantics.AccessibilityRangeInfo value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
@@ -146,7 +146,7 @@
   }
 
   public final class ComposeTestRuleKt {
-    method public static androidx.ui.test.ComposeTestRule createComposeRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static androidx.ui.test.ComposeTestRule createComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class DisableTransitions implements org.junit.rules.TestRule {
@@ -171,7 +171,7 @@
     method public static androidx.ui.test.SemanticsMatcher hasAnyDescendant(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasAnySibling(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasClickAction();
-    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.ui.input.ImeAction actionType);
+    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.compose.ui.text.input.ImeAction actionType);
     method public static androidx.ui.test.SemanticsMatcher hasInputMethodsSupport();
     method public static androidx.ui.test.SemanticsMatcher hasLabel(String label, boolean ignoreCase = false);
     method public static androidx.ui.test.SemanticsMatcher hasNoClickAction();
@@ -185,10 +185,13 @@
     method public static androidx.ui.test.SemanticsMatcher hasValue(String value);
     method public static androidx.ui.test.SemanticsMatcher isDialog();
     method public static androidx.ui.test.SemanticsMatcher isEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isFocused();
     method public static androidx.ui.test.SemanticsMatcher isHidden();
     method public static androidx.ui.test.SemanticsMatcher isInMutuallyExclusiveGroup();
     method public static androidx.ui.test.SemanticsMatcher isNotEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isNotFocused();
     method public static androidx.ui.test.SemanticsMatcher isNotHidden();
+    method public static androidx.ui.test.SemanticsMatcher isNotSelected();
     method public static androidx.ui.test.SemanticsMatcher isOff();
     method public static androidx.ui.test.SemanticsMatcher isOn();
     method public static androidx.ui.test.SemanticsMatcher isPopup();
@@ -196,7 +199,6 @@
     method public static androidx.ui.test.SemanticsMatcher isSelectable();
     method public static androidx.ui.test.SemanticsMatcher isSelected();
     method public static androidx.ui.test.SemanticsMatcher isToggleable();
-    method public static androidx.ui.test.SemanticsMatcher isUnselected();
   }
 
   public final class FindersKt {
@@ -408,14 +410,13 @@
   }
 
   public final class AndroidComposeTestRule<T extends androidx.activity.ComponentActivity> implements androidx.ui.test.ComposeTestRule {
-    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, androidx.compose.Recomposer? recomposer, boolean disableTransitions, boolean disableBlinkingCursor);
+    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, boolean disableTransitions, boolean disableBlinkingCursor);
     method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
     method public androidx.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
-    method public androidx.compose.Recomposer? getRecomposer();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
     property public androidx.ui.unit.Density density;
@@ -428,7 +429,8 @@
   }
 
   public final class AndroidComposeTestRuleKt {
-    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! createAndroidComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class ComposeIdlingResourceKt {
diff --git a/ui/ui-test/api/restricted_current.txt b/ui/ui-test/api/restricted_current.txt
index fff9759..9dd52b4 100644
--- a/ui/ui-test/api/restricted_current.txt
+++ b/ui/ui-test/api/restricted_current.txt
@@ -42,12 +42,12 @@
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotDisplayed(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotEnabled(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotHidden(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertIsNotSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOff(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsOn(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelectable(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsSelected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertIsToggleable(androidx.ui.test.SemanticsNodeInteraction);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertIsUnselected(androidx.ui.test.SemanticsNodeInteraction);
     method public static androidx.ui.test.SemanticsNodeInteraction assertLabelEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertRangeInfoEquals(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.semantics.AccessibilityRangeInfo value);
     method public static androidx.ui.test.SemanticsNodeInteraction assertTextEquals(androidx.ui.test.SemanticsNodeInteraction, String value);
@@ -146,7 +146,7 @@
   }
 
   public final class ComposeTestRuleKt {
-    method public static androidx.ui.test.ComposeTestRule createComposeRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static androidx.ui.test.ComposeTestRule createComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class DisableTransitions implements org.junit.rules.TestRule {
@@ -171,7 +171,7 @@
     method public static androidx.ui.test.SemanticsMatcher hasAnyDescendant(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasAnySibling(androidx.ui.test.SemanticsMatcher matcher);
     method public static androidx.ui.test.SemanticsMatcher hasClickAction();
-    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.ui.input.ImeAction actionType);
+    method public static androidx.ui.test.SemanticsMatcher hasImeAction(androidx.compose.ui.text.input.ImeAction actionType);
     method public static androidx.ui.test.SemanticsMatcher hasInputMethodsSupport();
     method public static androidx.ui.test.SemanticsMatcher hasLabel(String label, boolean ignoreCase = false);
     method public static androidx.ui.test.SemanticsMatcher hasNoClickAction();
@@ -185,10 +185,13 @@
     method public static androidx.ui.test.SemanticsMatcher hasValue(String value);
     method public static androidx.ui.test.SemanticsMatcher isDialog();
     method public static androidx.ui.test.SemanticsMatcher isEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isFocused();
     method public static androidx.ui.test.SemanticsMatcher isHidden();
     method public static androidx.ui.test.SemanticsMatcher isInMutuallyExclusiveGroup();
     method public static androidx.ui.test.SemanticsMatcher isNotEnabled();
+    method public static androidx.ui.test.SemanticsMatcher isNotFocused();
     method public static androidx.ui.test.SemanticsMatcher isNotHidden();
+    method public static androidx.ui.test.SemanticsMatcher isNotSelected();
     method public static androidx.ui.test.SemanticsMatcher isOff();
     method public static androidx.ui.test.SemanticsMatcher isOn();
     method public static androidx.ui.test.SemanticsMatcher isPopup();
@@ -196,7 +199,6 @@
     method public static androidx.ui.test.SemanticsMatcher isSelectable();
     method public static androidx.ui.test.SemanticsMatcher isSelected();
     method public static androidx.ui.test.SemanticsMatcher isToggleable();
-    method public static androidx.ui.test.SemanticsMatcher isUnselected();
   }
 
   public final class FindersKt {
@@ -408,14 +410,13 @@
   }
 
   public final class AndroidComposeTestRule<T extends androidx.activity.ComponentActivity> implements androidx.ui.test.ComposeTestRule {
-    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, androidx.compose.Recomposer? recomposer, boolean disableTransitions, boolean disableBlinkingCursor);
+    ctor public AndroidComposeTestRule(androidx.test.ext.junit.rules.ActivityScenarioRule<T> activityRule, boolean disableTransitions, boolean disableBlinkingCursor);
     method public org.junit.runners.model.Statement apply(org.junit.runners.model.Statement base, org.junit.runner.Description? description);
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
     method public androidx.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
-    method public androidx.compose.Recomposer? getRecomposer();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
     property public androidx.ui.unit.Density density;
@@ -428,7 +429,8 @@
   }
 
   public final class AndroidComposeTestRuleKt {
-    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(androidx.compose.Recomposer? recomposer = null, boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! AndroidComposeTestRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
+    method public static inline <reified T extends androidx.activity.ComponentActivity> androidx.ui.test.android.AndroidComposeTestRule<T>! createAndroidComposeRule(boolean disableTransitions = false, boolean disableBlinkingCursor = true);
   }
 
   public final class ComposeIdlingResourceKt {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
index e0eb970..6ccecc1 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
@@ -166,33 +166,33 @@
     }
 
     @Test(expected = AssertionError::class)
-    fun assertIsUnselected_forSelectedElement_throwsError() {
+    fun assertIsNotSelected_forSelectedElement_throwsError() {
         composeTestRule.setContent {
             BoundaryNode { testTag = "test"; selected = true }
         }
 
         onNodeWithTag("test")
-            .assertIsUnselected()
+            .assertIsNotSelected()
     }
 
     @Test
-    fun assertIsUnselected_forUnselectedElement_isOk() {
+    fun assertIsNotSelected_forNotSelectedElement_isOk() {
         composeTestRule.setContent {
             BoundaryNode { testTag = "test"; selected = false }
         }
 
         onNodeWithTag("test")
-            .assertIsUnselected()
+            .assertIsNotSelected()
     }
 
     @Test(expected = AssertionError::class)
-    fun assertIsUnselected_forNotSelectableElement_throwsError() {
+    fun assertIsNotSelected_forNotSelectableElement_throwsError() {
         composeTestRule.setContent {
             BoundaryNode { testTag = "test"; }
         }
 
         onNodeWithTag("test")
-            .assertIsUnselected()
+            .assertIsNotSelected()
     }
     @Test(expected = AssertionError::class)
     fun assertItemInExclusiveGroup_forItemNotInGroup_throwsError() {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt
index 0dfdb44..88e478c 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.layout.Stack
 import androidx.ui.material.Button
 import androidx.ui.material.MaterialTheme
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -48,14 +48,14 @@
 }
 
 /**
- * Tests that we can launch custom activities via [AndroidComposeTestRule].
+ * Tests that we can launch custom activities via [createAndroidComposeRule].
  */
 @MediumTest
 @RunWith(JUnit4::class)
 class CustomActivityTest {
 
     @get:Rule
-    val testRule = AndroidComposeTestRule<CustomActivity>()
+    val testRule = createAndroidComposeRule<CustomActivity>()
 
     @Test
     fun launchCustomActivity() {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
index 0dd5872..9cc3efb 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
@@ -55,7 +55,8 @@
                 "Disabled = 'kotlin.Unit'\n" +
                 "Text = 'Toggle'\n" +
                 "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
-                "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
+                "java.util.List<androidx.compose.ui.text.TextLayoutResult>, " +
+                "java.lang.Boolean>)'\n" +
                 "MergeDescendants = 'true'\n" +
                 "Has 1 sibling\n" +
                 "Selector used: (TestTag = 'MyButton')"
@@ -232,7 +233,8 @@
                 "Node #X at (X, X, X, X)px\n" +
                 "Text = 'Hello'\n" +
                 "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
-                "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
+                "java.util.List<androidx.compose.ui.text.TextLayoutResult>," +
+                " java.lang.Boolean>)'\n" +
                 "Has 1 sibling\n" +
                 "Original selector: Text = 'Hello' (ignoreCase: false)"
         ) {
@@ -259,7 +261,8 @@
                 "Node #X at (X, X, X, X)px\n" +
                 "Text = 'Hello'\n" +
                 "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
-                "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
+                "java.util.List<androidx.compose.ui.text.TextLayoutResult>," +
+                " java.lang.Boolean>)'\n" +
                 "Has 1 sibling\n" +
                 "Original selector: Text = 'Hello' (ignoreCase: false)"
         ) {
@@ -286,7 +289,8 @@
                 "Node #X at (X, X, X, X)px\n" +
                 "Text = 'Hello'\n" +
                 "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<" +
-                "java.util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
+                "java.util.List<androidx.compose.ui.text.TextLayoutResult>," +
+                " java.lang.Boolean>)'\n" +
                 "Has 1 sibling\n" +
                 "Original selector: Text = 'Hello' (ignoreCase: false)"
         ) {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
index 7148d8d..2b07a5b 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
@@ -26,7 +26,7 @@
 import androidx.ui.semantics.testTag
 import androidx.ui.semantics.text
 import androidx.ui.test.util.expectError
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
index 094dd70..1830d43 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.Canvas
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
@@ -37,7 +37,7 @@
 class FirstDrawTest {
 
     @get:Rule
-    val testRule = AndroidComposeTestRule<ComponentActivity>()
+    val testRule = createAndroidComposeRule<ComponentActivity>()
 
     /**
      * Tests that the compose tree has been drawn at least once when [onIdle] finishes.
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/LateSetContentTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/LateSetContentTest.kt
index 52f0e3f..2fd82e1 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/LateSetContentTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/LateSetContentTest.kt
@@ -22,7 +22,7 @@
 import androidx.activity.ComponentActivity
 import androidx.test.filters.LargeTest
 import androidx.ui.core.setContent
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.util.BoundaryNode
 import org.junit.Rule
 import org.junit.Test
@@ -30,7 +30,7 @@
 @LargeTest
 class LateSetContentTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<Activity>()
+    val composeTestRule = createAndroidComposeRule<Activity>()
 
     @Test
     fun test() {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesClickTest.kt
index 84f78cb..a446f5f 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesClickTest.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.testTag
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.util.SinglePointerInputRecorder
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
@@ -36,7 +36,7 @@
 class MultipleActivitiesClickTest {
 
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<Activity1>(disableTransitions = true)
+    val composeTestRule = createAndroidComposeRule<Activity1>(disableTransitions = true)
 
     @Test
     fun test() {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFindTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFindTest.kt
index 6966c28..ec5cebe 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFindTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFindTest.kt
@@ -23,14 +23,14 @@
 import androidx.ui.core.setContent
 import androidx.ui.core.testTag
 import androidx.compose.foundation.Box
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import org.junit.Rule
 import org.junit.Test
 
 class MultipleActivitiesFindTest {
 
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<Activity1>(disableTransitions = true)
+    val composeTestRule = createAndroidComposeRule<Activity1>(disableTransitions = true)
 
     @Test
     fun test() {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFirstDrawTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFirstDrawTest.kt
index 0192da2..662ce83c 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFirstDrawTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleActivitiesFirstDrawTest.kt
@@ -24,7 +24,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Box
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import org.junit.Rule
 import org.junit.Test
 
@@ -32,7 +32,7 @@
 class MultipleActivitiesFirstDrawTest {
 
     @get:Rule
-    val testRule = AndroidComposeTestRule<Activity1>()
+    val testRule = createAndroidComposeRule<Activity1>()
 
     @Test
     fun test() {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
index 1e15607..e45b0c0 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
@@ -35,7 +35,7 @@
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.Surface
 import androidx.ui.material.TriStateCheckbox
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -59,7 +59,7 @@
 class MultipleComposeRootsTest {
 
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     @get:Rule
     val disableTransitions = DisableTransitions()
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
index c625139..eed138f 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
@@ -70,7 +70,7 @@
                 "Node #X at (X, X, X, X)px\n" +
                 "Text = 'Hello'\n" +
                 "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<java" +
-                ".util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
+                ".util.List<androidx.compose.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
                 "Has 1 sibling")
     }
 
@@ -88,12 +88,12 @@
                 "1) Node #X at (X, X, X, X)px\n" +
                 "Text = 'Hello'\n" +
                 "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<java" +
-                ".util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
+                ".util.List<androidx.compose.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
                 "Has 1 sibling\n" +
                 "2) Node #X at (X, X, X, X)px\n" +
                 "Text = 'World'\n" +
                 "GetTextLayoutResult = 'AccessibilityAction(label=null, action=Function1<java" +
-                ".util.List<androidx.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
+                ".util.List<androidx.compose.ui.text.TextLayoutResult>, java.lang.Boolean>)'\n" +
                 "Has 1 sibling")
     }
 
@@ -124,13 +124,15 @@
                 "<java.lang.Boolean>)'\n" +
                 "    |    Text = 'Button'\n" +
                 "    |    GetTextLayoutResult = 'AccessibilityAction(label=null, " +
-                "action=Function1<java.util.List<androidx.ui.text.TextLayoutResult>, java.lang" +
+                "action=Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>," +
+                " java.lang" +
                 ".Boolean>)'\n" +
                 "    |    MergeDescendants = 'true'\n" +
                 "    |-Node #X at (X, X, X, X)px\n" +
                 "      Text = 'Hello'\n" +
                 "      GetTextLayoutResult = 'AccessibilityAction(label=null, " +
-                "action=Function1<java.util.List<androidx.ui.text.TextLayoutResult>, java.lang" +
+                "action=Function1<java.util.List<androidx.compose.ui.text.TextLayoutResult>," +
+                " java.lang" +
                 ".Boolean>)'")
     }
 
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
index ed12e7c..cc93855 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
@@ -23,8 +23,8 @@
 import androidx.ui.core.testTag
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.ui.input.ImeAction
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.ui.test.util.BoundaryNode
 import androidx.ui.test.util.expectError
 import androidx.ui.test.util.expectErrorMessageStartsWith
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt
index 79bf41d..daaa8da 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt
@@ -31,7 +31,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Stack
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.android.ComposeNotIdleException
 import androidx.ui.test.util.expectError
 import org.junit.After
@@ -47,7 +47,7 @@
 class TimeOutTest {
 
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     private var idlingResourcePolicy: IdlingPolicy? = null
     private var masterPolicy: IdlingPolicy? = null
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
index 5515009..db919da0 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
@@ -120,12 +120,12 @@
 fun SemanticsNodeInteraction.assertIsSelected(): SemanticsNodeInteraction = assert(isSelected())
 
 /**
- * Asserts that the current semantics node is unselected.
+ * Asserts that the current semantics node is not selected.
  *
  * Throws [AssertionError] if the node is selected or not selectable.
  */
-fun SemanticsNodeInteraction.assertIsUnselected(): SemanticsNodeInteraction =
-    assert(isUnselected())
+fun SemanticsNodeInteraction.assertIsNotSelected(): SemanticsNodeInteraction =
+    assert(isNotSelected())
 
 /**
  * Asserts that the current semantics node is toggleable.
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt b/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
index 97a593d..b9e7874 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
@@ -19,18 +19,17 @@
 import android.util.DisplayMetrics
 import androidx.activity.ComponentActivity
 import androidx.compose.Composable
-import androidx.compose.Recomposer
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.unit.Density
 import org.junit.rules.TestRule
 
 /**
  * Enables to run tests of individual composables without having to do manual setup. For Android
- * tests see [AndroidComposeTestRule]. Normally this rule is obtained by using [createComposeRule]
+ * tests see [createAndroidComposeRule]. Normally this rule is obtained by using [createComposeRule]
  * factory that provides proper implementation (depending if running host side or Android side).
  *
  * However if you really need Android specific dependencies and don't want your test to be abstract
- * you can still create [AndroidComposeTestRule] directly and access its underlying ActivityTestRule
+ * you can still create [createAndroidComposeRule] directly and access its underlying Activity.
  */
 interface ComposeTestRule : TestRule {
     /**
@@ -81,18 +80,16 @@
  * Factory method to provide implementation of [ComposeTestRule].
  *
  * This method is useful for tests in compose libraries where no custom Activity is usually
- * needed. For app tests or launching custom activities, see [AndroidComposeTestRule].
+ * needed. For app tests or launching custom activities, see [createAndroidComposeRule].
  *
  * For Android this will use the default Activity (android.app.Activity). You need to add a
  * reference to this activity into the manifest file of the corresponding tests (usually in
  * androidTest/AndroidManifest.xml).
  */
 fun createComposeRule(
-    recomposer: Recomposer? = null,
     disableTransitions: Boolean = false,
     disableBlinkingCursor: Boolean = true
-): ComposeTestRule = AndroidComposeTestRule<ComponentActivity>(
-    recomposer,
+): ComposeTestRule = createAndroidComposeRule<ComponentActivity>(
     disableTransitions,
     disableBlinkingCursor
 )
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Filters.kt b/ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
index 3421989..4362280 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
@@ -20,7 +20,7 @@
 import androidx.ui.core.semantics.getOrNull
 import androidx.compose.foundation.selection.ToggleableState
 import androidx.compose.foundation.semantics.FoundationSemanticsProperties
-import androidx.ui.input.ImeAction
+import androidx.compose.ui.text.input.ImeAction
 import androidx.ui.semantics.AccessibilityRangeInfo
 import androidx.ui.semantics.SemanticsActions
 import androidx.ui.semantics.SemanticsProperties
@@ -88,10 +88,26 @@
  *
  * @see FoundationSemanticsProperties.Selected
  */
-fun isUnselected(): SemanticsMatcher =
+fun isNotSelected(): SemanticsMatcher =
     SemanticsMatcher.expectValue(FoundationSemanticsProperties.Selected, false)
 
 /**
+ * Returns whether the node is focused.
+ *
+ * @see SemanticsProperties.Focused
+ */
+fun isFocused(): SemanticsMatcher =
+    SemanticsMatcher.expectValue(SemanticsProperties.Focused, true)
+
+/**
+ * Returns whether the node is not focused.
+ *
+ * @see SemanticsProperties.Focused
+ */
+fun isNotFocused(): SemanticsMatcher =
+    SemanticsMatcher.expectValue(SemanticsProperties.Focused, false)
+
+/**
  * Return whether the node has a semantics click action defined.
  *
  * @see SemanticsActions.OnClick
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Output.kt b/ui/ui-test/src/main/java/androidx/ui/test/Output.kt
index 6778ad5..88be6de 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Output.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Output.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.semantics.SemanticsConfiguration
 import androidx.ui.core.semantics.SemanticsNode
 import androidx.ui.semantics.SemanticsProperties
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import androidx.ui.unit.PxBounds
 import androidx.ui.unit.toSize
 
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/TextActions.kt b/ui/ui-test/src/main/java/androidx/ui/test/TextActions.kt
index 712b153..14b76c5 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/TextActions.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/TextActions.kt
@@ -18,10 +18,10 @@
 
 import androidx.ui.core.AndroidOwner
 import androidx.ui.core.ExperimentalLayoutNodeApi
-import androidx.ui.input.CommitTextEditOp
-import androidx.ui.input.DeleteAllEditOp
-import androidx.ui.input.EditOperation
-import androidx.ui.input.ImeAction
+import androidx.compose.ui.text.input.CommitTextEditOp
+import androidx.compose.ui.text.input.DeleteAllEditOp
+import androidx.compose.ui.text.input.EditOperation
+import androidx.compose.ui.text.input.ImeAction
 import androidx.compose.foundation.text.TextSemanticsProperties
 
 /**
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/TextInputServiceForTests.kt b/ui/ui-test/src/main/java/androidx/ui/test/TextInputServiceForTests.kt
index 3f891aa..8cd58f7 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/TextInputServiceForTests.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/TextInputServiceForTests.kt
@@ -16,13 +16,13 @@
 
 package androidx.ui.test
 
-import androidx.ui.input.EditOperation
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.ImeAction
-import androidx.ui.input.InputSessionToken
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.PlatformTextInputService
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.EditOperation
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.InputSessionToken
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.PlatformTextInputService
+import androidx.compose.ui.text.input.TextInputService
 
 /**
  * Extra layer that serves as an observer between the text input service and text fields.
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
index e30d703..25660e88 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
@@ -27,13 +27,14 @@
 import androidx.ui.core.setContent
 import androidx.compose.foundation.InternalFoundationApi
 import androidx.compose.foundation.blinkingCursorEnabled
-import androidx.ui.input.textInputServiceFactory
+import androidx.compose.ui.text.input.textInputServiceFactory
 import androidx.ui.test.AnimationClockTestRule
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.test.ComposeTestCaseSetup
 import androidx.ui.test.ComposeTestRule
 import androidx.ui.test.ExperimentalTesting
 import androidx.ui.test.TextInputServiceForTests
+import androidx.ui.test.createComposeRule
 import androidx.ui.test.isOnUiThread
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.waitForIdle
@@ -42,17 +43,16 @@
 import org.junit.runners.model.Statement
 
 /**
- * Factory method to provide implementation of [AndroidComposeTestRule].
+ * Factory method to provide android specific implementation of [createComposeRule].
  *
  * This method is useful for tests that require a custom Activity. This is usually the case for
  * app tests. Make sure that you add the provided activity into your app's manifest file (usually
  * in main/AndroidManifest.xml).
  *
  * If you don't care about specific activity and just want to test composables in general, see
- * [AndroidComposeTestRule].
+ * [createComposeRule].
  */
-inline fun <reified T : ComponentActivity> AndroidComposeTestRule(
-    recomposer: Recomposer? = null,
+inline fun <reified T : ComponentActivity> createAndroidComposeRule(
     disableTransitions: Boolean = false,
     disableBlinkingCursor: Boolean = true
 ): AndroidComposeTestRule<T> {
@@ -61,24 +61,37 @@
     // to set it again via our API. In such case we won't be able to dispose the old composition.
     // Other option would be to provide a smaller interface that does not expose these methods.
     return AndroidComposeTestRule(
-        ActivityScenarioRule(T::class.java),
-        recomposer,
-        disableTransitions,
-        disableBlinkingCursor
+        activityRule = ActivityScenarioRule(T::class.java),
+        disableTransitions = disableTransitions,
+        disableBlinkingCursor = disableBlinkingCursor
     )
 }
 
 /**
- * Android specific implementation of [ComposeTestRule].
+ * Factory method to provide android specific implementation of [createComposeRule].
  *
- * If [recomposer] is `null` the thread-specific [Recomposer.current] will be used when
- * [setContent] is called.
+ * This method is useful for tests that require a custom Activity. This is usually the case for
+ * app tests. Make sure that you add the provided activity into your app's manifest file (usually
+ * in main/AndroidManifest.xml).
+ *
+ * If you don't care about specific activity and just want to test composables in general, see
+ * [createComposeRule].
+ */
+@Deprecated("Renamed to createAndroidComposeRule",
+    replaceWith = ReplaceWith("createAndroidComposeRule(disableTransitions, " +
+            "disableBlinkingCursor)"))
+inline fun <reified T : ComponentActivity> AndroidComposeTestRule(
+    disableTransitions: Boolean = false,
+    disableBlinkingCursor: Boolean = true
+): AndroidComposeTestRule<T> = createAndroidComposeRule(disableTransitions, disableBlinkingCursor)
+
+/**
+ * Android specific implementation of [ComposeTestRule].
  */
 class AndroidComposeTestRule<T : ComponentActivity>(
     // TODO(b/153623653): Remove activityRule from arguments when AndroidComposeTestRule can
     //  work with any kind of Activity launcher.
     val activityRule: ActivityScenarioRule<T>,
-    val recomposer: Recomposer? = null,
     private val disableTransitions: Boolean = false,
     private val disableBlinkingCursor: Boolean = true
 ) : ComposeTestRule {
@@ -123,7 +136,7 @@
 
         runOnUiThread {
             val composition = activity.setContent(
-                recomposer ?: Recomposer.current(),
+                Recomposer.current(),
                 composable
             )
             val contentViewGroup = activity.findViewById<ViewGroup>(android.R.id.content)
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt
index ecf2ab6..ab3de0f 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt
@@ -41,7 +41,7 @@
  *
  * This makes sure that Espresso is able to wait for any pending changes in Compose. This
  * resource is automatically registered when any compose testing APIs are used including
- * [AndroidComposeTestRule]. If you for some reasons want to only use Espresso but still have it
+ * [createAndroidComposeRule]. If you for some reasons want to only use Espresso but still have it
  * wait for Compose being idle you can use this function.
  */
 fun registerComposeWithEspresso() {
@@ -76,7 +76,7 @@
  *
  * This makes sure that Espresso is able to wait for any pending changes in Compose. This
  * resource is automatically registered when any compose testing APIs are used including
- * [AndroidComposeTestRule]. If you for some reasons want to only use Espresso but still have it
+ * [createAndroidComposeRule]. If you for some reasons want to only use Espresso but still have it
  * wait for Compose being idle you can register this yourself via [registerSelfIntoEspresso].
  */
 internal object ComposeIdlingResource : BaseIdlingResource(), IdlingResourceWithDiagnostics {
diff --git a/ui/ui-text-android/api/0.1.0-dev16.txt b/ui/ui-text-android/api/0.1.0-dev16.txt
index 9c65639..26d769c 100644
--- a/ui/ui-text-android/api/0.1.0-dev16.txt
+++ b/ui/ui-text-android/api/0.1.0-dev16.txt
@@ -1,5 +1,5 @@
 // Signature format: 3.0
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.android {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
@@ -18,7 +18,7 @@
 
 }
 
-package androidx.ui.text.platform.style {
+package androidx.compose.ui.text.android.style {
 
   public final class FontWeightStyleSpanKt {
   }
diff --git a/ui/ui-text-android/api/current.txt b/ui/ui-text-android/api/current.txt
index 9c65639..26d769c 100644
--- a/ui/ui-text-android/api/current.txt
+++ b/ui/ui-text-android/api/current.txt
@@ -1,5 +1,5 @@
 // Signature format: 3.0
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.android {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
@@ -18,7 +18,7 @@
 
 }
 
-package androidx.ui.text.platform.style {
+package androidx.compose.ui.text.android.style {
 
   public final class FontWeightStyleSpanKt {
   }
diff --git a/ui/ui-text-android/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-text-android/api/public_plus_experimental_0.1.0-dev16.txt
index 9c65639..26d769c 100644
--- a/ui/ui-text-android/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-text-android/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,5 +1,5 @@
 // Signature format: 3.0
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.android {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
@@ -18,7 +18,7 @@
 
 }
 
-package androidx.ui.text.platform.style {
+package androidx.compose.ui.text.android.style {
 
   public final class FontWeightStyleSpanKt {
   }
diff --git a/ui/ui-text-android/api/public_plus_experimental_current.txt b/ui/ui-text-android/api/public_plus_experimental_current.txt
index 9c65639..26d769c 100644
--- a/ui/ui-text-android/api/public_plus_experimental_current.txt
+++ b/ui/ui-text-android/api/public_plus_experimental_current.txt
@@ -1,5 +1,5 @@
 // Signature format: 3.0
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.android {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
@@ -18,7 +18,7 @@
 
 }
 
-package androidx.ui.text.platform.style {
+package androidx.compose.ui.text.android.style {
 
   public final class FontWeightStyleSpanKt {
   }
diff --git a/ui/ui-text-android/api/restricted_0.1.0-dev16.txt b/ui/ui-text-android/api/restricted_0.1.0-dev16.txt
index 9c65639..26d769c 100644
--- a/ui/ui-text-android/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-text-android/api/restricted_0.1.0-dev16.txt
@@ -1,5 +1,5 @@
 // Signature format: 3.0
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.android {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
@@ -18,7 +18,7 @@
 
 }
 
-package androidx.ui.text.platform.style {
+package androidx.compose.ui.text.android.style {
 
   public final class FontWeightStyleSpanKt {
   }
diff --git a/ui/ui-text-android/api/restricted_current.txt b/ui/ui-text-android/api/restricted_current.txt
index 9c65639..26d769c 100644
--- a/ui/ui-text-android/api/restricted_current.txt
+++ b/ui/ui-text-android/api/restricted_current.txt
@@ -1,5 +1,5 @@
 // Signature format: 3.0
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.android {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalPlatformTextApi {
   }
@@ -18,7 +18,7 @@
 
 }
 
-package androidx.ui.text.platform.style {
+package androidx.compose.ui.text.android.style {
 
   public final class FontWeightStyleSpanKt {
   }
diff --git a/ui/ui-text-android/src/androidTest/AndroidManifest.xml b/ui/ui-text-android/src/androidTest/AndroidManifest.xml
index 5077312..e183574 100644
--- a/ui/ui-text-android/src/androidTest/AndroidManifest.xml
+++ b/ui/ui-text-android/src/androidTest/AndroidManifest.xml
@@ -14,4 +14,4 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest package="androidx.ui.text.platform.test" />
+<manifest package="androidx.compose.ui.text.android" />
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/BoringLayoutFactoryTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
similarity index 97%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/BoringLayoutFactoryTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
index ef1b08e..3c52831 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/BoringLayoutFactoryTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/BoringLayoutFactoryTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.text.BoringLayout
 import android.text.BoringLayout.Metrics
@@ -26,8 +26,8 @@
 import android.text.style.ForegroundColorSpan
 import android.text.style.LeadingMarginSpan
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.BoringLayoutFactory.create
-import androidx.ui.text.platform.BoringLayoutFactory.measure
+import androidx.compose.ui.text.android.BoringLayoutFactory.create
+import androidx.compose.ui.text.android.BoringLayoutFactory.measure
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutCompatTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutCompatTest.kt
similarity index 98%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutCompatTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutCompatTest.kt
index 2792e60..55623b0 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutCompatTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutCompatTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.os.Build
 import android.text.Layout
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutGetHorizontalTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
similarity index 99%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutGetHorizontalTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
index 9cd938f..a9e4e03 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutGetHorizontalTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutGetHorizontalTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.text.TextDirectionHeuristic
 import android.text.TextDirectionHeuristics
@@ -22,7 +22,7 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.test.R
+import androidx.compose.ui.text.font.test.R
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutHelperParagraphTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutHelperParagraphTest.kt
similarity index 98%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutHelperParagraphTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutHelperParagraphTest.kt
index f07fb09..f62beba 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutHelperParagraphTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutHelperParagraphTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.os.Build
 import android.text.Layout
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutIntrinsicsTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
similarity index 96%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutIntrinsicsTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
index ccbbe4c..b7b427e 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/LayoutIntrinsicsTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/LayoutIntrinsicsTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.text.BoringLayout
 import android.text.SpannableString
@@ -24,7 +24,7 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.test.R
+import androidx.compose.ui.text.font.test.R
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/SegmentBreakerTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
similarity index 94%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/SegmentBreakerTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
index de6a1be..7a3db3e 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/SegmentBreakerTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/SegmentBreakerTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.text.TextDirectionHeuristic
 import android.text.TextDirectionHeuristics
@@ -22,9 +22,9 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.test.R
-import androidx.ui.text.platform.animation.SegmentBreaker
-import androidx.ui.text.platform.animation.SegmentType
+import androidx.compose.ui.text.font.test.R
+import androidx.compose.ui.text.android.animation.SegmentBreaker
+import androidx.compose.ui.text.android.animation.SegmentType
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/StaticLayoutFactoryTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
similarity index 99%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/StaticLayoutFactoryTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
index 2a77129..c772fa9 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/StaticLayoutFactoryTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/StaticLayoutFactoryTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.app.Instrumentation
 import android.graphics.Typeface
@@ -25,7 +25,7 @@
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.test.R
+import androidx.compose.ui.text.font.test.R
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/TextLayoutSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
similarity index 97%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/TextLayoutSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
index b1fa6af..81bf62b 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/TextLayoutSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutSpanTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.graphics.Typeface
 import android.text.SpannableString
@@ -24,9 +24,9 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.test.R
-import androidx.ui.text.platform.style.BaselineShiftSpan
-import androidx.ui.text.platform.style.SkewXSpan
+import androidx.compose.ui.text.font.test.R
+import androidx.compose.ui.text.android.style.BaselineShiftSpan
+import androidx.compose.ui.text.android.style.SkewXSpan
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import org.junit.Before
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/TextLayoutTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
similarity index 98%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/TextLayoutTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
index 7fb8808..04160f7 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/TextLayoutTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/TextLayoutTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.graphics.Typeface
 import android.text.BoringLayout
@@ -26,8 +26,8 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.test.R
-import androidx.ui.text.platform.style.BaselineShiftSpan
+import androidx.compose.ui.text.font.test.R
+import androidx.compose.ui.text.android.style.BaselineShiftSpan
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/animation/SegmentBreakerBreakSegmentTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
similarity index 99%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/animation/SegmentBreakerBreakSegmentTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
index 687c1d4..ae13037 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/animation/SegmentBreakerBreakSegmentTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/animation/SegmentBreakerBreakSegmentTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.animation
+package androidx.compose.ui.text.android.animation
 
 import android.text.TextDirectionHeuristic
 import android.text.TextDirectionHeuristics
@@ -22,10 +22,10 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.test.R
-import androidx.ui.text.platform.InternalPlatformTextApi
-import androidx.ui.text.platform.LayoutHelper
-import androidx.ui.text.platform.StaticLayoutFactory
+import androidx.compose.ui.text.font.test.R
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.android.LayoutHelper
+import androidx.compose.ui.text.android.StaticLayoutFactory
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/selection/WordBoundaryTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/selection/WordBoundaryTest.kt
similarity index 98%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/selection/WordBoundaryTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/selection/WordBoundaryTest.kt
index 10ad385..3181c68 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/selection/WordBoundaryTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/selection/WordBoundaryTest.kt
@@ -13,10 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.selection
+package androidx.compose.ui.text.android.selection
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/selection/WordIteratorTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/selection/WordIteratorTest.kt
similarity index 99%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/selection/WordIteratorTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/selection/WordIteratorTest.kt
index 226ccb8..412730e 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/selection/WordIteratorTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/selection/WordIteratorTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.selection
+package androidx.compose.ui.text.android.selection
 
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/BaselineShiftSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/BaselineShiftSpanTest.kt
similarity index 93%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/BaselineShiftSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/BaselineShiftSpanTest.kt
index 982d10a..1d71d79 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/BaselineShiftSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/BaselineShiftSpanTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth.assertThat
 
 import org.junit.Test
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontFeatureSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontFeatureSpanTest.kt
similarity index 94%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontFeatureSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontFeatureSpanTest.kt
index 747972b..56e775d 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontFeatureSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontFeatureSpanTest.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontSpanTest.kt
similarity index 91%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontSpanTest.kt
index 747ce19..2a99acd64 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontSpanTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Typeface
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontWeightStyleSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontWeightStyleSpanTest.kt
similarity index 98%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontWeightStyleSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontWeightStyleSpanTest.kt
index e0f9693..7e6a59a 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/FontWeightStyleSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/FontWeightStyleSpanTest.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Typeface
 import android.graphics.fonts.FontStyle
 import android.text.TextPaint
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/LetterSpacingSpanEmTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEmTest.kt
similarity index 92%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/LetterSpacingSpanEmTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEmTest.kt
index a423f9a..707867c7 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/LetterSpacingSpanEmTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEmTest.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/LetterSpacingSpanPxTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPxTest.kt
similarity index 96%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/LetterSpacingSpanPxTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPxTest.kt
index e30f9d3..0d48e64 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/LetterSpacingSpanPxTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPxTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.doReturn
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/PlaceholderSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/PlaceholderSpanTest.kt
similarity index 99%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/PlaceholderSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/PlaceholderSpanTest.kt
index 04dc605..1ef8f8e 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/PlaceholderSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/PlaceholderSpanTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Paint
 import android.text.TextPaint
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/ShadowSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/ShadowSpanTest.kt
similarity index 92%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/ShadowSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/ShadowSpanTest.kt
index 2518d8e..51558d7 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/ShadowSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/ShadowSpanTest.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/SkewXSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/SkewXSpanTest.kt
similarity index 92%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/SkewXSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/SkewXSpanTest.kt
index dcc02df..b62b398 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/SkewXSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/SkewXSpanTest.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/TypefaceSpanTest.kt b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/TypefaceSpanTest.kt
similarity index 93%
rename from ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/TypefaceSpanTest.kt
rename to ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/TypefaceSpanTest.kt
index 11d6009..5807061 100644
--- a/ui/ui-text-android/src/androidTest/java/androidx/ui/text/platform/style/TypefaceSpanTest.kt
+++ b/ui/ui-text-android/src/androidTest/java/androidx/compose/ui/text/android/style/TypefaceSpanTest.kt
@@ -13,12 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Typeface
 import android.text.TextPaint
 import androidx.test.filters.SmallTest
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-android/src/main/AndroidManifest.xml b/ui/ui-text-android/src/main/AndroidManifest.xml
index c7bd444..e183574 100644
--- a/ui/ui-text-android/src/main/AndroidManifest.xml
+++ b/ui/ui-text-android/src/main/AndroidManifest.xml
@@ -14,4 +14,4 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest package="androidx.ui.text.platform" />
+<manifest package="androidx.compose.ui.text.android" />
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/BoringLayoutFactory.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
similarity index 98%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/BoringLayoutFactory.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
index 210dba6..f4300cb 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/BoringLayoutFactory.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/BoringLayoutFactory.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.text.BoringLayout
 import android.text.BoringLayout.Metrics
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/CharSequenceCharacterIterator.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/CharSequenceCharacterIterator.kt
similarity index 98%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/CharSequenceCharacterIterator.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/CharSequenceCharacterIterator.kt
index 1307d6f..b1fc875 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/CharSequenceCharacterIterator.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/CharSequenceCharacterIterator.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import java.text.CharacterIterator
 
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/InternalPlatformTextApi.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/InternalPlatformTextApi.kt
similarity index 95%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/InternalPlatformTextApi.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/InternalPlatformTextApi.kt
index b0b6832..d87011e 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/InternalPlatformTextApi.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/InternalPlatformTextApi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 @RequiresOptIn(
     level = RequiresOptIn.Level.ERROR,
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutCompat.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
similarity index 98%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutCompat.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
index 4b9e4d0..015f6a1 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutCompat.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutCompat.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.graphics.text.LineBreaker
 import android.text.Layout
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutHelper.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
similarity index 99%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutHelper.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
index c9ef027..3f2bad5 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutHelper.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutHelper.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.text.Layout
 import android.text.TextUtils
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutIntrinsics.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt
similarity index 96%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutIntrinsics.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt
index ec8951b..35dc84c 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/LayoutIntrinsics.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/LayoutIntrinsics.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.text.BoringLayout
 import android.text.Layout
@@ -45,7 +45,7 @@
     /**
      * Calculate minimum intrinsic width of the CharSequence.
      *
-     * @see androidx.ui.text.platform.minIntrinsicWidth
+     * @see androidx.compose.ui.text.android.minIntrinsicWidth
      */
     val minIntrinsicWidth: Float by lazy {
         minIntrinsicWidth(charSequence, textPaint)
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/StaticLayoutFactory.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
similarity index 96%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/StaticLayoutFactory.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
index 6921147..26128c9 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/StaticLayoutFactory.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/StaticLayoutFactory.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.os.Build
 import android.text.Layout.Alignment
@@ -25,9 +25,9 @@
 import android.util.Log
 import androidx.annotation.FloatRange
 import androidx.annotation.IntRange
-import androidx.ui.text.platform.LayoutCompat.BreakStrategy
-import androidx.ui.text.platform.LayoutCompat.HyphenationFrequency
-import androidx.ui.text.platform.LayoutCompat.JustificationMode
+import androidx.compose.ui.text.android.LayoutCompat.BreakStrategy
+import androidx.compose.ui.text.android.LayoutCompat.HyphenationFrequency
+import androidx.compose.ui.text.android.LayoutCompat.JustificationMode
 import java.lang.reflect.Constructor
 import java.lang.reflect.InvocationTargetException
 
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/TextLayout.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
similarity index 86%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/TextLayout.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
index b5ed4a9..a35797e 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/TextLayout.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/TextLayout.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.android
 
 import android.graphics.Canvas
 import android.graphics.Path
@@ -26,31 +26,31 @@
 import androidx.annotation.Px
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
-import androidx.ui.text.platform.LayoutCompat.ALIGN_CENTER
-import androidx.ui.text.platform.LayoutCompat.ALIGN_LEFT
-import androidx.ui.text.platform.LayoutCompat.ALIGN_NORMAL
-import androidx.ui.text.platform.LayoutCompat.ALIGN_OPPOSITE
-import androidx.ui.text.platform.LayoutCompat.ALIGN_RIGHT
-import androidx.ui.text.platform.LayoutCompat.BreakStrategy
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_ALIGNMENT
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_BREAK_STRATEGY
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_HYPHENATION_FREQUENCY
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_INCLUDE_PADDING
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_JUSTIFICATION_MODE
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_LINESPACING_EXTRA
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_TEXT_DIRECTION
-import androidx.ui.text.platform.LayoutCompat.HyphenationFrequency
-import androidx.ui.text.platform.LayoutCompat.JustificationMode
-import androidx.ui.text.platform.LayoutCompat.TEXT_DIRECTION_ANY_RTL_LTR
-import androidx.ui.text.platform.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
-import androidx.ui.text.platform.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
-import androidx.ui.text.platform.LayoutCompat.TEXT_DIRECTION_LOCALE
-import androidx.ui.text.platform.LayoutCompat.TEXT_DIRECTION_LTR
-import androidx.ui.text.platform.LayoutCompat.TEXT_DIRECTION_RTL
-import androidx.ui.text.platform.LayoutCompat.TextDirection
-import androidx.ui.text.platform.LayoutCompat.TextLayoutAlignment
-import androidx.ui.text.platform.style.BaselineShiftSpan
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_CENTER
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_LEFT
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_NORMAL
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_OPPOSITE
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_RIGHT
+import androidx.compose.ui.text.android.LayoutCompat.BreakStrategy
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_ALIGNMENT
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_BREAK_STRATEGY
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_HYPHENATION_FREQUENCY
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_INCLUDE_PADDING
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_JUSTIFICATION_MODE
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINESPACING_EXTRA
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_TEXT_DIRECTION
+import androidx.compose.ui.text.android.LayoutCompat.HyphenationFrequency
+import androidx.compose.ui.text.android.LayoutCompat.JustificationMode
+import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_ANY_RTL_LTR
+import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_LTR
+import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_FIRST_STRONG_RTL
+import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_LOCALE
+import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_LTR
+import androidx.compose.ui.text.android.LayoutCompat.TEXT_DIRECTION_RTL
+import androidx.compose.ui.text.android.LayoutCompat.TextDirection
+import androidx.compose.ui.text.android.LayoutCompat.TextLayoutAlignment
+import androidx.compose.ui.text.android.style.BaselineShiftSpan
 import kotlin.math.ceil
 import kotlin.math.min
 
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/animation/SegmentBreaker.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt
similarity index 97%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/animation/SegmentBreaker.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt
index edb0081..e54fb1b 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/animation/SegmentBreaker.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/animation/SegmentBreaker.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.animation
+package androidx.compose.ui.text.android.animation
 
 import android.text.Layout
-import androidx.ui.text.platform.CharSequenceCharacterIterator
-import androidx.ui.text.platform.InternalPlatformTextApi
-import androidx.ui.text.platform.LayoutHelper
-import androidx.ui.text.platform.getLineForOffset
+import androidx.compose.ui.text.android.CharSequenceCharacterIterator
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.android.LayoutHelper
+import androidx.compose.ui.text.android.getLineForOffset
 import java.text.BreakIterator
 import java.util.Locale
 import kotlin.math.ceil
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/animation/SegmentType.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt
similarity index 91%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/animation/SegmentType.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt
index 70bb52a..eac7729 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/animation/SegmentType.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/animation/SegmentType.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.animation
+package androidx.compose.ui.text.android.animation
 
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Defines a segmentation rule for text animation
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/selection/WordBoundary.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt
similarity index 96%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/selection/WordBoundary.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt
index f246d07..563844b 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/selection/WordBoundary.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/selection/WordBoundary.kt
@@ -13,9 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.selection
+package androidx.compose.ui.text.android.selection
 
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import java.text.BreakIterator
 import java.util.Locale
 
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/selection/WordIterator.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/selection/WordIterator.kt
similarity index 98%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/selection/WordIterator.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/selection/WordIterator.kt
index 20d818a..da44294 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/selection/WordIterator.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/selection/WordIterator.kt
@@ -13,9 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.selection
+package androidx.compose.ui.text.android.selection
 
-import androidx.ui.text.platform.CharSequenceCharacterIterator
+import androidx.compose.ui.text.android.CharSequenceCharacterIterator
 import java.text.BreakIterator
 import java.util.Locale
 import kotlin.math.max
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/BaselineShiftSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt
similarity index 91%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/BaselineShiftSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt
index bfc734b..d46c285 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/BaselineShiftSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/BaselineShiftSpan.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import kotlin.math.ceil
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span which shifts the vertical position of baseline.
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontFeatureSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt
similarity index 90%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontFeatureSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt
index e6c66fb..71a0288 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontFeatureSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontFeatureSpan.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span that change font feature settings for font.
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontSpan.kt
similarity index 94%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontSpan.kt
index 1c59a60..e062b1a 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontSpan.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Typeface
 import android.graphics.fonts.FontStyle
@@ -22,7 +22,7 @@
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
 import androidx.annotation.VisibleForTesting
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span that changes the typeface of the text.
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontWeightStyleSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontWeightStyleSpan.kt
similarity index 97%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontWeightStyleSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontWeightStyleSpan.kt
index 97f2e6b..27f88e6 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/FontWeightStyleSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/FontWeightStyleSpan.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Typeface
 import android.graphics.fonts.FontStyle
@@ -25,7 +25,7 @@
 import androidx.annotation.IntRange
 import androidx.annotation.RequiresApi
 import androidx.annotation.VisibleForTesting
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 private const val AndroidBoldWeight = 600
 
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LetterSpacingSpanEm.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt
similarity index 90%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LetterSpacingSpanEm.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt
index 167b4e1..aae4ecd 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LetterSpacingSpanEm.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanEm.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span used to adjust the letter spacing, in the unit of Em.
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LetterSpacingSpanPx.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt
similarity index 88%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LetterSpacingSpanPx.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt
index 9d2bbbd..b6caa39 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LetterSpacingSpanPx.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LetterSpacingSpanPx.kt
@@ -1,9 +1,9 @@
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
 import androidx.annotation.Px
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span that sets the letter spacing as [letterSpacing], in the unit of pixel.
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LineHeightSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt
similarity index 94%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LineHeightSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt
index 1a75332..d2ab8e8 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/LineHeightSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/LineHeightSpan.kt
@@ -13,10 +13,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Paint.FontMetricsInt
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * The span which modifies the height of the covered paragraphs. A paragraph is defined as a
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/PlaceholderSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt
similarity index 97%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/PlaceholderSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt
index edb14d7..6f675dd 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/PlaceholderSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/PlaceholderSpan.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.annotation.SuppressLint
 import android.graphics.Canvas
 import android.graphics.Paint
 import android.text.style.ReplacementSpan
 import androidx.annotation.IntDef
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import java.lang.IllegalArgumentException
 import kotlin.math.ceil
 import kotlin.math.max
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/ShadowSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt
similarity index 90%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/ShadowSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt
index 4966bc9..2f65ef0 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/ShadowSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/ShadowSpan.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import android.text.style.CharacterStyle
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * A span which applies a shadow effect to the covered text.
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/SkewXSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt
similarity index 91%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/SkewXSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt
index 59f5f06..e2b3da0 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/SkewXSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/SkewXSpan.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span which shear text in x direction. A pixel at (x, y) will be transfer to (x + y * skewX, y),
diff --git a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/TypefaceSpan.kt b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt
similarity index 93%
rename from ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/TypefaceSpan.kt
rename to ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt
index f38f158..5448b81 100644
--- a/ui/ui-text-android/src/main/java/androidx/ui/text/platform/style/TypefaceSpan.kt
+++ b/ui/ui-text-android/src/main/java/androidx/compose/ui/text/android/style/TypefaceSpan.kt
@@ -13,13 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform.style
+package androidx.compose.ui.text.android.style
 
 import android.graphics.Paint
 import android.graphics.Typeface
 import android.text.TextPaint
 import android.text.style.MetricAffectingSpan
-import androidx.ui.text.platform.InternalPlatformTextApi
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 
 /**
  * Span that displays text in the given Typeface. In Android Framework, TypefaceSpan that accepts
diff --git a/ui/ui-text-core/api/0.1.0-dev16.txt b/ui/ui-text-core/api/0.1.0-dev16.txt
index 9230b27..f59f204 100644
--- a/ui/ui-text-core/api/0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/0.1.0-dev16.txt
@@ -1,321 +1,38 @@
 // Signature format: 3.0
-package androidx.ui.input {
-
-  public final class BackspaceKeyEditOp implements androidx.ui.input.EditOperation {
-    ctor public BackspaceKeyEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class CommitTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public CommitTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.CommitTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteAllEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteAllEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface EditOperation {
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class EditingBuffer {
-    ctor public EditingBuffer(String initialText, androidx.ui.text.TextRange initialSelection);
-    field public static final int NOWHERE = -1; // 0xffffffff
-  }
-
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
-    ctor @Deprecated public EditorValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor @Deprecated public EditorValue();
-    method @Deprecated public String component1();
-    method @Deprecated public androidx.ui.text.TextRange component2();
-    method @Deprecated public androidx.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.ui.input.EditorValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method @Deprecated public androidx.ui.text.TextRange? getComposition();
-    method @Deprecated public String getSelectedText();
-    method @Deprecated public androidx.ui.text.TextRange getSelection();
-    method @Deprecated public String getText();
-    method @Deprecated public String getTextAfterSelection(int maxChars);
-    method @Deprecated public String getTextBeforeSelection(int maxChars);
-  }
-
-  public final class FinishComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public FinishComposingTextEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class GapBufferKt {
-  }
-
-  public enum ImeAction {
-    method public static androidx.ui.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.ImeAction[] values();
-    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 interface InputEventListener {
-    method public void onEditOperations(java.util.List<? extends androidx.ui.input.EditOperation> editOps);
-    method public void onImeAction(androidx.ui.input.ImeAction imeAction);
-  }
-
-  public enum KeyboardType {
-    method public static androidx.ui.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.KeyboardType[] values();
-    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 final class MoveCursorEditOp implements androidx.ui.input.EditOperation {
-    ctor public MoveCursorEditOp(int amount);
-    method public int component1();
-    method public androidx.ui.input.MoveCursorEditOp copy(int amount);
-    method public int getAmount();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface OffsetMap {
-    method public int originalToTransformed(int offset);
-    method public int transformedToOriginal(int offset);
-    field public static final androidx.ui.input.OffsetMap.Companion Companion;
-  }
-
-  public static final class OffsetMap.Companion {
-    method public androidx.ui.input.OffsetMap getIdentityOffsetMap();
-    property public final androidx.ui.input.OffsetMap identityOffsetMap;
-  }
-
-  public final class PasswordVisualTransformation implements androidx.ui.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
-    method public char component1();
-    method public androidx.ui.input.PasswordVisualTransformation copy(char mask);
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    method public char getMask();
-  }
-
-  public interface PlatformTextInputService {
-    method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard();
-    method public void startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput();
-  }
-
-  public final class SetComposingRegionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingRegionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingRegionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetSelectionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetSelectionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetSelectionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  @androidx.compose.Immutable public final class TextFieldValue {
-    ctor public TextFieldValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor public TextFieldValue();
-    method public String component1();
-    method public androidx.ui.text.TextRange component2();
-    method public androidx.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.ui.input.TextFieldValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method public androidx.ui.text.TextRange? getComposition();
-    method public androidx.ui.text.TextRange getSelection();
-    method public String getText();
-    field public static final androidx.ui.input.TextFieldValue.Companion Companion;
-  }
-
-  public static final class TextFieldValue.Companion {
-    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> getSaver();
-    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> Saver;
-  }
-
-  public final class TextFieldValueKt {
-    method public static String getSelectedText(androidx.ui.input.TextFieldValue);
-    method public static String getTextAfterSelection(androidx.ui.input.TextFieldValue, int maxChars);
-    method public static String getTextBeforeSelection(androidx.ui.input.TextFieldValue, int maxChars);
-  }
-
-  public class TextInputService {
-    ctor public TextInputService(androidx.ui.input.PlatformTextInputService platformTextInputService);
-    method public void hideSoftwareKeyboard(int token);
-    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(int token, androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard(int token);
-    method public int startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput(int token);
-  }
-
-  public final class TextInputServiceKt {
-    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.ui.input.PlatformTextInputService,androidx.ui.input.TextInputService> getTextInputServiceFactory();
-    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.ui.input.PlatformTextInputService,? extends androidx.ui.input.TextInputService> p);
-    field public static final int INVALID_SESSION = -1; // 0xffffffff
-    field public static final int NO_SESSION = 0; // 0x0
-  }
-
-  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();
-  }
-
-  @androidx.compose.Immutable public interface VisualTransformation {
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    field public static final androidx.ui.input.VisualTransformation.Companion Companion;
-  }
-
-  public static final class VisualTransformation.Companion {
-    method public androidx.ui.input.VisualTransformation getNone();
-    property public final androidx.ui.input.VisualTransformation None;
-  }
-
-}
-
-package androidx.ui.intl {
-
-  public final class AndroidPlatformLocaleKt {
-  }
-
-  @androidx.compose.Immutable public final class Locale {
-    ctor public Locale(String languageTag);
-    method public String getLanguage();
-    method public String getRegion();
-    method public String getScript();
-    method public String toLanguageTag();
-    property public final String language;
-    property public final String region;
-    property public final String script;
-    field public static final androidx.ui.intl.Locale.Companion Companion;
-  }
-
-  public static final class Locale.Companion {
-    method public androidx.ui.intl.Locale getCurrent();
-    property public final androidx.ui.intl.Locale current;
-  }
-
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.ui.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public LocaleList(java.util.List<androidx.ui.intl.Locale> localeList);
-    ctor public LocaleList(String languageTags);
-    ctor public LocaleList(androidx.ui.intl.Locale... locales);
-    method public java.util.List<androidx.ui.intl.Locale> component1();
-    method public operator boolean contains(androidx.ui.intl.Locale element);
-    method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.intl.LocaleList copy(java.util.List<androidx.ui.intl.Locale> localeList);
-    method public operator androidx.ui.intl.Locale get(int i);
-    method public java.util.List<androidx.ui.intl.Locale> getLocaleList();
-    method public int getSize();
-    method public boolean isEmpty();
-    method public java.util.Iterator<androidx.ui.intl.Locale> iterator();
-    property public int size;
-    field public static final androidx.ui.intl.LocaleList.Companion Companion;
-  }
-
-  public static final class LocaleList.Companion {
-    method public androidx.ui.intl.LocaleList getCurrent();
-    property public final androidx.ui.intl.LocaleList current;
-  }
-
-  public final class PlatformLocaleKt {
-  }
-
-}
-
-package androidx.ui.text {
+package androidx.compose.ui.text {
 
   @androidx.compose.Immutable public final class AnnotatedString {
-    ctor public AnnotatedString(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.ui.text.AnnotatedString copy(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> getParagraphStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> getSpanStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.ui.text.AnnotatedString plus(androidx.ui.text.AnnotatedString other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
     ctor public AnnotatedString.Builder(int capacity);
     ctor public AnnotatedString.Builder();
     ctor public AnnotatedString.Builder(String text);
-    ctor public AnnotatedString.Builder(androidx.ui.text.AnnotatedString text);
+    ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String scope, String annotation, int start, int end);
-    method public void addStyle(androidx.ui.text.SpanStyle style, int start, int end);
-    method public void addStyle(androidx.ui.text.ParagraphStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
     method public void append(String text);
     method public void append(char p);
-    method public void append(androidx.ui.text.AnnotatedString text);
+    method public void append(androidx.compose.ui.text.AnnotatedString text);
     method public int getLength();
     method public void pop();
     method public void pop(int index);
     method public int pushStringAnnotation(String tag, String annotation);
-    method public int pushStyle(androidx.ui.text.SpanStyle style);
-    method public int pushStyle(androidx.ui.text.ParagraphStyle style);
-    method public androidx.ui.text.AnnotatedString toAnnotatedString();
+    method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+    method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+    method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
     property public final int length;
   }
 
@@ -326,7 +43,7 @@
     method public int component2();
     method public int component3();
     method public String component4();
-    method public androidx.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -334,18 +51,18 @@
   }
 
   public final class AnnotatedStringKt {
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.SpanStyle spanStyle, androidx.ui.text.ParagraphStyle? paragraphStyle = null);
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.ParagraphStyle paragraphStyle);
-    method @Deprecated public static inline androidx.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static inline androidx.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static androidx.ui.text.AnnotatedString capitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString decapitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static int getLength(androidx.ui.text.AnnotatedString);
-    method public static androidx.ui.text.AnnotatedString subSequence(androidx.ui.text.AnnotatedString, int start, int end);
-    method public static androidx.ui.text.AnnotatedString toLowerCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString toUpperCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, androidx.compose.ui.text.ParagraphStyle? paragraphStyle = null);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+    method @Deprecated public static inline androidx.compose.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static inline androidx.compose.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static int getLength(androidx.compose.ui.text.AnnotatedString);
+    method public static androidx.compose.ui.text.AnnotatedString subSequence(androidx.compose.ui.text.AnnotatedString, int start, int end);
+    method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalTextApi {
@@ -355,16 +72,16 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
-    method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+    method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
     method public float getLastBaseline();
     method public float getLineBottom(int lineIndex);
     method public int getLineCount();
@@ -372,6 +89,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -382,11 +100,11 @@
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public final boolean didExceedMaxLines;
     property public final float firstBaseline;
@@ -399,12 +117,12 @@
     property public final float width;
   }
 
-  public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.AnnotatedString getAnnotatedString();
+  public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
     property public float maxIntrinsicWidth;
     property public float minIntrinsicWidth;
   }
@@ -416,7 +134,7 @@
   }
 
   public interface Paragraph {
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
@@ -430,6 +148,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -439,11 +158,11 @@
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
@@ -459,7 +178,7 @@
   public final class ParagraphConstraints {
     ctor public ParagraphConstraints(float width);
     method public float component1();
-    method public androidx.ui.text.ParagraphConstraints copy(float width);
+    method public androidx.compose.ui.text.ParagraphConstraints copy(float width);
     method public float getWidth();
   }
 
@@ -471,56 +190,56 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
   @androidx.compose.Immutable public final class ParagraphStyle {
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
+    method public androidx.compose.ui.text.style.TextAlign? component1();
+    method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
-    method public androidx.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.ui.text.ParagraphStyle copy-JVmhFNw(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.TextIndent? component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle merge(androidx.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.ParagraphStyle plus(androidx.ui.text.ParagraphStyle other);
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.ui.text.ParagraphStyle lerp(androidx.ui.text.ParagraphStyle start, androidx.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Placeholder {
     method public long component1();
     method public long component2();
-    method public androidx.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.ui.text.Placeholder copy-eLqjHCw(long width, long height, androidx.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
-    method public androidx.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
   }
 
   public enum PlaceholderVerticalAlign {
-    method public static androidx.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.PlaceholderVerticalAlign[] values();
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign AboveBaseline;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Bottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Center;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextBottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextCenter;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextTop;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Top;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign AboveBaseline;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Bottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Center;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextBottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextCenter;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextTop;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Top;
   }
 
   public final class SoftwareKeyboardController {
-    ctor public SoftwareKeyboardController(androidx.ui.input.TextInputService textInputService, int token);
+    ctor public SoftwareKeyboardController(androidx.compose.ui.text.input.TextInputService textInputService, int token);
     method public void hideSoftwareKeyboard();
     method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
@@ -528,86 +247,86 @@
 
   @androidx.compose.Immutable public final class SpanStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.SpanStyle copy-HjQ0eR4(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-3JaCuMk(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle merge(androidx.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.SpanStyle plus(androidx.ui.text.SpanStyle other);
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
-    method public static androidx.ui.text.SpanStyle lerp(androidx.ui.text.SpanStyle start, androidx.ui.text.SpanStyle stop, float fraction);
+    method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
   }
 
   public final class StringKt {
-    method public static String capitalize(String, androidx.ui.intl.Locale locale);
-    method public static String capitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String decapitalize(String, androidx.ui.intl.Locale locale);
-    method public static String decapitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toLowerCase(String, androidx.ui.intl.Locale locale);
-    method public static String toLowerCase(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toUpperCase(String, androidx.ui.intl.Locale locale);
-    method public static String toUpperCase(String, androidx.ui.intl.LocaleList localeList);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
   }
 
   public final class TextLayoutHelperKt {
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.text.AnnotatedString component1();
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.AnnotatedString component1();
     method public androidx.ui.core.Constraints component10();
-    method public androidx.ui.text.TextStyle component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> component3();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
-    method public androidx.ui.text.style.TextOverflow component6();
+    method public androidx.compose.ui.text.style.TextOverflow component6();
     method public androidx.ui.unit.Density component7();
     method public androidx.ui.core.LayoutDirection component8();
-    method public androidx.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.ui.text.TextLayoutInput copy(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.unit.Density getDensity();
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
-    method public androidx.ui.text.style.TextOverflow getOverflow();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
-    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
+    method public androidx.compose.ui.text.style.TextOverflow getOverflow();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public boolean getSoftWrap();
-    method public androidx.ui.text.TextStyle getStyle();
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.TextStyle getStyle();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   public final class TextLayoutResult {
-    method public androidx.ui.text.TextLayoutInput component1();
+    method public androidx.compose.ui.text.TextLayoutInput component1();
     method public androidx.ui.unit.IntSize component3();
-    method public androidx.ui.text.TextLayoutResult copy(androidx.ui.text.TextLayoutInput layoutInput, androidx.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
@@ -616,38 +335,43 @@
     method public boolean getHasVisualOverflow();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
     method public float getLastBaseline();
-    method public androidx.ui.text.TextLayoutInput getLayoutInput();
+    method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
     method public float getLineBottom(int lineIndex);
+    method public int getLineCount();
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
+    method public float getLineLeft(int lineIndex);
+    method public float getLineRight(int lineIndex);
     method public int getLineStart(int lineIndex);
     method public float getLineTop(int lineIndex);
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
     property public final float firstBaseline;
     property public final boolean hasVisualOverflow;
     property public final float lastBaseline;
+    property public final int lineCount;
     property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
-    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.ui.text.TextLayoutResult textLayoutResult);
-    field public static final androidx.ui.text.TextPainter INSTANCE;
+    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+    field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
   @androidx.compose.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
-    method public operator boolean contains(androidx.ui.text.TextRange other);
+    method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -655,274 +379,557 @@
     method public int getMin();
     method public boolean getReversed();
     method public int getStart();
-    method public boolean intersects(androidx.ui.text.TextRange other);
+    method public boolean intersects(androidx.compose.ui.text.TextRange other);
     property public final boolean collapsed;
     property public final int length;
     property public final int max;
     property public final int min;
     property public final boolean reversed;
-    field public static final androidx.ui.text.TextRange.Companion Companion;
+    field public static final androidx.compose.ui.text.TextRange.Companion Companion;
   }
 
   public static final class TextRange.Companion {
-    method public androidx.ui.text.TextRange getZero();
-    property public final androidx.ui.text.TextRange Zero;
+    method public androidx.compose.ui.text.TextRange getZero();
+    property public final androidx.compose.ui.text.TextRange Zero;
   }
 
   public final class TextRangeKt {
-    method public static androidx.ui.text.TextRange TextRange(int index);
-    method public static String substring(CharSequence, androidx.ui.text.TextRange range);
+    method public static androidx.compose.ui.text.TextRange TextRange(int index);
+    method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
   @androidx.compose.Immutable public final class TextStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
-    method public androidx.ui.text.style.TextAlign? component15();
-    method public androidx.ui.text.style.TextDirection? component16();
+    method public androidx.compose.ui.text.style.TextAlign? component15();
+    method public androidx.compose.ui.text.style.TextDirection? component16();
     method public long component17();
-    method public androidx.ui.text.style.TextIndent? component18();
+    method public androidx.compose.ui.text.style.TextIndent? component18();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.TextStyle copy-7aJ7aFo(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-7Y_OIKU(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
     method public long getLineHeight();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle toSpanStyle();
-    field public static final androidx.ui.text.TextStyle.Companion Companion;
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
   public static final class TextStyle.Companion {
-    method public androidx.ui.text.TextStyle getDefault();
-    property public final androidx.ui.text.TextStyle Default;
+    method public androidx.compose.ui.text.TextStyle getDefault();
+    property public final androidx.compose.ui.text.TextStyle Default;
   }
 
   public final class TextStyleKt {
-    method public static androidx.ui.text.TextStyle lerp(androidx.ui.text.TextStyle start, androidx.ui.text.TextStyle stop, float fraction);
-    method public static androidx.ui.text.TextStyle resolveDefaults(androidx.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
   }
 
   public interface Typeface {
-    method public androidx.ui.text.font.FontFamily getFontFamily();
-    property public abstract androidx.ui.text.font.FontFamily fontFamily;
+    method public androidx.compose.ui.text.font.FontFamily getFontFamily();
+    property public abstract androidx.compose.ui.text.font.FontFamily fontFamily;
   }
 
 }
 
-package androidx.ui.text.font {
+package androidx.compose.ui.text.font {
 
-  public abstract sealed class FileBasedFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
   @androidx.compose.Immutable public interface Font {
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
-    property public abstract androidx.ui.text.font.FontStyle style;
-    property public abstract androidx.ui.text.font.FontWeight weight;
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
+    property public abstract androidx.compose.ui.text.font.FontStyle style;
+    property public abstract androidx.compose.ui.text.font.FontWeight weight;
   }
 
   public static interface Font.ResourceLoader {
-    method public Object load(androidx.ui.text.font.Font font);
+    method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
   @androidx.compose.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
-    field public static final androidx.ui.text.font.FontFamily.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
 
   public static final class FontFamily.Companion {
-    method public androidx.ui.text.font.GenericFontFamily getCursive();
-    method public androidx.ui.text.font.SystemFontFamily getDefault();
-    method public androidx.ui.text.font.GenericFontFamily getMonospace();
-    method public androidx.ui.text.font.GenericFontFamily getSansSerif();
-    method public androidx.ui.text.font.GenericFontFamily getSerif();
-    property public final androidx.ui.text.font.GenericFontFamily Cursive;
-    property public final androidx.ui.text.font.SystemFontFamily Default;
-    property public final androidx.ui.text.font.GenericFontFamily Monospace;
-    property public final androidx.ui.text.font.GenericFontFamily SansSerif;
-    property public final androidx.ui.text.font.GenericFontFamily Serif;
+    method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+    method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+    method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+    property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+    property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+    property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(androidx.ui.text.font.Font... fonts);
-    method public static androidx.ui.text.font.LoadedFontFamily fontFamily(androidx.ui.text.Typeface typeface);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily asFontFamily(androidx.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.ui.text.font.Font font(int resId, androidx.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.ui.text.font.FontStyle style = androidx.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
-    ctor public FontListFontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method public java.util.List<androidx.ui.text.font.Font> component1();
-    method public boolean contains(androidx.ui.text.font.Font element);
+  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+    ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public java.util.List<androidx.compose.ui.text.font.Font> component1();
+    method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontListFontFamily copy(java.util.List<? extends 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 @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public androidx.compose.ui.text.font.Font get(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
-    method public int indexOf(androidx.ui.text.font.Font element);
+    method public int indexOf(androidx.compose.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);
+    method public java.util.Iterator<androidx.compose.ui.text.font.Font> iterator();
+    method public int lastIndexOf(androidx.compose.ui.text.font.Font element);
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator();
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> subList(int fromIndex, int toIndex);
   }
 
   public enum FontStyle {
-    method public static androidx.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontStyle[] values();
-    enum_constant public static final androidx.ui.text.font.FontStyle Italic;
-    enum_constant public static final androidx.ui.text.font.FontStyle Normal;
+    method public static androidx.compose.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontStyle[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Italic;
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Normal;
   }
 
   public enum FontSynthesis {
-    method public static androidx.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontSynthesis[] values();
-    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;
+    method public static androidx.compose.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontSynthesis[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis All;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis None;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Style;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.ui.text.font.FontWeight> {
+  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
-    method public int compareTo(androidx.ui.text.font.FontWeight other);
+    method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
-    field public static final androidx.ui.text.font.FontWeight.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
 
   public static final class FontWeight.Companion {
-    method public androidx.ui.text.font.FontWeight getBlack();
-    method public androidx.ui.text.font.FontWeight getBold();
-    method public androidx.ui.text.font.FontWeight getExtraBold();
-    method public androidx.ui.text.font.FontWeight getExtraLight();
-    method public androidx.ui.text.font.FontWeight getLight();
-    method public androidx.ui.text.font.FontWeight getMedium();
-    method public androidx.ui.text.font.FontWeight getNormal();
-    method public androidx.ui.text.font.FontWeight getSemiBold();
-    method public androidx.ui.text.font.FontWeight getThin();
-    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();
-    property public final androidx.ui.text.font.FontWeight Black;
-    property public final androidx.ui.text.font.FontWeight Bold;
-    property public final androidx.ui.text.font.FontWeight ExtraBold;
-    property public final androidx.ui.text.font.FontWeight ExtraLight;
-    property public final androidx.ui.text.font.FontWeight Light;
-    property public final androidx.ui.text.font.FontWeight Medium;
-    property public final androidx.ui.text.font.FontWeight Normal;
-    property public final androidx.ui.text.font.FontWeight SemiBold;
-    property public final androidx.ui.text.font.FontWeight Thin;
-    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;
+    method public androidx.compose.ui.text.font.FontWeight getBlack();
+    method public androidx.compose.ui.text.font.FontWeight getBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+    method public androidx.compose.ui.text.font.FontWeight getLight();
+    method public androidx.compose.ui.text.font.FontWeight getMedium();
+    method public androidx.compose.ui.text.font.FontWeight getNormal();
+    method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+    method public androidx.compose.ui.text.font.FontWeight getThin();
+    method public androidx.compose.ui.text.font.FontWeight getW100();
+    method public androidx.compose.ui.text.font.FontWeight getW200();
+    method public androidx.compose.ui.text.font.FontWeight getW300();
+    method public androidx.compose.ui.text.font.FontWeight getW400();
+    method public androidx.compose.ui.text.font.FontWeight getW500();
+    method public androidx.compose.ui.text.font.FontWeight getW600();
+    method public androidx.compose.ui.text.font.FontWeight getW700();
+    method public androidx.compose.ui.text.font.FontWeight getW800();
+    method public androidx.compose.ui.text.font.FontWeight getW900();
+    property public final androidx.compose.ui.text.font.FontWeight Black;
+    property public final androidx.compose.ui.text.font.FontWeight Bold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+    property public final androidx.compose.ui.text.font.FontWeight Light;
+    property public final androidx.compose.ui.text.font.FontWeight Medium;
+    property public final androidx.compose.ui.text.font.FontWeight Normal;
+    property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+    property public final androidx.compose.ui.text.font.FontWeight Thin;
+    property public final androidx.compose.ui.text.font.FontWeight W100;
+    property public final androidx.compose.ui.text.font.FontWeight W200;
+    property public final androidx.compose.ui.text.font.FontWeight W300;
+    property public final androidx.compose.ui.text.font.FontWeight W400;
+    property public final androidx.compose.ui.text.font.FontWeight W500;
+    property public final androidx.compose.ui.text.font.FontWeight W600;
+    property public final androidx.compose.ui.text.font.FontWeight W700;
+    property public final androidx.compose.ui.text.font.FontWeight W800;
+    property public final androidx.compose.ui.text.font.FontWeight W900;
   }
 
   public final class FontWeightKt {
-    method public static androidx.ui.text.font.FontWeight lerp(androidx.ui.text.font.FontWeight start, androidx.ui.text.font.FontWeight stop, float fraction);
+    method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.ui.text.font.SystemFontFamily {
+  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
-  public final class LoadedFontFamily extends androidx.ui.text.font.FontFamily {
-    ctor public LoadedFontFamily(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface component1();
-    method public androidx.ui.text.font.LoadedFontFamily copy(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface getTypeface();
+  public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+    ctor public LoadedFontFamily(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface component1();
+    method public androidx.compose.ui.text.font.LoadedFontFamily copy(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface getTypeface();
   }
 
-  public final class ResourceFont implements androidx.ui.text.font.Font {
-    ctor public ResourceFont(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+  public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+    ctor public ResourceFont(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int component1();
-    method public androidx.ui.text.font.FontWeight component2();
-    method public androidx.ui.text.font.FontStyle component3();
-    method public androidx.ui.text.font.ResourceFont copy(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+    method public androidx.compose.ui.text.font.FontWeight component2();
+    method public androidx.compose.ui.text.font.FontStyle component3();
+    method public androidx.compose.ui.text.font.ResourceFont copy(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int getResId();
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
   }
 
-  public abstract sealed class SystemFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
 }
 
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.input {
+
+  public final class BackspaceKeyEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public BackspaceKeyEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class CommitTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public CommitTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.CommitTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteAllEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteAllEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface EditOperation {
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class EditingBuffer {
+    ctor public EditingBuffer(String initialText, androidx.compose.ui.text.TextRange initialSelection);
+    field public static final int NOWHERE = -1; // 0xffffffff
+  }
+
+  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+    ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor @Deprecated public EditorValue();
+    method @Deprecated public String component1();
+    method @Deprecated public androidx.compose.ui.text.TextRange component2();
+    method @Deprecated public androidx.compose.ui.text.TextRange? component3();
+    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
+    method @Deprecated public String getSelectedText();
+    method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
+    method @Deprecated public String getText();
+    method @Deprecated public String getTextAfterSelection(int maxChars);
+    method @Deprecated public String getTextBeforeSelection(int maxChars);
+  }
+
+  public final class FinishComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public FinishComposingTextEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class GapBufferKt {
+  }
+
+  public enum ImeAction {
+    method public static androidx.compose.ui.text.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.ImeAction[] values();
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Done;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Go;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Next;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction NoAction;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Previous;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Search;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Send;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Unspecified;
+  }
+
+  public interface InputEventListener {
+    method public void onEditOperations(java.util.List<? extends androidx.compose.ui.text.input.EditOperation> editOps);
+    method public void onImeAction(androidx.compose.ui.text.input.ImeAction imeAction);
+  }
+
+  public enum KeyboardType {
+    method public static androidx.compose.ui.text.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.KeyboardType[] values();
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Ascii;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Email;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Number;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType NumberPassword;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Password;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Phone;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Text;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Uri;
+  }
+
+  public final class MoveCursorEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public MoveCursorEditOp(int amount);
+    method public int component1();
+    method public androidx.compose.ui.text.input.MoveCursorEditOp copy(int amount);
+    method public int getAmount();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface OffsetMap {
+    method public int originalToTransformed(int offset);
+    method public int transformedToOriginal(int offset);
+    field public static final androidx.compose.ui.text.input.OffsetMap.Companion Companion;
+  }
+
+  public static final class OffsetMap.Companion {
+    method public androidx.compose.ui.text.input.OffsetMap getIdentityOffsetMap();
+    property public final androidx.compose.ui.text.input.OffsetMap identityOffsetMap;
+  }
+
+  public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
+    ctor public PasswordVisualTransformation(char mask);
+    ctor public PasswordVisualTransformation();
+    method public char component1();
+    method public androidx.compose.ui.text.input.PasswordVisualTransformation copy(char mask);
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    method public char getMask();
+  }
+
+  public interface PlatformTextInputService {
+    method public void hideSoftwareKeyboard();
+    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard();
+    method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput();
+  }
+
+  public final class SetComposingRegionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingRegionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingRegionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetSelectionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetSelectionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetSelectionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  @androidx.compose.Immutable public final class TextFieldValue {
+    ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor public TextFieldValue();
+    method public String component1();
+    method public androidx.compose.ui.text.TextRange component2();
+    method public androidx.compose.ui.text.TextRange? component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method public androidx.compose.ui.text.TextRange? getComposition();
+    method public androidx.compose.ui.text.TextRange getSelection();
+    method public String getText();
+    field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+  }
+
+  public static final class TextFieldValue.Companion {
+    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+  }
+
+  public final class TextFieldValueKt {
+    method public static String getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+    method public static String getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+    method public static String getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+  }
+
+  public class TextInputService {
+    ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+    method public void hideSoftwareKeyboard(int token);
+    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(int token, androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard(int token);
+    method public int startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput(int token);
+  }
+
+  public final class TextInputServiceKt {
+    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.compose.ui.text.input.PlatformTextInputService,androidx.compose.ui.text.input.TextInputService> getTextInputServiceFactory();
+    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.PlatformTextInputService,? extends androidx.compose.ui.text.input.TextInputService> p);
+    field public static final int INVALID_SESSION = -1; // 0xffffffff
+    field public static final int NO_SESSION = 0; // 0x0
+  }
+
+  public final class TransformedText {
+    ctor public TransformedText(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.AnnotatedString component1();
+    method public androidx.compose.ui.text.input.OffsetMap component2();
+    method public androidx.compose.ui.text.input.TransformedText copy(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.input.OffsetMap getOffsetMap();
+    method public androidx.compose.ui.text.AnnotatedString getTransformedText();
+  }
+
+  @androidx.compose.Immutable public interface VisualTransformation {
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+  }
+
+  public static final class VisualTransformation.Companion {
+    method public androidx.compose.ui.text.input.VisualTransformation getNone();
+    property public final androidx.compose.ui.text.input.VisualTransformation None;
+  }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+  public final class AndroidPlatformLocaleKt {
+  }
+
+  @androidx.compose.Immutable public final class Locale {
+    ctor public Locale(String languageTag);
+    method public String getLanguage();
+    method public String getRegion();
+    method public String getScript();
+    method public String toLanguageTag();
+    property public final String language;
+    property public final String region;
+    property public final String script;
+    field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+  }
+
+  public static final class Locale.Companion {
+    method public androidx.compose.ui.text.intl.Locale getCurrent();
+    property public final androidx.compose.ui.text.intl.Locale current;
+  }
+
+  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+    ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    ctor public LocaleList(String languageTags);
+    ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
+    method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method public operator androidx.compose.ui.text.intl.Locale get(int i);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+    method public int getSize();
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+    property public int size;
+    field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+  }
+
+  public static final class LocaleList.Companion {
+    method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+    property public final androidx.compose.ui.text.intl.LocaleList current;
+  }
+
+  public final class PlatformLocaleKt {
+  }
+
+}
+
+package androidx.compose.ui.text.platform {
 
   public final class AndroidParagraphHelperKt {
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.ui.text.TextStyle,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.ui.text.font.Font.ResourceLoader,androidx.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.ui.text.TextStyle,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.ui.text.font.Font.ResourceLoader,? extends androidx.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
-    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.ui.text.ParagraphConstraints,androidx.ui.text.Paragraph> getParagraphActualFactory();
-    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.ui.text.ParagraphConstraints,? extends androidx.ui.text.Paragraph> p);
+    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.compose.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.compose.ui.text.ParagraphConstraints,androidx.compose.ui.text.Paragraph> getParagraphActualFactory();
+    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.compose.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.compose.ui.text.ParagraphConstraints,? extends androidx.compose.ui.text.Paragraph> p);
   }
 
   public final class AndroidStringDelegateKt {
   }
 
   public final class TypefaceAdapterKt {
-    method public static androidx.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.ui.text.font.FontWeight,? extends androidx.ui.text.font.FontStyle>>? necessaryStyles = null);
+    method public static androidx.compose.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.compose.ui.text.font.FontWeight,? extends androidx.compose.ui.text.font.FontStyle>>? necessaryStyles = null);
   }
 
 }
 
-package androidx.ui.text.platform.extensions {
+package androidx.compose.ui.text.platform.extensions {
 
   public final class LocaleExtensionsKt {
   }
@@ -938,7 +945,7 @@
 
 }
 
-package androidx.ui.text.style {
+package androidx.compose.ui.text.style {
 
   @androidx.compose.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
@@ -948,7 +955,7 @@
     method public float getMultiplier();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
     method @androidx.compose.Immutable public static inline String! toString-impl(float p);
-    field public static final androidx.ui.text.style.BaselineShift.Companion Companion;
+    field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
   public static final class BaselineShift.Companion {
@@ -961,54 +968,54 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-7csQwvo(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
-    method public static androidx.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.ResolvedTextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Rtl;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
   }
 
   public enum TextAlign {
-    method public static androidx.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextAlign[] values();
-    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;
+    method public static androidx.compose.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Center;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign End;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Justify;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Left;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Right;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
   @androidx.compose.Immutable public final class TextDecoration {
     method public int component1();
-    method public operator boolean contains(androidx.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextDecoration copy(int mask);
+    method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
-    method public operator androidx.ui.text.style.TextDecoration plus(androidx.ui.text.style.TextDecoration decoration);
-    field public static final androidx.ui.text.style.TextDecoration.Companion Companion;
+    method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+    field public static final androidx.compose.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;
+    method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+    method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+    method public androidx.compose.ui.text.style.TextDecoration getNone();
+    method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+    property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+    property public final androidx.compose.ui.text.style.TextDecoration None;
+    property public final androidx.compose.ui.text.style.TextDecoration Underline;
   }
 
   public enum TextDirection {
-    method public static androidx.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.TextDirection Content;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrLtr;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrRtl;
-    enum_constant public static final androidx.ui.text.style.TextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.TextDirection Rtl;
+    method public static androidx.compose.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Content;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrLtr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrRtl;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
   @androidx.compose.Immutable public final class TextGeometricTransform {
@@ -1016,42 +1023,42 @@
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.Immutable public androidx.compose.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;
+    field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
   }
 
   public static final class TextGeometricTransform.Companion {
   }
 
   public final class TextGeometricTransformKt {
-    method public static androidx.ui.text.style.TextGeometricTransform lerp(androidx.ui.text.style.TextGeometricTransform start, androidx.ui.text.style.TextGeometricTransform stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion Companion;
+    field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
   }
 
   public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNone();
-    property public final androidx.ui.text.style.TextIndent None;
+    method public androidx.compose.ui.text.style.TextIndent getNone();
+    property public final androidx.compose.ui.text.style.TextIndent None;
   }
 
   public final class TextIndentKt {
-    method public static androidx.ui.text.style.TextIndent lerp(androidx.ui.text.style.TextIndent start, androidx.ui.text.style.TextIndent stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
   }
 
   public enum TextOverflow {
-    method public static androidx.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextOverflow[] values();
-    enum_constant public static final androidx.ui.text.style.TextOverflow Clip;
-    enum_constant public static final androidx.ui.text.style.TextOverflow Ellipsis;
+    method public static androidx.compose.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextOverflow[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Clip;
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Ellipsis;
   }
 
 }
diff --git a/ui/ui-text-core/api/api_lint.ignore b/ui/ui-text-core/api/api_lint.ignore
index 59bb5d5..b49230e 100644
--- a/ui/ui-text-core/api/api_lint.ignore
+++ b/ui/ui-text-core/api/api_lint.ignore
@@ -1,43 +1,43 @@
 // Baseline format: 1.0
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#append(String):
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.append(String)
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#append(androidx.ui.text.AnnotatedString):
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.append(androidx.ui.text.AnnotatedString)
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#append(char):
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.append(char)
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#pop():
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.pop()
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#pop(int):
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.pop(int)
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#pushStringAnnotation(String, String):
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.pushStringAnnotation(String,String)
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#pushStyle(androidx.ui.text.ParagraphStyle):
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.pushStyle(androidx.ui.text.ParagraphStyle)
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#pushStyle(androidx.ui.text.SpanStyle):
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.pushStyle(androidx.ui.text.SpanStyle)
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#toAnnotatedString():
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.toAnnotatedString()
-BuilderSetStyle: androidx.ui.text.AnnotatedString.Builder#toString():
-    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.ui.text.AnnotatedString.Builder.toString()
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#append(String):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.append(String)
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#append(androidx.compose.ui.text.AnnotatedString):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.append(androidx.compose.ui.text.AnnotatedString)
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#append(char):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.append(char)
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#pop():
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.pop()
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#pop(int):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.pop(int)
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#pushStringAnnotation(String, String):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.pushStringAnnotation(String,String)
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#pushStyle(androidx.compose.ui.text.ParagraphStyle):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.pushStyle(androidx.compose.ui.text.ParagraphStyle)
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#pushStyle(androidx.compose.ui.text.SpanStyle):
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.pushStyle(androidx.compose.ui.text.SpanStyle)
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#toAnnotatedString():
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.toAnnotatedString()
+BuilderSetStyle: androidx.compose.ui.text.AnnotatedString.Builder#toString():
+    Builder methods names should use setFoo() / addFoo() / clearFoo() style: method androidx.compose.ui.text.AnnotatedString.Builder.toString()
 
 
-KotlinOperator: androidx.ui.text.font.FontListFontFamily#contains(androidx.ui.text.font.Font):
+KotlinOperator: androidx.compose.ui.text.font.FontListFontFamily#contains(androidx.compose.ui.text.font.Font):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.ui.text.style.TextDecoration#contains(androidx.ui.text.style.TextDecoration):
+KotlinOperator: androidx.compose.ui.text.style.TextDecoration#contains(androidx.compose.ui.text.style.TextDecoration):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
 
 
-MissingBuildMethod: androidx.ui.text.AnnotatedString.Builder:
-    androidx.ui.text.AnnotatedString.Builder does not declare a `build()` method, but builder classes are expected to
+MissingBuildMethod: androidx.compose.ui.text.AnnotatedString.Builder:
+    androidx.compose.ui.text.AnnotatedString.Builder does not declare a `build()` method, but builder classes are expected to
 
 
-MissingNullability: androidx.ui.text.style.BaselineShift#toString-impl(float):
+MissingNullability: androidx.compose.ui.text.style.BaselineShift#toString-impl(float):
     Missing nullability on method `toString-impl` return
 
 
-SetterReturnsThis: androidx.ui.text.AnnotatedString.Builder#addStringAnnotation(String, String, int, int):
-    Methods must return the builder object (return type androidx.ui.text.AnnotatedString.Builder instead of void): method androidx.ui.text.AnnotatedString.Builder.addStringAnnotation(String,String,int,int)
-SetterReturnsThis: androidx.ui.text.AnnotatedString.Builder#addStyle(androidx.ui.text.ParagraphStyle, int, int):
-    Methods must return the builder object (return type androidx.ui.text.AnnotatedString.Builder instead of void): method androidx.ui.text.AnnotatedString.Builder.addStyle(androidx.ui.text.ParagraphStyle,int,int)
-SetterReturnsThis: androidx.ui.text.AnnotatedString.Builder#addStyle(androidx.ui.text.SpanStyle, int, int):
-    Methods must return the builder object (return type androidx.ui.text.AnnotatedString.Builder instead of void): method androidx.ui.text.AnnotatedString.Builder.addStyle(androidx.ui.text.SpanStyle,int,int)
+SetterReturnsThis: androidx.compose.ui.text.AnnotatedString.Builder#addStringAnnotation(String, String, int, int):
+    Methods must return the builder object (return type androidx.compose.ui.text.AnnotatedString.Builder instead of void): method androidx.compose.ui.text.AnnotatedString.Builder.addStringAnnotation(String,String,int,int)
+SetterReturnsThis: androidx.compose.ui.text.AnnotatedString.Builder#addStyle(androidx.compose.ui.text.ParagraphStyle, int, int):
+    Methods must return the builder object (return type androidx.compose.ui.text.AnnotatedString.Builder instead of void): method androidx.compose.ui.text.AnnotatedString.Builder.addStyle(androidx.compose.ui.text.ParagraphStyle,int,int)
+SetterReturnsThis: androidx.compose.ui.text.AnnotatedString.Builder#addStyle(androidx.compose.ui.text.SpanStyle, int, int):
+    Methods must return the builder object (return type androidx.compose.ui.text.AnnotatedString.Builder instead of void): method androidx.compose.ui.text.AnnotatedString.Builder.addStyle(androidx.compose.ui.text.SpanStyle,int,int)
diff --git a/ui/ui-text-core/api/current.txt b/ui/ui-text-core/api/current.txt
index 9230b27..f59f204 100644
--- a/ui/ui-text-core/api/current.txt
+++ b/ui/ui-text-core/api/current.txt
@@ -1,321 +1,38 @@
 // Signature format: 3.0
-package androidx.ui.input {
-
-  public final class BackspaceKeyEditOp implements androidx.ui.input.EditOperation {
-    ctor public BackspaceKeyEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class CommitTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public CommitTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.CommitTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteAllEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteAllEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface EditOperation {
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class EditingBuffer {
-    ctor public EditingBuffer(String initialText, androidx.ui.text.TextRange initialSelection);
-    field public static final int NOWHERE = -1; // 0xffffffff
-  }
-
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
-    ctor @Deprecated public EditorValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor @Deprecated public EditorValue();
-    method @Deprecated public String component1();
-    method @Deprecated public androidx.ui.text.TextRange component2();
-    method @Deprecated public androidx.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.ui.input.EditorValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method @Deprecated public androidx.ui.text.TextRange? getComposition();
-    method @Deprecated public String getSelectedText();
-    method @Deprecated public androidx.ui.text.TextRange getSelection();
-    method @Deprecated public String getText();
-    method @Deprecated public String getTextAfterSelection(int maxChars);
-    method @Deprecated public String getTextBeforeSelection(int maxChars);
-  }
-
-  public final class FinishComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public FinishComposingTextEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class GapBufferKt {
-  }
-
-  public enum ImeAction {
-    method public static androidx.ui.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.ImeAction[] values();
-    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 interface InputEventListener {
-    method public void onEditOperations(java.util.List<? extends androidx.ui.input.EditOperation> editOps);
-    method public void onImeAction(androidx.ui.input.ImeAction imeAction);
-  }
-
-  public enum KeyboardType {
-    method public static androidx.ui.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.KeyboardType[] values();
-    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 final class MoveCursorEditOp implements androidx.ui.input.EditOperation {
-    ctor public MoveCursorEditOp(int amount);
-    method public int component1();
-    method public androidx.ui.input.MoveCursorEditOp copy(int amount);
-    method public int getAmount();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface OffsetMap {
-    method public int originalToTransformed(int offset);
-    method public int transformedToOriginal(int offset);
-    field public static final androidx.ui.input.OffsetMap.Companion Companion;
-  }
-
-  public static final class OffsetMap.Companion {
-    method public androidx.ui.input.OffsetMap getIdentityOffsetMap();
-    property public final androidx.ui.input.OffsetMap identityOffsetMap;
-  }
-
-  public final class PasswordVisualTransformation implements androidx.ui.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
-    method public char component1();
-    method public androidx.ui.input.PasswordVisualTransformation copy(char mask);
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    method public char getMask();
-  }
-
-  public interface PlatformTextInputService {
-    method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard();
-    method public void startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput();
-  }
-
-  public final class SetComposingRegionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingRegionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingRegionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetSelectionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetSelectionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetSelectionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  @androidx.compose.Immutable public final class TextFieldValue {
-    ctor public TextFieldValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor public TextFieldValue();
-    method public String component1();
-    method public androidx.ui.text.TextRange component2();
-    method public androidx.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.ui.input.TextFieldValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method public androidx.ui.text.TextRange? getComposition();
-    method public androidx.ui.text.TextRange getSelection();
-    method public String getText();
-    field public static final androidx.ui.input.TextFieldValue.Companion Companion;
-  }
-
-  public static final class TextFieldValue.Companion {
-    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> getSaver();
-    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> Saver;
-  }
-
-  public final class TextFieldValueKt {
-    method public static String getSelectedText(androidx.ui.input.TextFieldValue);
-    method public static String getTextAfterSelection(androidx.ui.input.TextFieldValue, int maxChars);
-    method public static String getTextBeforeSelection(androidx.ui.input.TextFieldValue, int maxChars);
-  }
-
-  public class TextInputService {
-    ctor public TextInputService(androidx.ui.input.PlatformTextInputService platformTextInputService);
-    method public void hideSoftwareKeyboard(int token);
-    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(int token, androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard(int token);
-    method public int startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput(int token);
-  }
-
-  public final class TextInputServiceKt {
-    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.ui.input.PlatformTextInputService,androidx.ui.input.TextInputService> getTextInputServiceFactory();
-    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.ui.input.PlatformTextInputService,? extends androidx.ui.input.TextInputService> p);
-    field public static final int INVALID_SESSION = -1; // 0xffffffff
-    field public static final int NO_SESSION = 0; // 0x0
-  }
-
-  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();
-  }
-
-  @androidx.compose.Immutable public interface VisualTransformation {
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    field public static final androidx.ui.input.VisualTransformation.Companion Companion;
-  }
-
-  public static final class VisualTransformation.Companion {
-    method public androidx.ui.input.VisualTransformation getNone();
-    property public final androidx.ui.input.VisualTransformation None;
-  }
-
-}
-
-package androidx.ui.intl {
-
-  public final class AndroidPlatformLocaleKt {
-  }
-
-  @androidx.compose.Immutable public final class Locale {
-    ctor public Locale(String languageTag);
-    method public String getLanguage();
-    method public String getRegion();
-    method public String getScript();
-    method public String toLanguageTag();
-    property public final String language;
-    property public final String region;
-    property public final String script;
-    field public static final androidx.ui.intl.Locale.Companion Companion;
-  }
-
-  public static final class Locale.Companion {
-    method public androidx.ui.intl.Locale getCurrent();
-    property public final androidx.ui.intl.Locale current;
-  }
-
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.ui.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public LocaleList(java.util.List<androidx.ui.intl.Locale> localeList);
-    ctor public LocaleList(String languageTags);
-    ctor public LocaleList(androidx.ui.intl.Locale... locales);
-    method public java.util.List<androidx.ui.intl.Locale> component1();
-    method public operator boolean contains(androidx.ui.intl.Locale element);
-    method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.intl.LocaleList copy(java.util.List<androidx.ui.intl.Locale> localeList);
-    method public operator androidx.ui.intl.Locale get(int i);
-    method public java.util.List<androidx.ui.intl.Locale> getLocaleList();
-    method public int getSize();
-    method public boolean isEmpty();
-    method public java.util.Iterator<androidx.ui.intl.Locale> iterator();
-    property public int size;
-    field public static final androidx.ui.intl.LocaleList.Companion Companion;
-  }
-
-  public static final class LocaleList.Companion {
-    method public androidx.ui.intl.LocaleList getCurrent();
-    property public final androidx.ui.intl.LocaleList current;
-  }
-
-  public final class PlatformLocaleKt {
-  }
-
-}
-
-package androidx.ui.text {
+package androidx.compose.ui.text {
 
   @androidx.compose.Immutable public final class AnnotatedString {
-    ctor public AnnotatedString(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.ui.text.AnnotatedString copy(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> getParagraphStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> getSpanStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.ui.text.AnnotatedString plus(androidx.ui.text.AnnotatedString other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
     ctor public AnnotatedString.Builder(int capacity);
     ctor public AnnotatedString.Builder();
     ctor public AnnotatedString.Builder(String text);
-    ctor public AnnotatedString.Builder(androidx.ui.text.AnnotatedString text);
+    ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String scope, String annotation, int start, int end);
-    method public void addStyle(androidx.ui.text.SpanStyle style, int start, int end);
-    method public void addStyle(androidx.ui.text.ParagraphStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
     method public void append(String text);
     method public void append(char p);
-    method public void append(androidx.ui.text.AnnotatedString text);
+    method public void append(androidx.compose.ui.text.AnnotatedString text);
     method public int getLength();
     method public void pop();
     method public void pop(int index);
     method public int pushStringAnnotation(String tag, String annotation);
-    method public int pushStyle(androidx.ui.text.SpanStyle style);
-    method public int pushStyle(androidx.ui.text.ParagraphStyle style);
-    method public androidx.ui.text.AnnotatedString toAnnotatedString();
+    method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+    method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+    method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
     property public final int length;
   }
 
@@ -326,7 +43,7 @@
     method public int component2();
     method public int component3();
     method public String component4();
-    method public androidx.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -334,18 +51,18 @@
   }
 
   public final class AnnotatedStringKt {
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.SpanStyle spanStyle, androidx.ui.text.ParagraphStyle? paragraphStyle = null);
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.ParagraphStyle paragraphStyle);
-    method @Deprecated public static inline androidx.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static inline androidx.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static androidx.ui.text.AnnotatedString capitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString decapitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static int getLength(androidx.ui.text.AnnotatedString);
-    method public static androidx.ui.text.AnnotatedString subSequence(androidx.ui.text.AnnotatedString, int start, int end);
-    method public static androidx.ui.text.AnnotatedString toLowerCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString toUpperCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, androidx.compose.ui.text.ParagraphStyle? paragraphStyle = null);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+    method @Deprecated public static inline androidx.compose.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static inline androidx.compose.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static int getLength(androidx.compose.ui.text.AnnotatedString);
+    method public static androidx.compose.ui.text.AnnotatedString subSequence(androidx.compose.ui.text.AnnotatedString, int start, int end);
+    method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalTextApi {
@@ -355,16 +72,16 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
-    method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+    method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
     method public float getLastBaseline();
     method public float getLineBottom(int lineIndex);
     method public int getLineCount();
@@ -372,6 +89,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -382,11 +100,11 @@
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public final boolean didExceedMaxLines;
     property public final float firstBaseline;
@@ -399,12 +117,12 @@
     property public final float width;
   }
 
-  public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.AnnotatedString getAnnotatedString();
+  public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
     property public float maxIntrinsicWidth;
     property public float minIntrinsicWidth;
   }
@@ -416,7 +134,7 @@
   }
 
   public interface Paragraph {
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
@@ -430,6 +148,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -439,11 +158,11 @@
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
@@ -459,7 +178,7 @@
   public final class ParagraphConstraints {
     ctor public ParagraphConstraints(float width);
     method public float component1();
-    method public androidx.ui.text.ParagraphConstraints copy(float width);
+    method public androidx.compose.ui.text.ParagraphConstraints copy(float width);
     method public float getWidth();
   }
 
@@ -471,56 +190,56 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
   @androidx.compose.Immutable public final class ParagraphStyle {
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
+    method public androidx.compose.ui.text.style.TextAlign? component1();
+    method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
-    method public androidx.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.ui.text.ParagraphStyle copy-JVmhFNw(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.TextIndent? component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle merge(androidx.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.ParagraphStyle plus(androidx.ui.text.ParagraphStyle other);
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.ui.text.ParagraphStyle lerp(androidx.ui.text.ParagraphStyle start, androidx.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Placeholder {
     method public long component1();
     method public long component2();
-    method public androidx.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.ui.text.Placeholder copy-eLqjHCw(long width, long height, androidx.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
-    method public androidx.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
   }
 
   public enum PlaceholderVerticalAlign {
-    method public static androidx.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.PlaceholderVerticalAlign[] values();
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign AboveBaseline;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Bottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Center;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextBottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextCenter;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextTop;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Top;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign AboveBaseline;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Bottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Center;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextBottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextCenter;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextTop;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Top;
   }
 
   public final class SoftwareKeyboardController {
-    ctor public SoftwareKeyboardController(androidx.ui.input.TextInputService textInputService, int token);
+    ctor public SoftwareKeyboardController(androidx.compose.ui.text.input.TextInputService textInputService, int token);
     method public void hideSoftwareKeyboard();
     method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
@@ -528,86 +247,86 @@
 
   @androidx.compose.Immutable public final class SpanStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.SpanStyle copy-HjQ0eR4(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-3JaCuMk(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle merge(androidx.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.SpanStyle plus(androidx.ui.text.SpanStyle other);
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
-    method public static androidx.ui.text.SpanStyle lerp(androidx.ui.text.SpanStyle start, androidx.ui.text.SpanStyle stop, float fraction);
+    method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
   }
 
   public final class StringKt {
-    method public static String capitalize(String, androidx.ui.intl.Locale locale);
-    method public static String capitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String decapitalize(String, androidx.ui.intl.Locale locale);
-    method public static String decapitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toLowerCase(String, androidx.ui.intl.Locale locale);
-    method public static String toLowerCase(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toUpperCase(String, androidx.ui.intl.Locale locale);
-    method public static String toUpperCase(String, androidx.ui.intl.LocaleList localeList);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
   }
 
   public final class TextLayoutHelperKt {
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.text.AnnotatedString component1();
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.AnnotatedString component1();
     method public androidx.ui.core.Constraints component10();
-    method public androidx.ui.text.TextStyle component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> component3();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
-    method public androidx.ui.text.style.TextOverflow component6();
+    method public androidx.compose.ui.text.style.TextOverflow component6();
     method public androidx.ui.unit.Density component7();
     method public androidx.ui.core.LayoutDirection component8();
-    method public androidx.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.ui.text.TextLayoutInput copy(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.unit.Density getDensity();
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
-    method public androidx.ui.text.style.TextOverflow getOverflow();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
-    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
+    method public androidx.compose.ui.text.style.TextOverflow getOverflow();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public boolean getSoftWrap();
-    method public androidx.ui.text.TextStyle getStyle();
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.TextStyle getStyle();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   public final class TextLayoutResult {
-    method public androidx.ui.text.TextLayoutInput component1();
+    method public androidx.compose.ui.text.TextLayoutInput component1();
     method public androidx.ui.unit.IntSize component3();
-    method public androidx.ui.text.TextLayoutResult copy(androidx.ui.text.TextLayoutInput layoutInput, androidx.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
@@ -616,38 +335,43 @@
     method public boolean getHasVisualOverflow();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
     method public float getLastBaseline();
-    method public androidx.ui.text.TextLayoutInput getLayoutInput();
+    method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
     method public float getLineBottom(int lineIndex);
+    method public int getLineCount();
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
+    method public float getLineLeft(int lineIndex);
+    method public float getLineRight(int lineIndex);
     method public int getLineStart(int lineIndex);
     method public float getLineTop(int lineIndex);
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
     property public final float firstBaseline;
     property public final boolean hasVisualOverflow;
     property public final float lastBaseline;
+    property public final int lineCount;
     property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
-    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.ui.text.TextLayoutResult textLayoutResult);
-    field public static final androidx.ui.text.TextPainter INSTANCE;
+    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+    field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
   @androidx.compose.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
-    method public operator boolean contains(androidx.ui.text.TextRange other);
+    method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -655,274 +379,557 @@
     method public int getMin();
     method public boolean getReversed();
     method public int getStart();
-    method public boolean intersects(androidx.ui.text.TextRange other);
+    method public boolean intersects(androidx.compose.ui.text.TextRange other);
     property public final boolean collapsed;
     property public final int length;
     property public final int max;
     property public final int min;
     property public final boolean reversed;
-    field public static final androidx.ui.text.TextRange.Companion Companion;
+    field public static final androidx.compose.ui.text.TextRange.Companion Companion;
   }
 
   public static final class TextRange.Companion {
-    method public androidx.ui.text.TextRange getZero();
-    property public final androidx.ui.text.TextRange Zero;
+    method public androidx.compose.ui.text.TextRange getZero();
+    property public final androidx.compose.ui.text.TextRange Zero;
   }
 
   public final class TextRangeKt {
-    method public static androidx.ui.text.TextRange TextRange(int index);
-    method public static String substring(CharSequence, androidx.ui.text.TextRange range);
+    method public static androidx.compose.ui.text.TextRange TextRange(int index);
+    method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
   @androidx.compose.Immutable public final class TextStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
-    method public androidx.ui.text.style.TextAlign? component15();
-    method public androidx.ui.text.style.TextDirection? component16();
+    method public androidx.compose.ui.text.style.TextAlign? component15();
+    method public androidx.compose.ui.text.style.TextDirection? component16();
     method public long component17();
-    method public androidx.ui.text.style.TextIndent? component18();
+    method public androidx.compose.ui.text.style.TextIndent? component18();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.TextStyle copy-7aJ7aFo(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-7Y_OIKU(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
     method public long getLineHeight();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle toSpanStyle();
-    field public static final androidx.ui.text.TextStyle.Companion Companion;
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
   public static final class TextStyle.Companion {
-    method public androidx.ui.text.TextStyle getDefault();
-    property public final androidx.ui.text.TextStyle Default;
+    method public androidx.compose.ui.text.TextStyle getDefault();
+    property public final androidx.compose.ui.text.TextStyle Default;
   }
 
   public final class TextStyleKt {
-    method public static androidx.ui.text.TextStyle lerp(androidx.ui.text.TextStyle start, androidx.ui.text.TextStyle stop, float fraction);
-    method public static androidx.ui.text.TextStyle resolveDefaults(androidx.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
   }
 
   public interface Typeface {
-    method public androidx.ui.text.font.FontFamily getFontFamily();
-    property public abstract androidx.ui.text.font.FontFamily fontFamily;
+    method public androidx.compose.ui.text.font.FontFamily getFontFamily();
+    property public abstract androidx.compose.ui.text.font.FontFamily fontFamily;
   }
 
 }
 
-package androidx.ui.text.font {
+package androidx.compose.ui.text.font {
 
-  public abstract sealed class FileBasedFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
   @androidx.compose.Immutable public interface Font {
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
-    property public abstract androidx.ui.text.font.FontStyle style;
-    property public abstract androidx.ui.text.font.FontWeight weight;
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
+    property public abstract androidx.compose.ui.text.font.FontStyle style;
+    property public abstract androidx.compose.ui.text.font.FontWeight weight;
   }
 
   public static interface Font.ResourceLoader {
-    method public Object load(androidx.ui.text.font.Font font);
+    method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
   @androidx.compose.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
-    field public static final androidx.ui.text.font.FontFamily.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
 
   public static final class FontFamily.Companion {
-    method public androidx.ui.text.font.GenericFontFamily getCursive();
-    method public androidx.ui.text.font.SystemFontFamily getDefault();
-    method public androidx.ui.text.font.GenericFontFamily getMonospace();
-    method public androidx.ui.text.font.GenericFontFamily getSansSerif();
-    method public androidx.ui.text.font.GenericFontFamily getSerif();
-    property public final androidx.ui.text.font.GenericFontFamily Cursive;
-    property public final androidx.ui.text.font.SystemFontFamily Default;
-    property public final androidx.ui.text.font.GenericFontFamily Monospace;
-    property public final androidx.ui.text.font.GenericFontFamily SansSerif;
-    property public final androidx.ui.text.font.GenericFontFamily Serif;
+    method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+    method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+    method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+    property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+    property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+    property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(androidx.ui.text.font.Font... fonts);
-    method public static androidx.ui.text.font.LoadedFontFamily fontFamily(androidx.ui.text.Typeface typeface);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily asFontFamily(androidx.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.ui.text.font.Font font(int resId, androidx.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.ui.text.font.FontStyle style = androidx.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
-    ctor public FontListFontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method public java.util.List<androidx.ui.text.font.Font> component1();
-    method public boolean contains(androidx.ui.text.font.Font element);
+  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+    ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public java.util.List<androidx.compose.ui.text.font.Font> component1();
+    method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontListFontFamily copy(java.util.List<? extends 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 @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public androidx.compose.ui.text.font.Font get(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
-    method public int indexOf(androidx.ui.text.font.Font element);
+    method public int indexOf(androidx.compose.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);
+    method public java.util.Iterator<androidx.compose.ui.text.font.Font> iterator();
+    method public int lastIndexOf(androidx.compose.ui.text.font.Font element);
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator();
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> subList(int fromIndex, int toIndex);
   }
 
   public enum FontStyle {
-    method public static androidx.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontStyle[] values();
-    enum_constant public static final androidx.ui.text.font.FontStyle Italic;
-    enum_constant public static final androidx.ui.text.font.FontStyle Normal;
+    method public static androidx.compose.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontStyle[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Italic;
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Normal;
   }
 
   public enum FontSynthesis {
-    method public static androidx.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontSynthesis[] values();
-    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;
+    method public static androidx.compose.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontSynthesis[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis All;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis None;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Style;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.ui.text.font.FontWeight> {
+  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
-    method public int compareTo(androidx.ui.text.font.FontWeight other);
+    method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
-    field public static final androidx.ui.text.font.FontWeight.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
 
   public static final class FontWeight.Companion {
-    method public androidx.ui.text.font.FontWeight getBlack();
-    method public androidx.ui.text.font.FontWeight getBold();
-    method public androidx.ui.text.font.FontWeight getExtraBold();
-    method public androidx.ui.text.font.FontWeight getExtraLight();
-    method public androidx.ui.text.font.FontWeight getLight();
-    method public androidx.ui.text.font.FontWeight getMedium();
-    method public androidx.ui.text.font.FontWeight getNormal();
-    method public androidx.ui.text.font.FontWeight getSemiBold();
-    method public androidx.ui.text.font.FontWeight getThin();
-    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();
-    property public final androidx.ui.text.font.FontWeight Black;
-    property public final androidx.ui.text.font.FontWeight Bold;
-    property public final androidx.ui.text.font.FontWeight ExtraBold;
-    property public final androidx.ui.text.font.FontWeight ExtraLight;
-    property public final androidx.ui.text.font.FontWeight Light;
-    property public final androidx.ui.text.font.FontWeight Medium;
-    property public final androidx.ui.text.font.FontWeight Normal;
-    property public final androidx.ui.text.font.FontWeight SemiBold;
-    property public final androidx.ui.text.font.FontWeight Thin;
-    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;
+    method public androidx.compose.ui.text.font.FontWeight getBlack();
+    method public androidx.compose.ui.text.font.FontWeight getBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+    method public androidx.compose.ui.text.font.FontWeight getLight();
+    method public androidx.compose.ui.text.font.FontWeight getMedium();
+    method public androidx.compose.ui.text.font.FontWeight getNormal();
+    method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+    method public androidx.compose.ui.text.font.FontWeight getThin();
+    method public androidx.compose.ui.text.font.FontWeight getW100();
+    method public androidx.compose.ui.text.font.FontWeight getW200();
+    method public androidx.compose.ui.text.font.FontWeight getW300();
+    method public androidx.compose.ui.text.font.FontWeight getW400();
+    method public androidx.compose.ui.text.font.FontWeight getW500();
+    method public androidx.compose.ui.text.font.FontWeight getW600();
+    method public androidx.compose.ui.text.font.FontWeight getW700();
+    method public androidx.compose.ui.text.font.FontWeight getW800();
+    method public androidx.compose.ui.text.font.FontWeight getW900();
+    property public final androidx.compose.ui.text.font.FontWeight Black;
+    property public final androidx.compose.ui.text.font.FontWeight Bold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+    property public final androidx.compose.ui.text.font.FontWeight Light;
+    property public final androidx.compose.ui.text.font.FontWeight Medium;
+    property public final androidx.compose.ui.text.font.FontWeight Normal;
+    property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+    property public final androidx.compose.ui.text.font.FontWeight Thin;
+    property public final androidx.compose.ui.text.font.FontWeight W100;
+    property public final androidx.compose.ui.text.font.FontWeight W200;
+    property public final androidx.compose.ui.text.font.FontWeight W300;
+    property public final androidx.compose.ui.text.font.FontWeight W400;
+    property public final androidx.compose.ui.text.font.FontWeight W500;
+    property public final androidx.compose.ui.text.font.FontWeight W600;
+    property public final androidx.compose.ui.text.font.FontWeight W700;
+    property public final androidx.compose.ui.text.font.FontWeight W800;
+    property public final androidx.compose.ui.text.font.FontWeight W900;
   }
 
   public final class FontWeightKt {
-    method public static androidx.ui.text.font.FontWeight lerp(androidx.ui.text.font.FontWeight start, androidx.ui.text.font.FontWeight stop, float fraction);
+    method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.ui.text.font.SystemFontFamily {
+  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
-  public final class LoadedFontFamily extends androidx.ui.text.font.FontFamily {
-    ctor public LoadedFontFamily(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface component1();
-    method public androidx.ui.text.font.LoadedFontFamily copy(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface getTypeface();
+  public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+    ctor public LoadedFontFamily(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface component1();
+    method public androidx.compose.ui.text.font.LoadedFontFamily copy(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface getTypeface();
   }
 
-  public final class ResourceFont implements androidx.ui.text.font.Font {
-    ctor public ResourceFont(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+  public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+    ctor public ResourceFont(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int component1();
-    method public androidx.ui.text.font.FontWeight component2();
-    method public androidx.ui.text.font.FontStyle component3();
-    method public androidx.ui.text.font.ResourceFont copy(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+    method public androidx.compose.ui.text.font.FontWeight component2();
+    method public androidx.compose.ui.text.font.FontStyle component3();
+    method public androidx.compose.ui.text.font.ResourceFont copy(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int getResId();
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
   }
 
-  public abstract sealed class SystemFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
 }
 
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.input {
+
+  public final class BackspaceKeyEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public BackspaceKeyEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class CommitTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public CommitTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.CommitTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteAllEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteAllEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface EditOperation {
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class EditingBuffer {
+    ctor public EditingBuffer(String initialText, androidx.compose.ui.text.TextRange initialSelection);
+    field public static final int NOWHERE = -1; // 0xffffffff
+  }
+
+  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+    ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor @Deprecated public EditorValue();
+    method @Deprecated public String component1();
+    method @Deprecated public androidx.compose.ui.text.TextRange component2();
+    method @Deprecated public androidx.compose.ui.text.TextRange? component3();
+    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
+    method @Deprecated public String getSelectedText();
+    method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
+    method @Deprecated public String getText();
+    method @Deprecated public String getTextAfterSelection(int maxChars);
+    method @Deprecated public String getTextBeforeSelection(int maxChars);
+  }
+
+  public final class FinishComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public FinishComposingTextEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class GapBufferKt {
+  }
+
+  public enum ImeAction {
+    method public static androidx.compose.ui.text.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.ImeAction[] values();
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Done;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Go;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Next;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction NoAction;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Previous;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Search;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Send;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Unspecified;
+  }
+
+  public interface InputEventListener {
+    method public void onEditOperations(java.util.List<? extends androidx.compose.ui.text.input.EditOperation> editOps);
+    method public void onImeAction(androidx.compose.ui.text.input.ImeAction imeAction);
+  }
+
+  public enum KeyboardType {
+    method public static androidx.compose.ui.text.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.KeyboardType[] values();
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Ascii;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Email;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Number;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType NumberPassword;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Password;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Phone;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Text;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Uri;
+  }
+
+  public final class MoveCursorEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public MoveCursorEditOp(int amount);
+    method public int component1();
+    method public androidx.compose.ui.text.input.MoveCursorEditOp copy(int amount);
+    method public int getAmount();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface OffsetMap {
+    method public int originalToTransformed(int offset);
+    method public int transformedToOriginal(int offset);
+    field public static final androidx.compose.ui.text.input.OffsetMap.Companion Companion;
+  }
+
+  public static final class OffsetMap.Companion {
+    method public androidx.compose.ui.text.input.OffsetMap getIdentityOffsetMap();
+    property public final androidx.compose.ui.text.input.OffsetMap identityOffsetMap;
+  }
+
+  public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
+    ctor public PasswordVisualTransformation(char mask);
+    ctor public PasswordVisualTransformation();
+    method public char component1();
+    method public androidx.compose.ui.text.input.PasswordVisualTransformation copy(char mask);
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    method public char getMask();
+  }
+
+  public interface PlatformTextInputService {
+    method public void hideSoftwareKeyboard();
+    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard();
+    method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput();
+  }
+
+  public final class SetComposingRegionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingRegionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingRegionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetSelectionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetSelectionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetSelectionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  @androidx.compose.Immutable public final class TextFieldValue {
+    ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor public TextFieldValue();
+    method public String component1();
+    method public androidx.compose.ui.text.TextRange component2();
+    method public androidx.compose.ui.text.TextRange? component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method public androidx.compose.ui.text.TextRange? getComposition();
+    method public androidx.compose.ui.text.TextRange getSelection();
+    method public String getText();
+    field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+  }
+
+  public static final class TextFieldValue.Companion {
+    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+  }
+
+  public final class TextFieldValueKt {
+    method public static String getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+    method public static String getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+    method public static String getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+  }
+
+  public class TextInputService {
+    ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+    method public void hideSoftwareKeyboard(int token);
+    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(int token, androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard(int token);
+    method public int startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput(int token);
+  }
+
+  public final class TextInputServiceKt {
+    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.compose.ui.text.input.PlatformTextInputService,androidx.compose.ui.text.input.TextInputService> getTextInputServiceFactory();
+    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.PlatformTextInputService,? extends androidx.compose.ui.text.input.TextInputService> p);
+    field public static final int INVALID_SESSION = -1; // 0xffffffff
+    field public static final int NO_SESSION = 0; // 0x0
+  }
+
+  public final class TransformedText {
+    ctor public TransformedText(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.AnnotatedString component1();
+    method public androidx.compose.ui.text.input.OffsetMap component2();
+    method public androidx.compose.ui.text.input.TransformedText copy(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.input.OffsetMap getOffsetMap();
+    method public androidx.compose.ui.text.AnnotatedString getTransformedText();
+  }
+
+  @androidx.compose.Immutable public interface VisualTransformation {
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+  }
+
+  public static final class VisualTransformation.Companion {
+    method public androidx.compose.ui.text.input.VisualTransformation getNone();
+    property public final androidx.compose.ui.text.input.VisualTransformation None;
+  }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+  public final class AndroidPlatformLocaleKt {
+  }
+
+  @androidx.compose.Immutable public final class Locale {
+    ctor public Locale(String languageTag);
+    method public String getLanguage();
+    method public String getRegion();
+    method public String getScript();
+    method public String toLanguageTag();
+    property public final String language;
+    property public final String region;
+    property public final String script;
+    field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+  }
+
+  public static final class Locale.Companion {
+    method public androidx.compose.ui.text.intl.Locale getCurrent();
+    property public final androidx.compose.ui.text.intl.Locale current;
+  }
+
+  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+    ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    ctor public LocaleList(String languageTags);
+    ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
+    method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method public operator androidx.compose.ui.text.intl.Locale get(int i);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+    method public int getSize();
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+    property public int size;
+    field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+  }
+
+  public static final class LocaleList.Companion {
+    method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+    property public final androidx.compose.ui.text.intl.LocaleList current;
+  }
+
+  public final class PlatformLocaleKt {
+  }
+
+}
+
+package androidx.compose.ui.text.platform {
 
   public final class AndroidParagraphHelperKt {
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.ui.text.TextStyle,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.ui.text.font.Font.ResourceLoader,androidx.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.ui.text.TextStyle,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.ui.text.font.Font.ResourceLoader,? extends androidx.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
-    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.ui.text.ParagraphConstraints,androidx.ui.text.Paragraph> getParagraphActualFactory();
-    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.ui.text.ParagraphConstraints,? extends androidx.ui.text.Paragraph> p);
+    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.compose.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.compose.ui.text.ParagraphConstraints,androidx.compose.ui.text.Paragraph> getParagraphActualFactory();
+    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.compose.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.compose.ui.text.ParagraphConstraints,? extends androidx.compose.ui.text.Paragraph> p);
   }
 
   public final class AndroidStringDelegateKt {
   }
 
   public final class TypefaceAdapterKt {
-    method public static androidx.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.ui.text.font.FontWeight,? extends androidx.ui.text.font.FontStyle>>? necessaryStyles = null);
+    method public static androidx.compose.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.compose.ui.text.font.FontWeight,? extends androidx.compose.ui.text.font.FontStyle>>? necessaryStyles = null);
   }
 
 }
 
-package androidx.ui.text.platform.extensions {
+package androidx.compose.ui.text.platform.extensions {
 
   public final class LocaleExtensionsKt {
   }
@@ -938,7 +945,7 @@
 
 }
 
-package androidx.ui.text.style {
+package androidx.compose.ui.text.style {
 
   @androidx.compose.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
@@ -948,7 +955,7 @@
     method public float getMultiplier();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
     method @androidx.compose.Immutable public static inline String! toString-impl(float p);
-    field public static final androidx.ui.text.style.BaselineShift.Companion Companion;
+    field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
   public static final class BaselineShift.Companion {
@@ -961,54 +968,54 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-7csQwvo(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
-    method public static androidx.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.ResolvedTextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Rtl;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
   }
 
   public enum TextAlign {
-    method public static androidx.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextAlign[] values();
-    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;
+    method public static androidx.compose.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Center;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign End;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Justify;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Left;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Right;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
   @androidx.compose.Immutable public final class TextDecoration {
     method public int component1();
-    method public operator boolean contains(androidx.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextDecoration copy(int mask);
+    method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
-    method public operator androidx.ui.text.style.TextDecoration plus(androidx.ui.text.style.TextDecoration decoration);
-    field public static final androidx.ui.text.style.TextDecoration.Companion Companion;
+    method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+    field public static final androidx.compose.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;
+    method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+    method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+    method public androidx.compose.ui.text.style.TextDecoration getNone();
+    method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+    property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+    property public final androidx.compose.ui.text.style.TextDecoration None;
+    property public final androidx.compose.ui.text.style.TextDecoration Underline;
   }
 
   public enum TextDirection {
-    method public static androidx.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.TextDirection Content;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrLtr;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrRtl;
-    enum_constant public static final androidx.ui.text.style.TextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.TextDirection Rtl;
+    method public static androidx.compose.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Content;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrLtr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrRtl;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
   @androidx.compose.Immutable public final class TextGeometricTransform {
@@ -1016,42 +1023,42 @@
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.Immutable public androidx.compose.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;
+    field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
   }
 
   public static final class TextGeometricTransform.Companion {
   }
 
   public final class TextGeometricTransformKt {
-    method public static androidx.ui.text.style.TextGeometricTransform lerp(androidx.ui.text.style.TextGeometricTransform start, androidx.ui.text.style.TextGeometricTransform stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion Companion;
+    field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
   }
 
   public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNone();
-    property public final androidx.ui.text.style.TextIndent None;
+    method public androidx.compose.ui.text.style.TextIndent getNone();
+    property public final androidx.compose.ui.text.style.TextIndent None;
   }
 
   public final class TextIndentKt {
-    method public static androidx.ui.text.style.TextIndent lerp(androidx.ui.text.style.TextIndent start, androidx.ui.text.style.TextIndent stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
   }
 
   public enum TextOverflow {
-    method public static androidx.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextOverflow[] values();
-    enum_constant public static final androidx.ui.text.style.TextOverflow Clip;
-    enum_constant public static final androidx.ui.text.style.TextOverflow Ellipsis;
+    method public static androidx.compose.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextOverflow[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Clip;
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Ellipsis;
   }
 
 }
diff --git a/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt
index 9230b27..f59f204 100644
--- a/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,321 +1,38 @@
 // Signature format: 3.0
-package androidx.ui.input {
-
-  public final class BackspaceKeyEditOp implements androidx.ui.input.EditOperation {
-    ctor public BackspaceKeyEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class CommitTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public CommitTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.CommitTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteAllEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteAllEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface EditOperation {
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class EditingBuffer {
-    ctor public EditingBuffer(String initialText, androidx.ui.text.TextRange initialSelection);
-    field public static final int NOWHERE = -1; // 0xffffffff
-  }
-
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
-    ctor @Deprecated public EditorValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor @Deprecated public EditorValue();
-    method @Deprecated public String component1();
-    method @Deprecated public androidx.ui.text.TextRange component2();
-    method @Deprecated public androidx.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.ui.input.EditorValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method @Deprecated public androidx.ui.text.TextRange? getComposition();
-    method @Deprecated public String getSelectedText();
-    method @Deprecated public androidx.ui.text.TextRange getSelection();
-    method @Deprecated public String getText();
-    method @Deprecated public String getTextAfterSelection(int maxChars);
-    method @Deprecated public String getTextBeforeSelection(int maxChars);
-  }
-
-  public final class FinishComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public FinishComposingTextEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class GapBufferKt {
-  }
-
-  public enum ImeAction {
-    method public static androidx.ui.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.ImeAction[] values();
-    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 interface InputEventListener {
-    method public void onEditOperations(java.util.List<? extends androidx.ui.input.EditOperation> editOps);
-    method public void onImeAction(androidx.ui.input.ImeAction imeAction);
-  }
-
-  public enum KeyboardType {
-    method public static androidx.ui.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.KeyboardType[] values();
-    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 final class MoveCursorEditOp implements androidx.ui.input.EditOperation {
-    ctor public MoveCursorEditOp(int amount);
-    method public int component1();
-    method public androidx.ui.input.MoveCursorEditOp copy(int amount);
-    method public int getAmount();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface OffsetMap {
-    method public int originalToTransformed(int offset);
-    method public int transformedToOriginal(int offset);
-    field public static final androidx.ui.input.OffsetMap.Companion Companion;
-  }
-
-  public static final class OffsetMap.Companion {
-    method public androidx.ui.input.OffsetMap getIdentityOffsetMap();
-    property public final androidx.ui.input.OffsetMap identityOffsetMap;
-  }
-
-  public final class PasswordVisualTransformation implements androidx.ui.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
-    method public char component1();
-    method public androidx.ui.input.PasswordVisualTransformation copy(char mask);
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    method public char getMask();
-  }
-
-  public interface PlatformTextInputService {
-    method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard();
-    method public void startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput();
-  }
-
-  public final class SetComposingRegionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingRegionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingRegionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetSelectionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetSelectionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetSelectionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  @androidx.compose.Immutable public final class TextFieldValue {
-    ctor public TextFieldValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor public TextFieldValue();
-    method public String component1();
-    method public androidx.ui.text.TextRange component2();
-    method public androidx.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.ui.input.TextFieldValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method public androidx.ui.text.TextRange? getComposition();
-    method public androidx.ui.text.TextRange getSelection();
-    method public String getText();
-    field public static final androidx.ui.input.TextFieldValue.Companion Companion;
-  }
-
-  public static final class TextFieldValue.Companion {
-    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> getSaver();
-    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> Saver;
-  }
-
-  public final class TextFieldValueKt {
-    method public static String getSelectedText(androidx.ui.input.TextFieldValue);
-    method public static String getTextAfterSelection(androidx.ui.input.TextFieldValue, int maxChars);
-    method public static String getTextBeforeSelection(androidx.ui.input.TextFieldValue, int maxChars);
-  }
-
-  public class TextInputService {
-    ctor public TextInputService(androidx.ui.input.PlatformTextInputService platformTextInputService);
-    method public void hideSoftwareKeyboard(int token);
-    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(int token, androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard(int token);
-    method public int startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput(int token);
-  }
-
-  public final class TextInputServiceKt {
-    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.ui.input.PlatformTextInputService,androidx.ui.input.TextInputService> getTextInputServiceFactory();
-    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.ui.input.PlatformTextInputService,? extends androidx.ui.input.TextInputService> p);
-    field public static final int INVALID_SESSION = -1; // 0xffffffff
-    field public static final int NO_SESSION = 0; // 0x0
-  }
-
-  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();
-  }
-
-  @androidx.compose.Immutable public interface VisualTransformation {
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    field public static final androidx.ui.input.VisualTransformation.Companion Companion;
-  }
-
-  public static final class VisualTransformation.Companion {
-    method public androidx.ui.input.VisualTransformation getNone();
-    property public final androidx.ui.input.VisualTransformation None;
-  }
-
-}
-
-package androidx.ui.intl {
-
-  public final class AndroidPlatformLocaleKt {
-  }
-
-  @androidx.compose.Immutable public final class Locale {
-    ctor public Locale(String languageTag);
-    method public String getLanguage();
-    method public String getRegion();
-    method public String getScript();
-    method public String toLanguageTag();
-    property public final String language;
-    property public final String region;
-    property public final String script;
-    field public static final androidx.ui.intl.Locale.Companion Companion;
-  }
-
-  public static final class Locale.Companion {
-    method public androidx.ui.intl.Locale getCurrent();
-    property public final androidx.ui.intl.Locale current;
-  }
-
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.ui.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public LocaleList(java.util.List<androidx.ui.intl.Locale> localeList);
-    ctor public LocaleList(String languageTags);
-    ctor public LocaleList(androidx.ui.intl.Locale... locales);
-    method public java.util.List<androidx.ui.intl.Locale> component1();
-    method public operator boolean contains(androidx.ui.intl.Locale element);
-    method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.intl.LocaleList copy(java.util.List<androidx.ui.intl.Locale> localeList);
-    method public operator androidx.ui.intl.Locale get(int i);
-    method public java.util.List<androidx.ui.intl.Locale> getLocaleList();
-    method public int getSize();
-    method public boolean isEmpty();
-    method public java.util.Iterator<androidx.ui.intl.Locale> iterator();
-    property public int size;
-    field public static final androidx.ui.intl.LocaleList.Companion Companion;
-  }
-
-  public static final class LocaleList.Companion {
-    method public androidx.ui.intl.LocaleList getCurrent();
-    property public final androidx.ui.intl.LocaleList current;
-  }
-
-  public final class PlatformLocaleKt {
-  }
-
-}
-
-package androidx.ui.text {
+package androidx.compose.ui.text {
 
   @androidx.compose.Immutable public final class AnnotatedString {
-    ctor public AnnotatedString(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.ui.text.AnnotatedString copy(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> getParagraphStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> getSpanStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.ui.text.AnnotatedString plus(androidx.ui.text.AnnotatedString other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
     ctor public AnnotatedString.Builder(int capacity);
     ctor public AnnotatedString.Builder();
     ctor public AnnotatedString.Builder(String text);
-    ctor public AnnotatedString.Builder(androidx.ui.text.AnnotatedString text);
+    ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String scope, String annotation, int start, int end);
-    method public void addStyle(androidx.ui.text.SpanStyle style, int start, int end);
-    method public void addStyle(androidx.ui.text.ParagraphStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
     method public void append(String text);
     method public void append(char p);
-    method public void append(androidx.ui.text.AnnotatedString text);
+    method public void append(androidx.compose.ui.text.AnnotatedString text);
     method public int getLength();
     method public void pop();
     method public void pop(int index);
     method public int pushStringAnnotation(String tag, String annotation);
-    method public int pushStyle(androidx.ui.text.SpanStyle style);
-    method public int pushStyle(androidx.ui.text.ParagraphStyle style);
-    method public androidx.ui.text.AnnotatedString toAnnotatedString();
+    method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+    method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+    method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
     property public final int length;
   }
 
@@ -326,7 +43,7 @@
     method public int component2();
     method public int component3();
     method public String component4();
-    method public androidx.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -334,18 +51,18 @@
   }
 
   public final class AnnotatedStringKt {
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.SpanStyle spanStyle, androidx.ui.text.ParagraphStyle? paragraphStyle = null);
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.ParagraphStyle paragraphStyle);
-    method @Deprecated public static inline androidx.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static inline androidx.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static androidx.ui.text.AnnotatedString capitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString decapitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static int getLength(androidx.ui.text.AnnotatedString);
-    method public static androidx.ui.text.AnnotatedString subSequence(androidx.ui.text.AnnotatedString, int start, int end);
-    method public static androidx.ui.text.AnnotatedString toLowerCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString toUpperCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, androidx.compose.ui.text.ParagraphStyle? paragraphStyle = null);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+    method @Deprecated public static inline androidx.compose.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static inline androidx.compose.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static int getLength(androidx.compose.ui.text.AnnotatedString);
+    method public static androidx.compose.ui.text.AnnotatedString subSequence(androidx.compose.ui.text.AnnotatedString, int start, int end);
+    method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalTextApi {
@@ -355,16 +72,16 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
-    method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+    method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
     method public float getLastBaseline();
     method public float getLineBottom(int lineIndex);
     method public int getLineCount();
@@ -372,6 +89,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -382,11 +100,11 @@
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public final boolean didExceedMaxLines;
     property public final float firstBaseline;
@@ -399,12 +117,12 @@
     property public final float width;
   }
 
-  public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.AnnotatedString getAnnotatedString();
+  public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
     property public float maxIntrinsicWidth;
     property public float minIntrinsicWidth;
   }
@@ -416,7 +134,7 @@
   }
 
   public interface Paragraph {
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
@@ -430,6 +148,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -439,11 +158,11 @@
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
@@ -459,7 +178,7 @@
   public final class ParagraphConstraints {
     ctor public ParagraphConstraints(float width);
     method public float component1();
-    method public androidx.ui.text.ParagraphConstraints copy(float width);
+    method public androidx.compose.ui.text.ParagraphConstraints copy(float width);
     method public float getWidth();
   }
 
@@ -471,56 +190,56 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
   @androidx.compose.Immutable public final class ParagraphStyle {
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
+    method public androidx.compose.ui.text.style.TextAlign? component1();
+    method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
-    method public androidx.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.ui.text.ParagraphStyle copy-JVmhFNw(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.TextIndent? component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle merge(androidx.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.ParagraphStyle plus(androidx.ui.text.ParagraphStyle other);
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.ui.text.ParagraphStyle lerp(androidx.ui.text.ParagraphStyle start, androidx.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Placeholder {
     method public long component1();
     method public long component2();
-    method public androidx.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.ui.text.Placeholder copy-eLqjHCw(long width, long height, androidx.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
-    method public androidx.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
   }
 
   public enum PlaceholderVerticalAlign {
-    method public static androidx.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.PlaceholderVerticalAlign[] values();
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign AboveBaseline;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Bottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Center;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextBottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextCenter;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextTop;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Top;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign AboveBaseline;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Bottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Center;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextBottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextCenter;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextTop;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Top;
   }
 
   public final class SoftwareKeyboardController {
-    ctor public SoftwareKeyboardController(androidx.ui.input.TextInputService textInputService, int token);
+    ctor public SoftwareKeyboardController(androidx.compose.ui.text.input.TextInputService textInputService, int token);
     method public void hideSoftwareKeyboard();
     method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
@@ -528,86 +247,86 @@
 
   @androidx.compose.Immutable public final class SpanStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.SpanStyle copy-HjQ0eR4(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-3JaCuMk(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle merge(androidx.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.SpanStyle plus(androidx.ui.text.SpanStyle other);
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
-    method public static androidx.ui.text.SpanStyle lerp(androidx.ui.text.SpanStyle start, androidx.ui.text.SpanStyle stop, float fraction);
+    method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
   }
 
   public final class StringKt {
-    method public static String capitalize(String, androidx.ui.intl.Locale locale);
-    method public static String capitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String decapitalize(String, androidx.ui.intl.Locale locale);
-    method public static String decapitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toLowerCase(String, androidx.ui.intl.Locale locale);
-    method public static String toLowerCase(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toUpperCase(String, androidx.ui.intl.Locale locale);
-    method public static String toUpperCase(String, androidx.ui.intl.LocaleList localeList);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
   }
 
   public final class TextLayoutHelperKt {
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.text.AnnotatedString component1();
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.AnnotatedString component1();
     method public androidx.ui.core.Constraints component10();
-    method public androidx.ui.text.TextStyle component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> component3();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
-    method public androidx.ui.text.style.TextOverflow component6();
+    method public androidx.compose.ui.text.style.TextOverflow component6();
     method public androidx.ui.unit.Density component7();
     method public androidx.ui.core.LayoutDirection component8();
-    method public androidx.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.ui.text.TextLayoutInput copy(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.unit.Density getDensity();
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
-    method public androidx.ui.text.style.TextOverflow getOverflow();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
-    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
+    method public androidx.compose.ui.text.style.TextOverflow getOverflow();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public boolean getSoftWrap();
-    method public androidx.ui.text.TextStyle getStyle();
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.TextStyle getStyle();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   public final class TextLayoutResult {
-    method public androidx.ui.text.TextLayoutInput component1();
+    method public androidx.compose.ui.text.TextLayoutInput component1();
     method public androidx.ui.unit.IntSize component3();
-    method public androidx.ui.text.TextLayoutResult copy(androidx.ui.text.TextLayoutInput layoutInput, androidx.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
@@ -616,38 +335,43 @@
     method public boolean getHasVisualOverflow();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
     method public float getLastBaseline();
-    method public androidx.ui.text.TextLayoutInput getLayoutInput();
+    method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
     method public float getLineBottom(int lineIndex);
+    method public int getLineCount();
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
+    method public float getLineLeft(int lineIndex);
+    method public float getLineRight(int lineIndex);
     method public int getLineStart(int lineIndex);
     method public float getLineTop(int lineIndex);
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
     property public final float firstBaseline;
     property public final boolean hasVisualOverflow;
     property public final float lastBaseline;
+    property public final int lineCount;
     property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
-    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.ui.text.TextLayoutResult textLayoutResult);
-    field public static final androidx.ui.text.TextPainter INSTANCE;
+    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+    field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
   @androidx.compose.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
-    method public operator boolean contains(androidx.ui.text.TextRange other);
+    method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -655,274 +379,557 @@
     method public int getMin();
     method public boolean getReversed();
     method public int getStart();
-    method public boolean intersects(androidx.ui.text.TextRange other);
+    method public boolean intersects(androidx.compose.ui.text.TextRange other);
     property public final boolean collapsed;
     property public final int length;
     property public final int max;
     property public final int min;
     property public final boolean reversed;
-    field public static final androidx.ui.text.TextRange.Companion Companion;
+    field public static final androidx.compose.ui.text.TextRange.Companion Companion;
   }
 
   public static final class TextRange.Companion {
-    method public androidx.ui.text.TextRange getZero();
-    property public final androidx.ui.text.TextRange Zero;
+    method public androidx.compose.ui.text.TextRange getZero();
+    property public final androidx.compose.ui.text.TextRange Zero;
   }
 
   public final class TextRangeKt {
-    method public static androidx.ui.text.TextRange TextRange(int index);
-    method public static String substring(CharSequence, androidx.ui.text.TextRange range);
+    method public static androidx.compose.ui.text.TextRange TextRange(int index);
+    method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
   @androidx.compose.Immutable public final class TextStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
-    method public androidx.ui.text.style.TextAlign? component15();
-    method public androidx.ui.text.style.TextDirection? component16();
+    method public androidx.compose.ui.text.style.TextAlign? component15();
+    method public androidx.compose.ui.text.style.TextDirection? component16();
     method public long component17();
-    method public androidx.ui.text.style.TextIndent? component18();
+    method public androidx.compose.ui.text.style.TextIndent? component18();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.TextStyle copy-7aJ7aFo(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-7Y_OIKU(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
     method public long getLineHeight();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle toSpanStyle();
-    field public static final androidx.ui.text.TextStyle.Companion Companion;
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
   public static final class TextStyle.Companion {
-    method public androidx.ui.text.TextStyle getDefault();
-    property public final androidx.ui.text.TextStyle Default;
+    method public androidx.compose.ui.text.TextStyle getDefault();
+    property public final androidx.compose.ui.text.TextStyle Default;
   }
 
   public final class TextStyleKt {
-    method public static androidx.ui.text.TextStyle lerp(androidx.ui.text.TextStyle start, androidx.ui.text.TextStyle stop, float fraction);
-    method public static androidx.ui.text.TextStyle resolveDefaults(androidx.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
   }
 
   public interface Typeface {
-    method public androidx.ui.text.font.FontFamily getFontFamily();
-    property public abstract androidx.ui.text.font.FontFamily fontFamily;
+    method public androidx.compose.ui.text.font.FontFamily getFontFamily();
+    property public abstract androidx.compose.ui.text.font.FontFamily fontFamily;
   }
 
 }
 
-package androidx.ui.text.font {
+package androidx.compose.ui.text.font {
 
-  public abstract sealed class FileBasedFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
   @androidx.compose.Immutable public interface Font {
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
-    property public abstract androidx.ui.text.font.FontStyle style;
-    property public abstract androidx.ui.text.font.FontWeight weight;
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
+    property public abstract androidx.compose.ui.text.font.FontStyle style;
+    property public abstract androidx.compose.ui.text.font.FontWeight weight;
   }
 
   public static interface Font.ResourceLoader {
-    method public Object load(androidx.ui.text.font.Font font);
+    method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
   @androidx.compose.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
-    field public static final androidx.ui.text.font.FontFamily.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
 
   public static final class FontFamily.Companion {
-    method public androidx.ui.text.font.GenericFontFamily getCursive();
-    method public androidx.ui.text.font.SystemFontFamily getDefault();
-    method public androidx.ui.text.font.GenericFontFamily getMonospace();
-    method public androidx.ui.text.font.GenericFontFamily getSansSerif();
-    method public androidx.ui.text.font.GenericFontFamily getSerif();
-    property public final androidx.ui.text.font.GenericFontFamily Cursive;
-    property public final androidx.ui.text.font.SystemFontFamily Default;
-    property public final androidx.ui.text.font.GenericFontFamily Monospace;
-    property public final androidx.ui.text.font.GenericFontFamily SansSerif;
-    property public final androidx.ui.text.font.GenericFontFamily Serif;
+    method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+    method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+    method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+    property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+    property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+    property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(androidx.ui.text.font.Font... fonts);
-    method public static androidx.ui.text.font.LoadedFontFamily fontFamily(androidx.ui.text.Typeface typeface);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily asFontFamily(androidx.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.ui.text.font.Font font(int resId, androidx.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.ui.text.font.FontStyle style = androidx.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
-    ctor public FontListFontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method public java.util.List<androidx.ui.text.font.Font> component1();
-    method public boolean contains(androidx.ui.text.font.Font element);
+  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+    ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public java.util.List<androidx.compose.ui.text.font.Font> component1();
+    method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontListFontFamily copy(java.util.List<? extends 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 @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public androidx.compose.ui.text.font.Font get(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
-    method public int indexOf(androidx.ui.text.font.Font element);
+    method public int indexOf(androidx.compose.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);
+    method public java.util.Iterator<androidx.compose.ui.text.font.Font> iterator();
+    method public int lastIndexOf(androidx.compose.ui.text.font.Font element);
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator();
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> subList(int fromIndex, int toIndex);
   }
 
   public enum FontStyle {
-    method public static androidx.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontStyle[] values();
-    enum_constant public static final androidx.ui.text.font.FontStyle Italic;
-    enum_constant public static final androidx.ui.text.font.FontStyle Normal;
+    method public static androidx.compose.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontStyle[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Italic;
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Normal;
   }
 
   public enum FontSynthesis {
-    method public static androidx.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontSynthesis[] values();
-    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;
+    method public static androidx.compose.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontSynthesis[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis All;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis None;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Style;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.ui.text.font.FontWeight> {
+  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
-    method public int compareTo(androidx.ui.text.font.FontWeight other);
+    method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
-    field public static final androidx.ui.text.font.FontWeight.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
 
   public static final class FontWeight.Companion {
-    method public androidx.ui.text.font.FontWeight getBlack();
-    method public androidx.ui.text.font.FontWeight getBold();
-    method public androidx.ui.text.font.FontWeight getExtraBold();
-    method public androidx.ui.text.font.FontWeight getExtraLight();
-    method public androidx.ui.text.font.FontWeight getLight();
-    method public androidx.ui.text.font.FontWeight getMedium();
-    method public androidx.ui.text.font.FontWeight getNormal();
-    method public androidx.ui.text.font.FontWeight getSemiBold();
-    method public androidx.ui.text.font.FontWeight getThin();
-    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();
-    property public final androidx.ui.text.font.FontWeight Black;
-    property public final androidx.ui.text.font.FontWeight Bold;
-    property public final androidx.ui.text.font.FontWeight ExtraBold;
-    property public final androidx.ui.text.font.FontWeight ExtraLight;
-    property public final androidx.ui.text.font.FontWeight Light;
-    property public final androidx.ui.text.font.FontWeight Medium;
-    property public final androidx.ui.text.font.FontWeight Normal;
-    property public final androidx.ui.text.font.FontWeight SemiBold;
-    property public final androidx.ui.text.font.FontWeight Thin;
-    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;
+    method public androidx.compose.ui.text.font.FontWeight getBlack();
+    method public androidx.compose.ui.text.font.FontWeight getBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+    method public androidx.compose.ui.text.font.FontWeight getLight();
+    method public androidx.compose.ui.text.font.FontWeight getMedium();
+    method public androidx.compose.ui.text.font.FontWeight getNormal();
+    method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+    method public androidx.compose.ui.text.font.FontWeight getThin();
+    method public androidx.compose.ui.text.font.FontWeight getW100();
+    method public androidx.compose.ui.text.font.FontWeight getW200();
+    method public androidx.compose.ui.text.font.FontWeight getW300();
+    method public androidx.compose.ui.text.font.FontWeight getW400();
+    method public androidx.compose.ui.text.font.FontWeight getW500();
+    method public androidx.compose.ui.text.font.FontWeight getW600();
+    method public androidx.compose.ui.text.font.FontWeight getW700();
+    method public androidx.compose.ui.text.font.FontWeight getW800();
+    method public androidx.compose.ui.text.font.FontWeight getW900();
+    property public final androidx.compose.ui.text.font.FontWeight Black;
+    property public final androidx.compose.ui.text.font.FontWeight Bold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+    property public final androidx.compose.ui.text.font.FontWeight Light;
+    property public final androidx.compose.ui.text.font.FontWeight Medium;
+    property public final androidx.compose.ui.text.font.FontWeight Normal;
+    property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+    property public final androidx.compose.ui.text.font.FontWeight Thin;
+    property public final androidx.compose.ui.text.font.FontWeight W100;
+    property public final androidx.compose.ui.text.font.FontWeight W200;
+    property public final androidx.compose.ui.text.font.FontWeight W300;
+    property public final androidx.compose.ui.text.font.FontWeight W400;
+    property public final androidx.compose.ui.text.font.FontWeight W500;
+    property public final androidx.compose.ui.text.font.FontWeight W600;
+    property public final androidx.compose.ui.text.font.FontWeight W700;
+    property public final androidx.compose.ui.text.font.FontWeight W800;
+    property public final androidx.compose.ui.text.font.FontWeight W900;
   }
 
   public final class FontWeightKt {
-    method public static androidx.ui.text.font.FontWeight lerp(androidx.ui.text.font.FontWeight start, androidx.ui.text.font.FontWeight stop, float fraction);
+    method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.ui.text.font.SystemFontFamily {
+  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
-  public final class LoadedFontFamily extends androidx.ui.text.font.FontFamily {
-    ctor public LoadedFontFamily(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface component1();
-    method public androidx.ui.text.font.LoadedFontFamily copy(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface getTypeface();
+  public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+    ctor public LoadedFontFamily(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface component1();
+    method public androidx.compose.ui.text.font.LoadedFontFamily copy(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface getTypeface();
   }
 
-  public final class ResourceFont implements androidx.ui.text.font.Font {
-    ctor public ResourceFont(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+  public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+    ctor public ResourceFont(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int component1();
-    method public androidx.ui.text.font.FontWeight component2();
-    method public androidx.ui.text.font.FontStyle component3();
-    method public androidx.ui.text.font.ResourceFont copy(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+    method public androidx.compose.ui.text.font.FontWeight component2();
+    method public androidx.compose.ui.text.font.FontStyle component3();
+    method public androidx.compose.ui.text.font.ResourceFont copy(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int getResId();
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
   }
 
-  public abstract sealed class SystemFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
 }
 
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.input {
+
+  public final class BackspaceKeyEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public BackspaceKeyEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class CommitTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public CommitTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.CommitTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteAllEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteAllEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface EditOperation {
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class EditingBuffer {
+    ctor public EditingBuffer(String initialText, androidx.compose.ui.text.TextRange initialSelection);
+    field public static final int NOWHERE = -1; // 0xffffffff
+  }
+
+  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+    ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor @Deprecated public EditorValue();
+    method @Deprecated public String component1();
+    method @Deprecated public androidx.compose.ui.text.TextRange component2();
+    method @Deprecated public androidx.compose.ui.text.TextRange? component3();
+    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
+    method @Deprecated public String getSelectedText();
+    method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
+    method @Deprecated public String getText();
+    method @Deprecated public String getTextAfterSelection(int maxChars);
+    method @Deprecated public String getTextBeforeSelection(int maxChars);
+  }
+
+  public final class FinishComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public FinishComposingTextEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class GapBufferKt {
+  }
+
+  public enum ImeAction {
+    method public static androidx.compose.ui.text.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.ImeAction[] values();
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Done;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Go;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Next;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction NoAction;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Previous;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Search;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Send;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Unspecified;
+  }
+
+  public interface InputEventListener {
+    method public void onEditOperations(java.util.List<? extends androidx.compose.ui.text.input.EditOperation> editOps);
+    method public void onImeAction(androidx.compose.ui.text.input.ImeAction imeAction);
+  }
+
+  public enum KeyboardType {
+    method public static androidx.compose.ui.text.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.KeyboardType[] values();
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Ascii;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Email;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Number;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType NumberPassword;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Password;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Phone;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Text;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Uri;
+  }
+
+  public final class MoveCursorEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public MoveCursorEditOp(int amount);
+    method public int component1();
+    method public androidx.compose.ui.text.input.MoveCursorEditOp copy(int amount);
+    method public int getAmount();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface OffsetMap {
+    method public int originalToTransformed(int offset);
+    method public int transformedToOriginal(int offset);
+    field public static final androidx.compose.ui.text.input.OffsetMap.Companion Companion;
+  }
+
+  public static final class OffsetMap.Companion {
+    method public androidx.compose.ui.text.input.OffsetMap getIdentityOffsetMap();
+    property public final androidx.compose.ui.text.input.OffsetMap identityOffsetMap;
+  }
+
+  public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
+    ctor public PasswordVisualTransformation(char mask);
+    ctor public PasswordVisualTransformation();
+    method public char component1();
+    method public androidx.compose.ui.text.input.PasswordVisualTransformation copy(char mask);
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    method public char getMask();
+  }
+
+  public interface PlatformTextInputService {
+    method public void hideSoftwareKeyboard();
+    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard();
+    method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput();
+  }
+
+  public final class SetComposingRegionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingRegionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingRegionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetSelectionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetSelectionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetSelectionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  @androidx.compose.Immutable public final class TextFieldValue {
+    ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor public TextFieldValue();
+    method public String component1();
+    method public androidx.compose.ui.text.TextRange component2();
+    method public androidx.compose.ui.text.TextRange? component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method public androidx.compose.ui.text.TextRange? getComposition();
+    method public androidx.compose.ui.text.TextRange getSelection();
+    method public String getText();
+    field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+  }
+
+  public static final class TextFieldValue.Companion {
+    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+  }
+
+  public final class TextFieldValueKt {
+    method public static String getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+    method public static String getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+    method public static String getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+  }
+
+  public class TextInputService {
+    ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+    method public void hideSoftwareKeyboard(int token);
+    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(int token, androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard(int token);
+    method public int startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput(int token);
+  }
+
+  public final class TextInputServiceKt {
+    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.compose.ui.text.input.PlatformTextInputService,androidx.compose.ui.text.input.TextInputService> getTextInputServiceFactory();
+    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.PlatformTextInputService,? extends androidx.compose.ui.text.input.TextInputService> p);
+    field public static final int INVALID_SESSION = -1; // 0xffffffff
+    field public static final int NO_SESSION = 0; // 0x0
+  }
+
+  public final class TransformedText {
+    ctor public TransformedText(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.AnnotatedString component1();
+    method public androidx.compose.ui.text.input.OffsetMap component2();
+    method public androidx.compose.ui.text.input.TransformedText copy(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.input.OffsetMap getOffsetMap();
+    method public androidx.compose.ui.text.AnnotatedString getTransformedText();
+  }
+
+  @androidx.compose.Immutable public interface VisualTransformation {
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+  }
+
+  public static final class VisualTransformation.Companion {
+    method public androidx.compose.ui.text.input.VisualTransformation getNone();
+    property public final androidx.compose.ui.text.input.VisualTransformation None;
+  }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+  public final class AndroidPlatformLocaleKt {
+  }
+
+  @androidx.compose.Immutable public final class Locale {
+    ctor public Locale(String languageTag);
+    method public String getLanguage();
+    method public String getRegion();
+    method public String getScript();
+    method public String toLanguageTag();
+    property public final String language;
+    property public final String region;
+    property public final String script;
+    field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+  }
+
+  public static final class Locale.Companion {
+    method public androidx.compose.ui.text.intl.Locale getCurrent();
+    property public final androidx.compose.ui.text.intl.Locale current;
+  }
+
+  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+    ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    ctor public LocaleList(String languageTags);
+    ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
+    method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method public operator androidx.compose.ui.text.intl.Locale get(int i);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+    method public int getSize();
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+    property public int size;
+    field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+  }
+
+  public static final class LocaleList.Companion {
+    method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+    property public final androidx.compose.ui.text.intl.LocaleList current;
+  }
+
+  public final class PlatformLocaleKt {
+  }
+
+}
+
+package androidx.compose.ui.text.platform {
 
   public final class AndroidParagraphHelperKt {
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.ui.text.TextStyle,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.ui.text.font.Font.ResourceLoader,androidx.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.ui.text.TextStyle,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.ui.text.font.Font.ResourceLoader,? extends androidx.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
-    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.ui.text.ParagraphConstraints,androidx.ui.text.Paragraph> getParagraphActualFactory();
-    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.ui.text.ParagraphConstraints,? extends androidx.ui.text.Paragraph> p);
+    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.compose.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.compose.ui.text.ParagraphConstraints,androidx.compose.ui.text.Paragraph> getParagraphActualFactory();
+    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.compose.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.compose.ui.text.ParagraphConstraints,? extends androidx.compose.ui.text.Paragraph> p);
   }
 
   public final class AndroidStringDelegateKt {
   }
 
   public final class TypefaceAdapterKt {
-    method public static androidx.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.ui.text.font.FontWeight,? extends androidx.ui.text.font.FontStyle>>? necessaryStyles = null);
+    method public static androidx.compose.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.compose.ui.text.font.FontWeight,? extends androidx.compose.ui.text.font.FontStyle>>? necessaryStyles = null);
   }
 
 }
 
-package androidx.ui.text.platform.extensions {
+package androidx.compose.ui.text.platform.extensions {
 
   public final class LocaleExtensionsKt {
   }
@@ -938,7 +945,7 @@
 
 }
 
-package androidx.ui.text.style {
+package androidx.compose.ui.text.style {
 
   @androidx.compose.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
@@ -948,7 +955,7 @@
     method public float getMultiplier();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
     method @androidx.compose.Immutable public static inline String! toString-impl(float p);
-    field public static final androidx.ui.text.style.BaselineShift.Companion Companion;
+    field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
   public static final class BaselineShift.Companion {
@@ -961,54 +968,54 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-7csQwvo(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
-    method public static androidx.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.ResolvedTextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Rtl;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
   }
 
   public enum TextAlign {
-    method public static androidx.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextAlign[] values();
-    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;
+    method public static androidx.compose.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Center;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign End;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Justify;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Left;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Right;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
   @androidx.compose.Immutable public final class TextDecoration {
     method public int component1();
-    method public operator boolean contains(androidx.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextDecoration copy(int mask);
+    method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
-    method public operator androidx.ui.text.style.TextDecoration plus(androidx.ui.text.style.TextDecoration decoration);
-    field public static final androidx.ui.text.style.TextDecoration.Companion Companion;
+    method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+    field public static final androidx.compose.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;
+    method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+    method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+    method public androidx.compose.ui.text.style.TextDecoration getNone();
+    method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+    property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+    property public final androidx.compose.ui.text.style.TextDecoration None;
+    property public final androidx.compose.ui.text.style.TextDecoration Underline;
   }
 
   public enum TextDirection {
-    method public static androidx.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.TextDirection Content;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrLtr;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrRtl;
-    enum_constant public static final androidx.ui.text.style.TextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.TextDirection Rtl;
+    method public static androidx.compose.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Content;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrLtr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrRtl;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
   @androidx.compose.Immutable public final class TextGeometricTransform {
@@ -1016,42 +1023,42 @@
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.Immutable public androidx.compose.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;
+    field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
   }
 
   public static final class TextGeometricTransform.Companion {
   }
 
   public final class TextGeometricTransformKt {
-    method public static androidx.ui.text.style.TextGeometricTransform lerp(androidx.ui.text.style.TextGeometricTransform start, androidx.ui.text.style.TextGeometricTransform stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion Companion;
+    field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
   }
 
   public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNone();
-    property public final androidx.ui.text.style.TextIndent None;
+    method public androidx.compose.ui.text.style.TextIndent getNone();
+    property public final androidx.compose.ui.text.style.TextIndent None;
   }
 
   public final class TextIndentKt {
-    method public static androidx.ui.text.style.TextIndent lerp(androidx.ui.text.style.TextIndent start, androidx.ui.text.style.TextIndent stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
   }
 
   public enum TextOverflow {
-    method public static androidx.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextOverflow[] values();
-    enum_constant public static final androidx.ui.text.style.TextOverflow Clip;
-    enum_constant public static final androidx.ui.text.style.TextOverflow Ellipsis;
+    method public static androidx.compose.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextOverflow[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Clip;
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Ellipsis;
   }
 
 }
diff --git a/ui/ui-text-core/api/public_plus_experimental_current.txt b/ui/ui-text-core/api/public_plus_experimental_current.txt
index 9230b27..f59f204 100644
--- a/ui/ui-text-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-text-core/api/public_plus_experimental_current.txt
@@ -1,321 +1,38 @@
 // Signature format: 3.0
-package androidx.ui.input {
-
-  public final class BackspaceKeyEditOp implements androidx.ui.input.EditOperation {
-    ctor public BackspaceKeyEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class CommitTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public CommitTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.CommitTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteAllEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteAllEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface EditOperation {
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class EditingBuffer {
-    ctor public EditingBuffer(String initialText, androidx.ui.text.TextRange initialSelection);
-    field public static final int NOWHERE = -1; // 0xffffffff
-  }
-
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
-    ctor @Deprecated public EditorValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor @Deprecated public EditorValue();
-    method @Deprecated public String component1();
-    method @Deprecated public androidx.ui.text.TextRange component2();
-    method @Deprecated public androidx.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.ui.input.EditorValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method @Deprecated public androidx.ui.text.TextRange? getComposition();
-    method @Deprecated public String getSelectedText();
-    method @Deprecated public androidx.ui.text.TextRange getSelection();
-    method @Deprecated public String getText();
-    method @Deprecated public String getTextAfterSelection(int maxChars);
-    method @Deprecated public String getTextBeforeSelection(int maxChars);
-  }
-
-  public final class FinishComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public FinishComposingTextEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class GapBufferKt {
-  }
-
-  public enum ImeAction {
-    method public static androidx.ui.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.ImeAction[] values();
-    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 interface InputEventListener {
-    method public void onEditOperations(java.util.List<? extends androidx.ui.input.EditOperation> editOps);
-    method public void onImeAction(androidx.ui.input.ImeAction imeAction);
-  }
-
-  public enum KeyboardType {
-    method public static androidx.ui.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.KeyboardType[] values();
-    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 final class MoveCursorEditOp implements androidx.ui.input.EditOperation {
-    ctor public MoveCursorEditOp(int amount);
-    method public int component1();
-    method public androidx.ui.input.MoveCursorEditOp copy(int amount);
-    method public int getAmount();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface OffsetMap {
-    method public int originalToTransformed(int offset);
-    method public int transformedToOriginal(int offset);
-    field public static final androidx.ui.input.OffsetMap.Companion Companion;
-  }
-
-  public static final class OffsetMap.Companion {
-    method public androidx.ui.input.OffsetMap getIdentityOffsetMap();
-    property public final androidx.ui.input.OffsetMap identityOffsetMap;
-  }
-
-  public final class PasswordVisualTransformation implements androidx.ui.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
-    method public char component1();
-    method public androidx.ui.input.PasswordVisualTransformation copy(char mask);
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    method public char getMask();
-  }
-
-  public interface PlatformTextInputService {
-    method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard();
-    method public void startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput();
-  }
-
-  public final class SetComposingRegionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingRegionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingRegionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetSelectionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetSelectionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetSelectionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  @androidx.compose.Immutable public final class TextFieldValue {
-    ctor public TextFieldValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor public TextFieldValue();
-    method public String component1();
-    method public androidx.ui.text.TextRange component2();
-    method public androidx.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.ui.input.TextFieldValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method public androidx.ui.text.TextRange? getComposition();
-    method public androidx.ui.text.TextRange getSelection();
-    method public String getText();
-    field public static final androidx.ui.input.TextFieldValue.Companion Companion;
-  }
-
-  public static final class TextFieldValue.Companion {
-    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> getSaver();
-    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> Saver;
-  }
-
-  public final class TextFieldValueKt {
-    method public static String getSelectedText(androidx.ui.input.TextFieldValue);
-    method public static String getTextAfterSelection(androidx.ui.input.TextFieldValue, int maxChars);
-    method public static String getTextBeforeSelection(androidx.ui.input.TextFieldValue, int maxChars);
-  }
-
-  public class TextInputService {
-    ctor public TextInputService(androidx.ui.input.PlatformTextInputService platformTextInputService);
-    method public void hideSoftwareKeyboard(int token);
-    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(int token, androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard(int token);
-    method public int startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput(int token);
-  }
-
-  public final class TextInputServiceKt {
-    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.ui.input.PlatformTextInputService,androidx.ui.input.TextInputService> getTextInputServiceFactory();
-    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.ui.input.PlatformTextInputService,? extends androidx.ui.input.TextInputService> p);
-    field public static final int INVALID_SESSION = -1; // 0xffffffff
-    field public static final int NO_SESSION = 0; // 0x0
-  }
-
-  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();
-  }
-
-  @androidx.compose.Immutable public interface VisualTransformation {
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    field public static final androidx.ui.input.VisualTransformation.Companion Companion;
-  }
-
-  public static final class VisualTransformation.Companion {
-    method public androidx.ui.input.VisualTransformation getNone();
-    property public final androidx.ui.input.VisualTransformation None;
-  }
-
-}
-
-package androidx.ui.intl {
-
-  public final class AndroidPlatformLocaleKt {
-  }
-
-  @androidx.compose.Immutable public final class Locale {
-    ctor public Locale(String languageTag);
-    method public String getLanguage();
-    method public String getRegion();
-    method public String getScript();
-    method public String toLanguageTag();
-    property public final String language;
-    property public final String region;
-    property public final String script;
-    field public static final androidx.ui.intl.Locale.Companion Companion;
-  }
-
-  public static final class Locale.Companion {
-    method public androidx.ui.intl.Locale getCurrent();
-    property public final androidx.ui.intl.Locale current;
-  }
-
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.ui.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public LocaleList(java.util.List<androidx.ui.intl.Locale> localeList);
-    ctor public LocaleList(String languageTags);
-    ctor public LocaleList(androidx.ui.intl.Locale... locales);
-    method public java.util.List<androidx.ui.intl.Locale> component1();
-    method public operator boolean contains(androidx.ui.intl.Locale element);
-    method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.intl.LocaleList copy(java.util.List<androidx.ui.intl.Locale> localeList);
-    method public operator androidx.ui.intl.Locale get(int i);
-    method public java.util.List<androidx.ui.intl.Locale> getLocaleList();
-    method public int getSize();
-    method public boolean isEmpty();
-    method public java.util.Iterator<androidx.ui.intl.Locale> iterator();
-    property public int size;
-    field public static final androidx.ui.intl.LocaleList.Companion Companion;
-  }
-
-  public static final class LocaleList.Companion {
-    method public androidx.ui.intl.LocaleList getCurrent();
-    property public final androidx.ui.intl.LocaleList current;
-  }
-
-  public final class PlatformLocaleKt {
-  }
-
-}
-
-package androidx.ui.text {
+package androidx.compose.ui.text {
 
   @androidx.compose.Immutable public final class AnnotatedString {
-    ctor public AnnotatedString(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.ui.text.AnnotatedString copy(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> getParagraphStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> getSpanStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.ui.text.AnnotatedString plus(androidx.ui.text.AnnotatedString other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
     ctor public AnnotatedString.Builder(int capacity);
     ctor public AnnotatedString.Builder();
     ctor public AnnotatedString.Builder(String text);
-    ctor public AnnotatedString.Builder(androidx.ui.text.AnnotatedString text);
+    ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String scope, String annotation, int start, int end);
-    method public void addStyle(androidx.ui.text.SpanStyle style, int start, int end);
-    method public void addStyle(androidx.ui.text.ParagraphStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
     method public void append(String text);
     method public void append(char p);
-    method public void append(androidx.ui.text.AnnotatedString text);
+    method public void append(androidx.compose.ui.text.AnnotatedString text);
     method public int getLength();
     method public void pop();
     method public void pop(int index);
     method public int pushStringAnnotation(String tag, String annotation);
-    method public int pushStyle(androidx.ui.text.SpanStyle style);
-    method public int pushStyle(androidx.ui.text.ParagraphStyle style);
-    method public androidx.ui.text.AnnotatedString toAnnotatedString();
+    method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+    method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+    method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
     property public final int length;
   }
 
@@ -326,7 +43,7 @@
     method public int component2();
     method public int component3();
     method public String component4();
-    method public androidx.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -334,18 +51,18 @@
   }
 
   public final class AnnotatedStringKt {
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.SpanStyle spanStyle, androidx.ui.text.ParagraphStyle? paragraphStyle = null);
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.ParagraphStyle paragraphStyle);
-    method @Deprecated public static inline androidx.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static inline androidx.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static androidx.ui.text.AnnotatedString capitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString decapitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static int getLength(androidx.ui.text.AnnotatedString);
-    method public static androidx.ui.text.AnnotatedString subSequence(androidx.ui.text.AnnotatedString, int start, int end);
-    method public static androidx.ui.text.AnnotatedString toLowerCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString toUpperCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, androidx.compose.ui.text.ParagraphStyle? paragraphStyle = null);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+    method @Deprecated public static inline androidx.compose.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static inline androidx.compose.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static int getLength(androidx.compose.ui.text.AnnotatedString);
+    method public static androidx.compose.ui.text.AnnotatedString subSequence(androidx.compose.ui.text.AnnotatedString, int start, int end);
+    method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalTextApi {
@@ -355,16 +72,16 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
-    method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+    method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
     method public float getLastBaseline();
     method public float getLineBottom(int lineIndex);
     method public int getLineCount();
@@ -372,6 +89,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -382,11 +100,11 @@
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public final boolean didExceedMaxLines;
     property public final float firstBaseline;
@@ -399,12 +117,12 @@
     property public final float width;
   }
 
-  public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.AnnotatedString getAnnotatedString();
+  public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
     property public float maxIntrinsicWidth;
     property public float minIntrinsicWidth;
   }
@@ -416,7 +134,7 @@
   }
 
   public interface Paragraph {
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
@@ -430,6 +148,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -439,11 +158,11 @@
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
@@ -459,7 +178,7 @@
   public final class ParagraphConstraints {
     ctor public ParagraphConstraints(float width);
     method public float component1();
-    method public androidx.ui.text.ParagraphConstraints copy(float width);
+    method public androidx.compose.ui.text.ParagraphConstraints copy(float width);
     method public float getWidth();
   }
 
@@ -471,56 +190,56 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
   @androidx.compose.Immutable public final class ParagraphStyle {
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
+    method public androidx.compose.ui.text.style.TextAlign? component1();
+    method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
-    method public androidx.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.ui.text.ParagraphStyle copy-JVmhFNw(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.TextIndent? component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle merge(androidx.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.ParagraphStyle plus(androidx.ui.text.ParagraphStyle other);
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.ui.text.ParagraphStyle lerp(androidx.ui.text.ParagraphStyle start, androidx.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Placeholder {
     method public long component1();
     method public long component2();
-    method public androidx.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.ui.text.Placeholder copy-eLqjHCw(long width, long height, androidx.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
-    method public androidx.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
   }
 
   public enum PlaceholderVerticalAlign {
-    method public static androidx.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.PlaceholderVerticalAlign[] values();
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign AboveBaseline;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Bottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Center;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextBottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextCenter;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextTop;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Top;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign AboveBaseline;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Bottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Center;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextBottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextCenter;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextTop;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Top;
   }
 
   public final class SoftwareKeyboardController {
-    ctor public SoftwareKeyboardController(androidx.ui.input.TextInputService textInputService, int token);
+    ctor public SoftwareKeyboardController(androidx.compose.ui.text.input.TextInputService textInputService, int token);
     method public void hideSoftwareKeyboard();
     method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
@@ -528,86 +247,86 @@
 
   @androidx.compose.Immutable public final class SpanStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.SpanStyle copy-HjQ0eR4(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-3JaCuMk(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle merge(androidx.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.SpanStyle plus(androidx.ui.text.SpanStyle other);
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
-    method public static androidx.ui.text.SpanStyle lerp(androidx.ui.text.SpanStyle start, androidx.ui.text.SpanStyle stop, float fraction);
+    method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
   }
 
   public final class StringKt {
-    method public static String capitalize(String, androidx.ui.intl.Locale locale);
-    method public static String capitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String decapitalize(String, androidx.ui.intl.Locale locale);
-    method public static String decapitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toLowerCase(String, androidx.ui.intl.Locale locale);
-    method public static String toLowerCase(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toUpperCase(String, androidx.ui.intl.Locale locale);
-    method public static String toUpperCase(String, androidx.ui.intl.LocaleList localeList);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
   }
 
   public final class TextLayoutHelperKt {
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.text.AnnotatedString component1();
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.AnnotatedString component1();
     method public androidx.ui.core.Constraints component10();
-    method public androidx.ui.text.TextStyle component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> component3();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
-    method public androidx.ui.text.style.TextOverflow component6();
+    method public androidx.compose.ui.text.style.TextOverflow component6();
     method public androidx.ui.unit.Density component7();
     method public androidx.ui.core.LayoutDirection component8();
-    method public androidx.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.ui.text.TextLayoutInput copy(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.unit.Density getDensity();
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
-    method public androidx.ui.text.style.TextOverflow getOverflow();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
-    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
+    method public androidx.compose.ui.text.style.TextOverflow getOverflow();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public boolean getSoftWrap();
-    method public androidx.ui.text.TextStyle getStyle();
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.TextStyle getStyle();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   public final class TextLayoutResult {
-    method public androidx.ui.text.TextLayoutInput component1();
+    method public androidx.compose.ui.text.TextLayoutInput component1();
     method public androidx.ui.unit.IntSize component3();
-    method public androidx.ui.text.TextLayoutResult copy(androidx.ui.text.TextLayoutInput layoutInput, androidx.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
@@ -616,38 +335,43 @@
     method public boolean getHasVisualOverflow();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
     method public float getLastBaseline();
-    method public androidx.ui.text.TextLayoutInput getLayoutInput();
+    method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
     method public float getLineBottom(int lineIndex);
+    method public int getLineCount();
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
+    method public float getLineLeft(int lineIndex);
+    method public float getLineRight(int lineIndex);
     method public int getLineStart(int lineIndex);
     method public float getLineTop(int lineIndex);
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
     property public final float firstBaseline;
     property public final boolean hasVisualOverflow;
     property public final float lastBaseline;
+    property public final int lineCount;
     property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
-    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.ui.text.TextLayoutResult textLayoutResult);
-    field public static final androidx.ui.text.TextPainter INSTANCE;
+    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+    field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
   @androidx.compose.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
-    method public operator boolean contains(androidx.ui.text.TextRange other);
+    method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -655,274 +379,557 @@
     method public int getMin();
     method public boolean getReversed();
     method public int getStart();
-    method public boolean intersects(androidx.ui.text.TextRange other);
+    method public boolean intersects(androidx.compose.ui.text.TextRange other);
     property public final boolean collapsed;
     property public final int length;
     property public final int max;
     property public final int min;
     property public final boolean reversed;
-    field public static final androidx.ui.text.TextRange.Companion Companion;
+    field public static final androidx.compose.ui.text.TextRange.Companion Companion;
   }
 
   public static final class TextRange.Companion {
-    method public androidx.ui.text.TextRange getZero();
-    property public final androidx.ui.text.TextRange Zero;
+    method public androidx.compose.ui.text.TextRange getZero();
+    property public final androidx.compose.ui.text.TextRange Zero;
   }
 
   public final class TextRangeKt {
-    method public static androidx.ui.text.TextRange TextRange(int index);
-    method public static String substring(CharSequence, androidx.ui.text.TextRange range);
+    method public static androidx.compose.ui.text.TextRange TextRange(int index);
+    method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
   @androidx.compose.Immutable public final class TextStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
-    method public androidx.ui.text.style.TextAlign? component15();
-    method public androidx.ui.text.style.TextDirection? component16();
+    method public androidx.compose.ui.text.style.TextAlign? component15();
+    method public androidx.compose.ui.text.style.TextDirection? component16();
     method public long component17();
-    method public androidx.ui.text.style.TextIndent? component18();
+    method public androidx.compose.ui.text.style.TextIndent? component18();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.TextStyle copy-7aJ7aFo(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-7Y_OIKU(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
     method public long getLineHeight();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle toSpanStyle();
-    field public static final androidx.ui.text.TextStyle.Companion Companion;
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
   public static final class TextStyle.Companion {
-    method public androidx.ui.text.TextStyle getDefault();
-    property public final androidx.ui.text.TextStyle Default;
+    method public androidx.compose.ui.text.TextStyle getDefault();
+    property public final androidx.compose.ui.text.TextStyle Default;
   }
 
   public final class TextStyleKt {
-    method public static androidx.ui.text.TextStyle lerp(androidx.ui.text.TextStyle start, androidx.ui.text.TextStyle stop, float fraction);
-    method public static androidx.ui.text.TextStyle resolveDefaults(androidx.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
   }
 
   public interface Typeface {
-    method public androidx.ui.text.font.FontFamily getFontFamily();
-    property public abstract androidx.ui.text.font.FontFamily fontFamily;
+    method public androidx.compose.ui.text.font.FontFamily getFontFamily();
+    property public abstract androidx.compose.ui.text.font.FontFamily fontFamily;
   }
 
 }
 
-package androidx.ui.text.font {
+package androidx.compose.ui.text.font {
 
-  public abstract sealed class FileBasedFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
   @androidx.compose.Immutable public interface Font {
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
-    property public abstract androidx.ui.text.font.FontStyle style;
-    property public abstract androidx.ui.text.font.FontWeight weight;
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
+    property public abstract androidx.compose.ui.text.font.FontStyle style;
+    property public abstract androidx.compose.ui.text.font.FontWeight weight;
   }
 
   public static interface Font.ResourceLoader {
-    method public Object load(androidx.ui.text.font.Font font);
+    method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
   @androidx.compose.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
-    field public static final androidx.ui.text.font.FontFamily.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
 
   public static final class FontFamily.Companion {
-    method public androidx.ui.text.font.GenericFontFamily getCursive();
-    method public androidx.ui.text.font.SystemFontFamily getDefault();
-    method public androidx.ui.text.font.GenericFontFamily getMonospace();
-    method public androidx.ui.text.font.GenericFontFamily getSansSerif();
-    method public androidx.ui.text.font.GenericFontFamily getSerif();
-    property public final androidx.ui.text.font.GenericFontFamily Cursive;
-    property public final androidx.ui.text.font.SystemFontFamily Default;
-    property public final androidx.ui.text.font.GenericFontFamily Monospace;
-    property public final androidx.ui.text.font.GenericFontFamily SansSerif;
-    property public final androidx.ui.text.font.GenericFontFamily Serif;
+    method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+    method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+    method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+    property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+    property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+    property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(androidx.ui.text.font.Font... fonts);
-    method public static androidx.ui.text.font.LoadedFontFamily fontFamily(androidx.ui.text.Typeface typeface);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily asFontFamily(androidx.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.ui.text.font.Font font(int resId, androidx.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.ui.text.font.FontStyle style = androidx.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
-    ctor public FontListFontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method public java.util.List<androidx.ui.text.font.Font> component1();
-    method public boolean contains(androidx.ui.text.font.Font element);
+  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+    ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public java.util.List<androidx.compose.ui.text.font.Font> component1();
+    method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontListFontFamily copy(java.util.List<? extends 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 @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public androidx.compose.ui.text.font.Font get(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
-    method public int indexOf(androidx.ui.text.font.Font element);
+    method public int indexOf(androidx.compose.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);
+    method public java.util.Iterator<androidx.compose.ui.text.font.Font> iterator();
+    method public int lastIndexOf(androidx.compose.ui.text.font.Font element);
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator();
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> subList(int fromIndex, int toIndex);
   }
 
   public enum FontStyle {
-    method public static androidx.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontStyle[] values();
-    enum_constant public static final androidx.ui.text.font.FontStyle Italic;
-    enum_constant public static final androidx.ui.text.font.FontStyle Normal;
+    method public static androidx.compose.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontStyle[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Italic;
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Normal;
   }
 
   public enum FontSynthesis {
-    method public static androidx.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontSynthesis[] values();
-    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;
+    method public static androidx.compose.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontSynthesis[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis All;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis None;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Style;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.ui.text.font.FontWeight> {
+  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
-    method public int compareTo(androidx.ui.text.font.FontWeight other);
+    method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
-    field public static final androidx.ui.text.font.FontWeight.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
 
   public static final class FontWeight.Companion {
-    method public androidx.ui.text.font.FontWeight getBlack();
-    method public androidx.ui.text.font.FontWeight getBold();
-    method public androidx.ui.text.font.FontWeight getExtraBold();
-    method public androidx.ui.text.font.FontWeight getExtraLight();
-    method public androidx.ui.text.font.FontWeight getLight();
-    method public androidx.ui.text.font.FontWeight getMedium();
-    method public androidx.ui.text.font.FontWeight getNormal();
-    method public androidx.ui.text.font.FontWeight getSemiBold();
-    method public androidx.ui.text.font.FontWeight getThin();
-    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();
-    property public final androidx.ui.text.font.FontWeight Black;
-    property public final androidx.ui.text.font.FontWeight Bold;
-    property public final androidx.ui.text.font.FontWeight ExtraBold;
-    property public final androidx.ui.text.font.FontWeight ExtraLight;
-    property public final androidx.ui.text.font.FontWeight Light;
-    property public final androidx.ui.text.font.FontWeight Medium;
-    property public final androidx.ui.text.font.FontWeight Normal;
-    property public final androidx.ui.text.font.FontWeight SemiBold;
-    property public final androidx.ui.text.font.FontWeight Thin;
-    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;
+    method public androidx.compose.ui.text.font.FontWeight getBlack();
+    method public androidx.compose.ui.text.font.FontWeight getBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+    method public androidx.compose.ui.text.font.FontWeight getLight();
+    method public androidx.compose.ui.text.font.FontWeight getMedium();
+    method public androidx.compose.ui.text.font.FontWeight getNormal();
+    method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+    method public androidx.compose.ui.text.font.FontWeight getThin();
+    method public androidx.compose.ui.text.font.FontWeight getW100();
+    method public androidx.compose.ui.text.font.FontWeight getW200();
+    method public androidx.compose.ui.text.font.FontWeight getW300();
+    method public androidx.compose.ui.text.font.FontWeight getW400();
+    method public androidx.compose.ui.text.font.FontWeight getW500();
+    method public androidx.compose.ui.text.font.FontWeight getW600();
+    method public androidx.compose.ui.text.font.FontWeight getW700();
+    method public androidx.compose.ui.text.font.FontWeight getW800();
+    method public androidx.compose.ui.text.font.FontWeight getW900();
+    property public final androidx.compose.ui.text.font.FontWeight Black;
+    property public final androidx.compose.ui.text.font.FontWeight Bold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+    property public final androidx.compose.ui.text.font.FontWeight Light;
+    property public final androidx.compose.ui.text.font.FontWeight Medium;
+    property public final androidx.compose.ui.text.font.FontWeight Normal;
+    property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+    property public final androidx.compose.ui.text.font.FontWeight Thin;
+    property public final androidx.compose.ui.text.font.FontWeight W100;
+    property public final androidx.compose.ui.text.font.FontWeight W200;
+    property public final androidx.compose.ui.text.font.FontWeight W300;
+    property public final androidx.compose.ui.text.font.FontWeight W400;
+    property public final androidx.compose.ui.text.font.FontWeight W500;
+    property public final androidx.compose.ui.text.font.FontWeight W600;
+    property public final androidx.compose.ui.text.font.FontWeight W700;
+    property public final androidx.compose.ui.text.font.FontWeight W800;
+    property public final androidx.compose.ui.text.font.FontWeight W900;
   }
 
   public final class FontWeightKt {
-    method public static androidx.ui.text.font.FontWeight lerp(androidx.ui.text.font.FontWeight start, androidx.ui.text.font.FontWeight stop, float fraction);
+    method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.ui.text.font.SystemFontFamily {
+  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
-  public final class LoadedFontFamily extends androidx.ui.text.font.FontFamily {
-    ctor public LoadedFontFamily(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface component1();
-    method public androidx.ui.text.font.LoadedFontFamily copy(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface getTypeface();
+  public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+    ctor public LoadedFontFamily(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface component1();
+    method public androidx.compose.ui.text.font.LoadedFontFamily copy(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface getTypeface();
   }
 
-  public final class ResourceFont implements androidx.ui.text.font.Font {
-    ctor public ResourceFont(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+  public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+    ctor public ResourceFont(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int component1();
-    method public androidx.ui.text.font.FontWeight component2();
-    method public androidx.ui.text.font.FontStyle component3();
-    method public androidx.ui.text.font.ResourceFont copy(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+    method public androidx.compose.ui.text.font.FontWeight component2();
+    method public androidx.compose.ui.text.font.FontStyle component3();
+    method public androidx.compose.ui.text.font.ResourceFont copy(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int getResId();
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
   }
 
-  public abstract sealed class SystemFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
 }
 
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.input {
+
+  public final class BackspaceKeyEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public BackspaceKeyEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class CommitTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public CommitTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.CommitTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteAllEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteAllEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface EditOperation {
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class EditingBuffer {
+    ctor public EditingBuffer(String initialText, androidx.compose.ui.text.TextRange initialSelection);
+    field public static final int NOWHERE = -1; // 0xffffffff
+  }
+
+  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+    ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor @Deprecated public EditorValue();
+    method @Deprecated public String component1();
+    method @Deprecated public androidx.compose.ui.text.TextRange component2();
+    method @Deprecated public androidx.compose.ui.text.TextRange? component3();
+    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
+    method @Deprecated public String getSelectedText();
+    method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
+    method @Deprecated public String getText();
+    method @Deprecated public String getTextAfterSelection(int maxChars);
+    method @Deprecated public String getTextBeforeSelection(int maxChars);
+  }
+
+  public final class FinishComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public FinishComposingTextEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class GapBufferKt {
+  }
+
+  public enum ImeAction {
+    method public static androidx.compose.ui.text.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.ImeAction[] values();
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Done;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Go;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Next;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction NoAction;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Previous;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Search;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Send;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Unspecified;
+  }
+
+  public interface InputEventListener {
+    method public void onEditOperations(java.util.List<? extends androidx.compose.ui.text.input.EditOperation> editOps);
+    method public void onImeAction(androidx.compose.ui.text.input.ImeAction imeAction);
+  }
+
+  public enum KeyboardType {
+    method public static androidx.compose.ui.text.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.KeyboardType[] values();
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Ascii;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Email;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Number;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType NumberPassword;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Password;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Phone;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Text;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Uri;
+  }
+
+  public final class MoveCursorEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public MoveCursorEditOp(int amount);
+    method public int component1();
+    method public androidx.compose.ui.text.input.MoveCursorEditOp copy(int amount);
+    method public int getAmount();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface OffsetMap {
+    method public int originalToTransformed(int offset);
+    method public int transformedToOriginal(int offset);
+    field public static final androidx.compose.ui.text.input.OffsetMap.Companion Companion;
+  }
+
+  public static final class OffsetMap.Companion {
+    method public androidx.compose.ui.text.input.OffsetMap getIdentityOffsetMap();
+    property public final androidx.compose.ui.text.input.OffsetMap identityOffsetMap;
+  }
+
+  public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
+    ctor public PasswordVisualTransformation(char mask);
+    ctor public PasswordVisualTransformation();
+    method public char component1();
+    method public androidx.compose.ui.text.input.PasswordVisualTransformation copy(char mask);
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    method public char getMask();
+  }
+
+  public interface PlatformTextInputService {
+    method public void hideSoftwareKeyboard();
+    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard();
+    method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput();
+  }
+
+  public final class SetComposingRegionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingRegionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingRegionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetSelectionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetSelectionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetSelectionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  @androidx.compose.Immutable public final class TextFieldValue {
+    ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor public TextFieldValue();
+    method public String component1();
+    method public androidx.compose.ui.text.TextRange component2();
+    method public androidx.compose.ui.text.TextRange? component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method public androidx.compose.ui.text.TextRange? getComposition();
+    method public androidx.compose.ui.text.TextRange getSelection();
+    method public String getText();
+    field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+  }
+
+  public static final class TextFieldValue.Companion {
+    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+  }
+
+  public final class TextFieldValueKt {
+    method public static String getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+    method public static String getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+    method public static String getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+  }
+
+  public class TextInputService {
+    ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+    method public void hideSoftwareKeyboard(int token);
+    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(int token, androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard(int token);
+    method public int startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput(int token);
+  }
+
+  public final class TextInputServiceKt {
+    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.compose.ui.text.input.PlatformTextInputService,androidx.compose.ui.text.input.TextInputService> getTextInputServiceFactory();
+    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.PlatformTextInputService,? extends androidx.compose.ui.text.input.TextInputService> p);
+    field public static final int INVALID_SESSION = -1; // 0xffffffff
+    field public static final int NO_SESSION = 0; // 0x0
+  }
+
+  public final class TransformedText {
+    ctor public TransformedText(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.AnnotatedString component1();
+    method public androidx.compose.ui.text.input.OffsetMap component2();
+    method public androidx.compose.ui.text.input.TransformedText copy(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.input.OffsetMap getOffsetMap();
+    method public androidx.compose.ui.text.AnnotatedString getTransformedText();
+  }
+
+  @androidx.compose.Immutable public interface VisualTransformation {
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+  }
+
+  public static final class VisualTransformation.Companion {
+    method public androidx.compose.ui.text.input.VisualTransformation getNone();
+    property public final androidx.compose.ui.text.input.VisualTransformation None;
+  }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+  public final class AndroidPlatformLocaleKt {
+  }
+
+  @androidx.compose.Immutable public final class Locale {
+    ctor public Locale(String languageTag);
+    method public String getLanguage();
+    method public String getRegion();
+    method public String getScript();
+    method public String toLanguageTag();
+    property public final String language;
+    property public final String region;
+    property public final String script;
+    field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+  }
+
+  public static final class Locale.Companion {
+    method public androidx.compose.ui.text.intl.Locale getCurrent();
+    property public final androidx.compose.ui.text.intl.Locale current;
+  }
+
+  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+    ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    ctor public LocaleList(String languageTags);
+    ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
+    method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method public operator androidx.compose.ui.text.intl.Locale get(int i);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+    method public int getSize();
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+    property public int size;
+    field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+  }
+
+  public static final class LocaleList.Companion {
+    method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+    property public final androidx.compose.ui.text.intl.LocaleList current;
+  }
+
+  public final class PlatformLocaleKt {
+  }
+
+}
+
+package androidx.compose.ui.text.platform {
 
   public final class AndroidParagraphHelperKt {
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.ui.text.TextStyle,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.ui.text.font.Font.ResourceLoader,androidx.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.ui.text.TextStyle,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.ui.text.font.Font.ResourceLoader,? extends androidx.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
-    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.ui.text.ParagraphConstraints,androidx.ui.text.Paragraph> getParagraphActualFactory();
-    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.ui.text.ParagraphConstraints,? extends androidx.ui.text.Paragraph> p);
+    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.compose.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.compose.ui.text.ParagraphConstraints,androidx.compose.ui.text.Paragraph> getParagraphActualFactory();
+    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.compose.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.compose.ui.text.ParagraphConstraints,? extends androidx.compose.ui.text.Paragraph> p);
   }
 
   public final class AndroidStringDelegateKt {
   }
 
   public final class TypefaceAdapterKt {
-    method public static androidx.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.ui.text.font.FontWeight,? extends androidx.ui.text.font.FontStyle>>? necessaryStyles = null);
+    method public static androidx.compose.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.compose.ui.text.font.FontWeight,? extends androidx.compose.ui.text.font.FontStyle>>? necessaryStyles = null);
   }
 
 }
 
-package androidx.ui.text.platform.extensions {
+package androidx.compose.ui.text.platform.extensions {
 
   public final class LocaleExtensionsKt {
   }
@@ -938,7 +945,7 @@
 
 }
 
-package androidx.ui.text.style {
+package androidx.compose.ui.text.style {
 
   @androidx.compose.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
@@ -948,7 +955,7 @@
     method public float getMultiplier();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
     method @androidx.compose.Immutable public static inline String! toString-impl(float p);
-    field public static final androidx.ui.text.style.BaselineShift.Companion Companion;
+    field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
   public static final class BaselineShift.Companion {
@@ -961,54 +968,54 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-7csQwvo(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
-    method public static androidx.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.ResolvedTextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Rtl;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
   }
 
   public enum TextAlign {
-    method public static androidx.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextAlign[] values();
-    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;
+    method public static androidx.compose.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Center;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign End;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Justify;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Left;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Right;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
   @androidx.compose.Immutable public final class TextDecoration {
     method public int component1();
-    method public operator boolean contains(androidx.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextDecoration copy(int mask);
+    method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
-    method public operator androidx.ui.text.style.TextDecoration plus(androidx.ui.text.style.TextDecoration decoration);
-    field public static final androidx.ui.text.style.TextDecoration.Companion Companion;
+    method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+    field public static final androidx.compose.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;
+    method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+    method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+    method public androidx.compose.ui.text.style.TextDecoration getNone();
+    method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+    property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+    property public final androidx.compose.ui.text.style.TextDecoration None;
+    property public final androidx.compose.ui.text.style.TextDecoration Underline;
   }
 
   public enum TextDirection {
-    method public static androidx.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.TextDirection Content;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrLtr;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrRtl;
-    enum_constant public static final androidx.ui.text.style.TextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.TextDirection Rtl;
+    method public static androidx.compose.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Content;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrLtr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrRtl;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
   @androidx.compose.Immutable public final class TextGeometricTransform {
@@ -1016,42 +1023,42 @@
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.Immutable public androidx.compose.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;
+    field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
   }
 
   public static final class TextGeometricTransform.Companion {
   }
 
   public final class TextGeometricTransformKt {
-    method public static androidx.ui.text.style.TextGeometricTransform lerp(androidx.ui.text.style.TextGeometricTransform start, androidx.ui.text.style.TextGeometricTransform stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion Companion;
+    field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
   }
 
   public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNone();
-    property public final androidx.ui.text.style.TextIndent None;
+    method public androidx.compose.ui.text.style.TextIndent getNone();
+    property public final androidx.compose.ui.text.style.TextIndent None;
   }
 
   public final class TextIndentKt {
-    method public static androidx.ui.text.style.TextIndent lerp(androidx.ui.text.style.TextIndent start, androidx.ui.text.style.TextIndent stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
   }
 
   public enum TextOverflow {
-    method public static androidx.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextOverflow[] values();
-    enum_constant public static final androidx.ui.text.style.TextOverflow Clip;
-    enum_constant public static final androidx.ui.text.style.TextOverflow Ellipsis;
+    method public static androidx.compose.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextOverflow[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Clip;
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Ellipsis;
   }
 
 }
diff --git a/ui/ui-text-core/api/restricted_0.1.0-dev16.txt b/ui/ui-text-core/api/restricted_0.1.0-dev16.txt
index 9230b27..f59f204 100644
--- a/ui/ui-text-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/restricted_0.1.0-dev16.txt
@@ -1,321 +1,38 @@
 // Signature format: 3.0
-package androidx.ui.input {
-
-  public final class BackspaceKeyEditOp implements androidx.ui.input.EditOperation {
-    ctor public BackspaceKeyEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class CommitTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public CommitTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.CommitTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteAllEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteAllEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface EditOperation {
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class EditingBuffer {
-    ctor public EditingBuffer(String initialText, androidx.ui.text.TextRange initialSelection);
-    field public static final int NOWHERE = -1; // 0xffffffff
-  }
-
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
-    ctor @Deprecated public EditorValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor @Deprecated public EditorValue();
-    method @Deprecated public String component1();
-    method @Deprecated public androidx.ui.text.TextRange component2();
-    method @Deprecated public androidx.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.ui.input.EditorValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method @Deprecated public androidx.ui.text.TextRange? getComposition();
-    method @Deprecated public String getSelectedText();
-    method @Deprecated public androidx.ui.text.TextRange getSelection();
-    method @Deprecated public String getText();
-    method @Deprecated public String getTextAfterSelection(int maxChars);
-    method @Deprecated public String getTextBeforeSelection(int maxChars);
-  }
-
-  public final class FinishComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public FinishComposingTextEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class GapBufferKt {
-  }
-
-  public enum ImeAction {
-    method public static androidx.ui.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.ImeAction[] values();
-    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 interface InputEventListener {
-    method public void onEditOperations(java.util.List<? extends androidx.ui.input.EditOperation> editOps);
-    method public void onImeAction(androidx.ui.input.ImeAction imeAction);
-  }
-
-  public enum KeyboardType {
-    method public static androidx.ui.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.KeyboardType[] values();
-    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 final class MoveCursorEditOp implements androidx.ui.input.EditOperation {
-    ctor public MoveCursorEditOp(int amount);
-    method public int component1();
-    method public androidx.ui.input.MoveCursorEditOp copy(int amount);
-    method public int getAmount();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface OffsetMap {
-    method public int originalToTransformed(int offset);
-    method public int transformedToOriginal(int offset);
-    field public static final androidx.ui.input.OffsetMap.Companion Companion;
-  }
-
-  public static final class OffsetMap.Companion {
-    method public androidx.ui.input.OffsetMap getIdentityOffsetMap();
-    property public final androidx.ui.input.OffsetMap identityOffsetMap;
-  }
-
-  public final class PasswordVisualTransformation implements androidx.ui.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
-    method public char component1();
-    method public androidx.ui.input.PasswordVisualTransformation copy(char mask);
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    method public char getMask();
-  }
-
-  public interface PlatformTextInputService {
-    method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard();
-    method public void startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput();
-  }
-
-  public final class SetComposingRegionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingRegionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingRegionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetSelectionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetSelectionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetSelectionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  @androidx.compose.Immutable public final class TextFieldValue {
-    ctor public TextFieldValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor public TextFieldValue();
-    method public String component1();
-    method public androidx.ui.text.TextRange component2();
-    method public androidx.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.ui.input.TextFieldValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method public androidx.ui.text.TextRange? getComposition();
-    method public androidx.ui.text.TextRange getSelection();
-    method public String getText();
-    field public static final androidx.ui.input.TextFieldValue.Companion Companion;
-  }
-
-  public static final class TextFieldValue.Companion {
-    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> getSaver();
-    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> Saver;
-  }
-
-  public final class TextFieldValueKt {
-    method public static String getSelectedText(androidx.ui.input.TextFieldValue);
-    method public static String getTextAfterSelection(androidx.ui.input.TextFieldValue, int maxChars);
-    method public static String getTextBeforeSelection(androidx.ui.input.TextFieldValue, int maxChars);
-  }
-
-  public class TextInputService {
-    ctor public TextInputService(androidx.ui.input.PlatformTextInputService platformTextInputService);
-    method public void hideSoftwareKeyboard(int token);
-    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(int token, androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard(int token);
-    method public int startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput(int token);
-  }
-
-  public final class TextInputServiceKt {
-    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.ui.input.PlatformTextInputService,androidx.ui.input.TextInputService> getTextInputServiceFactory();
-    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.ui.input.PlatformTextInputService,? extends androidx.ui.input.TextInputService> p);
-    field public static final int INVALID_SESSION = -1; // 0xffffffff
-    field public static final int NO_SESSION = 0; // 0x0
-  }
-
-  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();
-  }
-
-  @androidx.compose.Immutable public interface VisualTransformation {
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    field public static final androidx.ui.input.VisualTransformation.Companion Companion;
-  }
-
-  public static final class VisualTransformation.Companion {
-    method public androidx.ui.input.VisualTransformation getNone();
-    property public final androidx.ui.input.VisualTransformation None;
-  }
-
-}
-
-package androidx.ui.intl {
-
-  public final class AndroidPlatformLocaleKt {
-  }
-
-  @androidx.compose.Immutable public final class Locale {
-    ctor public Locale(String languageTag);
-    method public String getLanguage();
-    method public String getRegion();
-    method public String getScript();
-    method public String toLanguageTag();
-    property public final String language;
-    property public final String region;
-    property public final String script;
-    field public static final androidx.ui.intl.Locale.Companion Companion;
-  }
-
-  public static final class Locale.Companion {
-    method public androidx.ui.intl.Locale getCurrent();
-    property public final androidx.ui.intl.Locale current;
-  }
-
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.ui.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public LocaleList(java.util.List<androidx.ui.intl.Locale> localeList);
-    ctor public LocaleList(String languageTags);
-    ctor public LocaleList(androidx.ui.intl.Locale... locales);
-    method public java.util.List<androidx.ui.intl.Locale> component1();
-    method public operator boolean contains(androidx.ui.intl.Locale element);
-    method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.intl.LocaleList copy(java.util.List<androidx.ui.intl.Locale> localeList);
-    method public operator androidx.ui.intl.Locale get(int i);
-    method public java.util.List<androidx.ui.intl.Locale> getLocaleList();
-    method public int getSize();
-    method public boolean isEmpty();
-    method public java.util.Iterator<androidx.ui.intl.Locale> iterator();
-    property public int size;
-    field public static final androidx.ui.intl.LocaleList.Companion Companion;
-  }
-
-  public static final class LocaleList.Companion {
-    method public androidx.ui.intl.LocaleList getCurrent();
-    property public final androidx.ui.intl.LocaleList current;
-  }
-
-  public final class PlatformLocaleKt {
-  }
-
-}
-
-package androidx.ui.text {
+package androidx.compose.ui.text {
 
   @androidx.compose.Immutable public final class AnnotatedString {
-    ctor public AnnotatedString(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.ui.text.AnnotatedString copy(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> getParagraphStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> getSpanStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.ui.text.AnnotatedString plus(androidx.ui.text.AnnotatedString other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
     ctor public AnnotatedString.Builder(int capacity);
     ctor public AnnotatedString.Builder();
     ctor public AnnotatedString.Builder(String text);
-    ctor public AnnotatedString.Builder(androidx.ui.text.AnnotatedString text);
+    ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String scope, String annotation, int start, int end);
-    method public void addStyle(androidx.ui.text.SpanStyle style, int start, int end);
-    method public void addStyle(androidx.ui.text.ParagraphStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
     method public void append(String text);
     method public void append(char p);
-    method public void append(androidx.ui.text.AnnotatedString text);
+    method public void append(androidx.compose.ui.text.AnnotatedString text);
     method public int getLength();
     method public void pop();
     method public void pop(int index);
     method public int pushStringAnnotation(String tag, String annotation);
-    method public int pushStyle(androidx.ui.text.SpanStyle style);
-    method public int pushStyle(androidx.ui.text.ParagraphStyle style);
-    method public androidx.ui.text.AnnotatedString toAnnotatedString();
+    method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+    method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+    method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
     property public final int length;
   }
 
@@ -326,7 +43,7 @@
     method public int component2();
     method public int component3();
     method public String component4();
-    method public androidx.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -334,18 +51,18 @@
   }
 
   public final class AnnotatedStringKt {
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.SpanStyle spanStyle, androidx.ui.text.ParagraphStyle? paragraphStyle = null);
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.ParagraphStyle paragraphStyle);
-    method @Deprecated public static inline androidx.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static inline androidx.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static androidx.ui.text.AnnotatedString capitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString decapitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static int getLength(androidx.ui.text.AnnotatedString);
-    method public static androidx.ui.text.AnnotatedString subSequence(androidx.ui.text.AnnotatedString, int start, int end);
-    method public static androidx.ui.text.AnnotatedString toLowerCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString toUpperCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, androidx.compose.ui.text.ParagraphStyle? paragraphStyle = null);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+    method @Deprecated public static inline androidx.compose.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static inline androidx.compose.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static int getLength(androidx.compose.ui.text.AnnotatedString);
+    method public static androidx.compose.ui.text.AnnotatedString subSequence(androidx.compose.ui.text.AnnotatedString, int start, int end);
+    method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalTextApi {
@@ -355,16 +72,16 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
-    method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+    method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
     method public float getLastBaseline();
     method public float getLineBottom(int lineIndex);
     method public int getLineCount();
@@ -372,6 +89,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -382,11 +100,11 @@
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public final boolean didExceedMaxLines;
     property public final float firstBaseline;
@@ -399,12 +117,12 @@
     property public final float width;
   }
 
-  public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.AnnotatedString getAnnotatedString();
+  public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
     property public float maxIntrinsicWidth;
     property public float minIntrinsicWidth;
   }
@@ -416,7 +134,7 @@
   }
 
   public interface Paragraph {
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
@@ -430,6 +148,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -439,11 +158,11 @@
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
@@ -459,7 +178,7 @@
   public final class ParagraphConstraints {
     ctor public ParagraphConstraints(float width);
     method public float component1();
-    method public androidx.ui.text.ParagraphConstraints copy(float width);
+    method public androidx.compose.ui.text.ParagraphConstraints copy(float width);
     method public float getWidth();
   }
 
@@ -471,56 +190,56 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
   @androidx.compose.Immutable public final class ParagraphStyle {
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
+    method public androidx.compose.ui.text.style.TextAlign? component1();
+    method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
-    method public androidx.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.ui.text.ParagraphStyle copy-JVmhFNw(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.TextIndent? component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle merge(androidx.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.ParagraphStyle plus(androidx.ui.text.ParagraphStyle other);
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.ui.text.ParagraphStyle lerp(androidx.ui.text.ParagraphStyle start, androidx.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Placeholder {
     method public long component1();
     method public long component2();
-    method public androidx.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.ui.text.Placeholder copy-eLqjHCw(long width, long height, androidx.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
-    method public androidx.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
   }
 
   public enum PlaceholderVerticalAlign {
-    method public static androidx.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.PlaceholderVerticalAlign[] values();
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign AboveBaseline;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Bottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Center;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextBottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextCenter;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextTop;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Top;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign AboveBaseline;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Bottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Center;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextBottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextCenter;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextTop;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Top;
   }
 
   public final class SoftwareKeyboardController {
-    ctor public SoftwareKeyboardController(androidx.ui.input.TextInputService textInputService, int token);
+    ctor public SoftwareKeyboardController(androidx.compose.ui.text.input.TextInputService textInputService, int token);
     method public void hideSoftwareKeyboard();
     method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
@@ -528,86 +247,86 @@
 
   @androidx.compose.Immutable public final class SpanStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.SpanStyle copy-HjQ0eR4(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-3JaCuMk(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle merge(androidx.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.SpanStyle plus(androidx.ui.text.SpanStyle other);
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
-    method public static androidx.ui.text.SpanStyle lerp(androidx.ui.text.SpanStyle start, androidx.ui.text.SpanStyle stop, float fraction);
+    method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
   }
 
   public final class StringKt {
-    method public static String capitalize(String, androidx.ui.intl.Locale locale);
-    method public static String capitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String decapitalize(String, androidx.ui.intl.Locale locale);
-    method public static String decapitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toLowerCase(String, androidx.ui.intl.Locale locale);
-    method public static String toLowerCase(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toUpperCase(String, androidx.ui.intl.Locale locale);
-    method public static String toUpperCase(String, androidx.ui.intl.LocaleList localeList);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
   }
 
   public final class TextLayoutHelperKt {
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.text.AnnotatedString component1();
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.AnnotatedString component1();
     method public androidx.ui.core.Constraints component10();
-    method public androidx.ui.text.TextStyle component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> component3();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
-    method public androidx.ui.text.style.TextOverflow component6();
+    method public androidx.compose.ui.text.style.TextOverflow component6();
     method public androidx.ui.unit.Density component7();
     method public androidx.ui.core.LayoutDirection component8();
-    method public androidx.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.ui.text.TextLayoutInput copy(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.unit.Density getDensity();
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
-    method public androidx.ui.text.style.TextOverflow getOverflow();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
-    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
+    method public androidx.compose.ui.text.style.TextOverflow getOverflow();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public boolean getSoftWrap();
-    method public androidx.ui.text.TextStyle getStyle();
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.TextStyle getStyle();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   public final class TextLayoutResult {
-    method public androidx.ui.text.TextLayoutInput component1();
+    method public androidx.compose.ui.text.TextLayoutInput component1();
     method public androidx.ui.unit.IntSize component3();
-    method public androidx.ui.text.TextLayoutResult copy(androidx.ui.text.TextLayoutInput layoutInput, androidx.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
@@ -616,38 +335,43 @@
     method public boolean getHasVisualOverflow();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
     method public float getLastBaseline();
-    method public androidx.ui.text.TextLayoutInput getLayoutInput();
+    method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
     method public float getLineBottom(int lineIndex);
+    method public int getLineCount();
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
+    method public float getLineLeft(int lineIndex);
+    method public float getLineRight(int lineIndex);
     method public int getLineStart(int lineIndex);
     method public float getLineTop(int lineIndex);
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
     property public final float firstBaseline;
     property public final boolean hasVisualOverflow;
     property public final float lastBaseline;
+    property public final int lineCount;
     property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
-    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.ui.text.TextLayoutResult textLayoutResult);
-    field public static final androidx.ui.text.TextPainter INSTANCE;
+    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+    field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
   @androidx.compose.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
-    method public operator boolean contains(androidx.ui.text.TextRange other);
+    method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -655,274 +379,557 @@
     method public int getMin();
     method public boolean getReversed();
     method public int getStart();
-    method public boolean intersects(androidx.ui.text.TextRange other);
+    method public boolean intersects(androidx.compose.ui.text.TextRange other);
     property public final boolean collapsed;
     property public final int length;
     property public final int max;
     property public final int min;
     property public final boolean reversed;
-    field public static final androidx.ui.text.TextRange.Companion Companion;
+    field public static final androidx.compose.ui.text.TextRange.Companion Companion;
   }
 
   public static final class TextRange.Companion {
-    method public androidx.ui.text.TextRange getZero();
-    property public final androidx.ui.text.TextRange Zero;
+    method public androidx.compose.ui.text.TextRange getZero();
+    property public final androidx.compose.ui.text.TextRange Zero;
   }
 
   public final class TextRangeKt {
-    method public static androidx.ui.text.TextRange TextRange(int index);
-    method public static String substring(CharSequence, androidx.ui.text.TextRange range);
+    method public static androidx.compose.ui.text.TextRange TextRange(int index);
+    method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
   @androidx.compose.Immutable public final class TextStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
-    method public androidx.ui.text.style.TextAlign? component15();
-    method public androidx.ui.text.style.TextDirection? component16();
+    method public androidx.compose.ui.text.style.TextAlign? component15();
+    method public androidx.compose.ui.text.style.TextDirection? component16();
     method public long component17();
-    method public androidx.ui.text.style.TextIndent? component18();
+    method public androidx.compose.ui.text.style.TextIndent? component18();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.TextStyle copy-7aJ7aFo(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-7Y_OIKU(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
     method public long getLineHeight();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle toSpanStyle();
-    field public static final androidx.ui.text.TextStyle.Companion Companion;
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
   public static final class TextStyle.Companion {
-    method public androidx.ui.text.TextStyle getDefault();
-    property public final androidx.ui.text.TextStyle Default;
+    method public androidx.compose.ui.text.TextStyle getDefault();
+    property public final androidx.compose.ui.text.TextStyle Default;
   }
 
   public final class TextStyleKt {
-    method public static androidx.ui.text.TextStyle lerp(androidx.ui.text.TextStyle start, androidx.ui.text.TextStyle stop, float fraction);
-    method public static androidx.ui.text.TextStyle resolveDefaults(androidx.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
   }
 
   public interface Typeface {
-    method public androidx.ui.text.font.FontFamily getFontFamily();
-    property public abstract androidx.ui.text.font.FontFamily fontFamily;
+    method public androidx.compose.ui.text.font.FontFamily getFontFamily();
+    property public abstract androidx.compose.ui.text.font.FontFamily fontFamily;
   }
 
 }
 
-package androidx.ui.text.font {
+package androidx.compose.ui.text.font {
 
-  public abstract sealed class FileBasedFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
   @androidx.compose.Immutable public interface Font {
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
-    property public abstract androidx.ui.text.font.FontStyle style;
-    property public abstract androidx.ui.text.font.FontWeight weight;
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
+    property public abstract androidx.compose.ui.text.font.FontStyle style;
+    property public abstract androidx.compose.ui.text.font.FontWeight weight;
   }
 
   public static interface Font.ResourceLoader {
-    method public Object load(androidx.ui.text.font.Font font);
+    method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
   @androidx.compose.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
-    field public static final androidx.ui.text.font.FontFamily.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
 
   public static final class FontFamily.Companion {
-    method public androidx.ui.text.font.GenericFontFamily getCursive();
-    method public androidx.ui.text.font.SystemFontFamily getDefault();
-    method public androidx.ui.text.font.GenericFontFamily getMonospace();
-    method public androidx.ui.text.font.GenericFontFamily getSansSerif();
-    method public androidx.ui.text.font.GenericFontFamily getSerif();
-    property public final androidx.ui.text.font.GenericFontFamily Cursive;
-    property public final androidx.ui.text.font.SystemFontFamily Default;
-    property public final androidx.ui.text.font.GenericFontFamily Monospace;
-    property public final androidx.ui.text.font.GenericFontFamily SansSerif;
-    property public final androidx.ui.text.font.GenericFontFamily Serif;
+    method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+    method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+    method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+    property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+    property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+    property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(androidx.ui.text.font.Font... fonts);
-    method public static androidx.ui.text.font.LoadedFontFamily fontFamily(androidx.ui.text.Typeface typeface);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily asFontFamily(androidx.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.ui.text.font.Font font(int resId, androidx.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.ui.text.font.FontStyle style = androidx.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
-    ctor public FontListFontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method public java.util.List<androidx.ui.text.font.Font> component1();
-    method public boolean contains(androidx.ui.text.font.Font element);
+  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+    ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public java.util.List<androidx.compose.ui.text.font.Font> component1();
+    method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontListFontFamily copy(java.util.List<? extends 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 @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public androidx.compose.ui.text.font.Font get(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
-    method public int indexOf(androidx.ui.text.font.Font element);
+    method public int indexOf(androidx.compose.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);
+    method public java.util.Iterator<androidx.compose.ui.text.font.Font> iterator();
+    method public int lastIndexOf(androidx.compose.ui.text.font.Font element);
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator();
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> subList(int fromIndex, int toIndex);
   }
 
   public enum FontStyle {
-    method public static androidx.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontStyle[] values();
-    enum_constant public static final androidx.ui.text.font.FontStyle Italic;
-    enum_constant public static final androidx.ui.text.font.FontStyle Normal;
+    method public static androidx.compose.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontStyle[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Italic;
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Normal;
   }
 
   public enum FontSynthesis {
-    method public static androidx.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontSynthesis[] values();
-    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;
+    method public static androidx.compose.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontSynthesis[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis All;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis None;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Style;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.ui.text.font.FontWeight> {
+  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
-    method public int compareTo(androidx.ui.text.font.FontWeight other);
+    method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
-    field public static final androidx.ui.text.font.FontWeight.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
 
   public static final class FontWeight.Companion {
-    method public androidx.ui.text.font.FontWeight getBlack();
-    method public androidx.ui.text.font.FontWeight getBold();
-    method public androidx.ui.text.font.FontWeight getExtraBold();
-    method public androidx.ui.text.font.FontWeight getExtraLight();
-    method public androidx.ui.text.font.FontWeight getLight();
-    method public androidx.ui.text.font.FontWeight getMedium();
-    method public androidx.ui.text.font.FontWeight getNormal();
-    method public androidx.ui.text.font.FontWeight getSemiBold();
-    method public androidx.ui.text.font.FontWeight getThin();
-    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();
-    property public final androidx.ui.text.font.FontWeight Black;
-    property public final androidx.ui.text.font.FontWeight Bold;
-    property public final androidx.ui.text.font.FontWeight ExtraBold;
-    property public final androidx.ui.text.font.FontWeight ExtraLight;
-    property public final androidx.ui.text.font.FontWeight Light;
-    property public final androidx.ui.text.font.FontWeight Medium;
-    property public final androidx.ui.text.font.FontWeight Normal;
-    property public final androidx.ui.text.font.FontWeight SemiBold;
-    property public final androidx.ui.text.font.FontWeight Thin;
-    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;
+    method public androidx.compose.ui.text.font.FontWeight getBlack();
+    method public androidx.compose.ui.text.font.FontWeight getBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+    method public androidx.compose.ui.text.font.FontWeight getLight();
+    method public androidx.compose.ui.text.font.FontWeight getMedium();
+    method public androidx.compose.ui.text.font.FontWeight getNormal();
+    method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+    method public androidx.compose.ui.text.font.FontWeight getThin();
+    method public androidx.compose.ui.text.font.FontWeight getW100();
+    method public androidx.compose.ui.text.font.FontWeight getW200();
+    method public androidx.compose.ui.text.font.FontWeight getW300();
+    method public androidx.compose.ui.text.font.FontWeight getW400();
+    method public androidx.compose.ui.text.font.FontWeight getW500();
+    method public androidx.compose.ui.text.font.FontWeight getW600();
+    method public androidx.compose.ui.text.font.FontWeight getW700();
+    method public androidx.compose.ui.text.font.FontWeight getW800();
+    method public androidx.compose.ui.text.font.FontWeight getW900();
+    property public final androidx.compose.ui.text.font.FontWeight Black;
+    property public final androidx.compose.ui.text.font.FontWeight Bold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+    property public final androidx.compose.ui.text.font.FontWeight Light;
+    property public final androidx.compose.ui.text.font.FontWeight Medium;
+    property public final androidx.compose.ui.text.font.FontWeight Normal;
+    property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+    property public final androidx.compose.ui.text.font.FontWeight Thin;
+    property public final androidx.compose.ui.text.font.FontWeight W100;
+    property public final androidx.compose.ui.text.font.FontWeight W200;
+    property public final androidx.compose.ui.text.font.FontWeight W300;
+    property public final androidx.compose.ui.text.font.FontWeight W400;
+    property public final androidx.compose.ui.text.font.FontWeight W500;
+    property public final androidx.compose.ui.text.font.FontWeight W600;
+    property public final androidx.compose.ui.text.font.FontWeight W700;
+    property public final androidx.compose.ui.text.font.FontWeight W800;
+    property public final androidx.compose.ui.text.font.FontWeight W900;
   }
 
   public final class FontWeightKt {
-    method public static androidx.ui.text.font.FontWeight lerp(androidx.ui.text.font.FontWeight start, androidx.ui.text.font.FontWeight stop, float fraction);
+    method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.ui.text.font.SystemFontFamily {
+  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
-  public final class LoadedFontFamily extends androidx.ui.text.font.FontFamily {
-    ctor public LoadedFontFamily(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface component1();
-    method public androidx.ui.text.font.LoadedFontFamily copy(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface getTypeface();
+  public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+    ctor public LoadedFontFamily(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface component1();
+    method public androidx.compose.ui.text.font.LoadedFontFamily copy(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface getTypeface();
   }
 
-  public final class ResourceFont implements androidx.ui.text.font.Font {
-    ctor public ResourceFont(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+  public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+    ctor public ResourceFont(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int component1();
-    method public androidx.ui.text.font.FontWeight component2();
-    method public androidx.ui.text.font.FontStyle component3();
-    method public androidx.ui.text.font.ResourceFont copy(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+    method public androidx.compose.ui.text.font.FontWeight component2();
+    method public androidx.compose.ui.text.font.FontStyle component3();
+    method public androidx.compose.ui.text.font.ResourceFont copy(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int getResId();
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
   }
 
-  public abstract sealed class SystemFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
 }
 
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.input {
+
+  public final class BackspaceKeyEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public BackspaceKeyEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class CommitTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public CommitTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.CommitTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteAllEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteAllEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface EditOperation {
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class EditingBuffer {
+    ctor public EditingBuffer(String initialText, androidx.compose.ui.text.TextRange initialSelection);
+    field public static final int NOWHERE = -1; // 0xffffffff
+  }
+
+  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+    ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor @Deprecated public EditorValue();
+    method @Deprecated public String component1();
+    method @Deprecated public androidx.compose.ui.text.TextRange component2();
+    method @Deprecated public androidx.compose.ui.text.TextRange? component3();
+    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
+    method @Deprecated public String getSelectedText();
+    method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
+    method @Deprecated public String getText();
+    method @Deprecated public String getTextAfterSelection(int maxChars);
+    method @Deprecated public String getTextBeforeSelection(int maxChars);
+  }
+
+  public final class FinishComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public FinishComposingTextEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class GapBufferKt {
+  }
+
+  public enum ImeAction {
+    method public static androidx.compose.ui.text.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.ImeAction[] values();
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Done;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Go;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Next;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction NoAction;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Previous;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Search;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Send;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Unspecified;
+  }
+
+  public interface InputEventListener {
+    method public void onEditOperations(java.util.List<? extends androidx.compose.ui.text.input.EditOperation> editOps);
+    method public void onImeAction(androidx.compose.ui.text.input.ImeAction imeAction);
+  }
+
+  public enum KeyboardType {
+    method public static androidx.compose.ui.text.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.KeyboardType[] values();
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Ascii;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Email;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Number;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType NumberPassword;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Password;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Phone;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Text;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Uri;
+  }
+
+  public final class MoveCursorEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public MoveCursorEditOp(int amount);
+    method public int component1();
+    method public androidx.compose.ui.text.input.MoveCursorEditOp copy(int amount);
+    method public int getAmount();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface OffsetMap {
+    method public int originalToTransformed(int offset);
+    method public int transformedToOriginal(int offset);
+    field public static final androidx.compose.ui.text.input.OffsetMap.Companion Companion;
+  }
+
+  public static final class OffsetMap.Companion {
+    method public androidx.compose.ui.text.input.OffsetMap getIdentityOffsetMap();
+    property public final androidx.compose.ui.text.input.OffsetMap identityOffsetMap;
+  }
+
+  public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
+    ctor public PasswordVisualTransformation(char mask);
+    ctor public PasswordVisualTransformation();
+    method public char component1();
+    method public androidx.compose.ui.text.input.PasswordVisualTransformation copy(char mask);
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    method public char getMask();
+  }
+
+  public interface PlatformTextInputService {
+    method public void hideSoftwareKeyboard();
+    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard();
+    method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput();
+  }
+
+  public final class SetComposingRegionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingRegionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingRegionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetSelectionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetSelectionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetSelectionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  @androidx.compose.Immutable public final class TextFieldValue {
+    ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor public TextFieldValue();
+    method public String component1();
+    method public androidx.compose.ui.text.TextRange component2();
+    method public androidx.compose.ui.text.TextRange? component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method public androidx.compose.ui.text.TextRange? getComposition();
+    method public androidx.compose.ui.text.TextRange getSelection();
+    method public String getText();
+    field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+  }
+
+  public static final class TextFieldValue.Companion {
+    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+  }
+
+  public final class TextFieldValueKt {
+    method public static String getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+    method public static String getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+    method public static String getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+  }
+
+  public class TextInputService {
+    ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+    method public void hideSoftwareKeyboard(int token);
+    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(int token, androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard(int token);
+    method public int startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput(int token);
+  }
+
+  public final class TextInputServiceKt {
+    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.compose.ui.text.input.PlatformTextInputService,androidx.compose.ui.text.input.TextInputService> getTextInputServiceFactory();
+    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.PlatformTextInputService,? extends androidx.compose.ui.text.input.TextInputService> p);
+    field public static final int INVALID_SESSION = -1; // 0xffffffff
+    field public static final int NO_SESSION = 0; // 0x0
+  }
+
+  public final class TransformedText {
+    ctor public TransformedText(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.AnnotatedString component1();
+    method public androidx.compose.ui.text.input.OffsetMap component2();
+    method public androidx.compose.ui.text.input.TransformedText copy(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.input.OffsetMap getOffsetMap();
+    method public androidx.compose.ui.text.AnnotatedString getTransformedText();
+  }
+
+  @androidx.compose.Immutable public interface VisualTransformation {
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+  }
+
+  public static final class VisualTransformation.Companion {
+    method public androidx.compose.ui.text.input.VisualTransformation getNone();
+    property public final androidx.compose.ui.text.input.VisualTransformation None;
+  }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+  public final class AndroidPlatformLocaleKt {
+  }
+
+  @androidx.compose.Immutable public final class Locale {
+    ctor public Locale(String languageTag);
+    method public String getLanguage();
+    method public String getRegion();
+    method public String getScript();
+    method public String toLanguageTag();
+    property public final String language;
+    property public final String region;
+    property public final String script;
+    field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+  }
+
+  public static final class Locale.Companion {
+    method public androidx.compose.ui.text.intl.Locale getCurrent();
+    property public final androidx.compose.ui.text.intl.Locale current;
+  }
+
+  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+    ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    ctor public LocaleList(String languageTags);
+    ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
+    method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method public operator androidx.compose.ui.text.intl.Locale get(int i);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+    method public int getSize();
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+    property public int size;
+    field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+  }
+
+  public static final class LocaleList.Companion {
+    method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+    property public final androidx.compose.ui.text.intl.LocaleList current;
+  }
+
+  public final class PlatformLocaleKt {
+  }
+
+}
+
+package androidx.compose.ui.text.platform {
 
   public final class AndroidParagraphHelperKt {
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.ui.text.TextStyle,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.ui.text.font.Font.ResourceLoader,androidx.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.ui.text.TextStyle,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.ui.text.font.Font.ResourceLoader,? extends androidx.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
-    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.ui.text.ParagraphConstraints,androidx.ui.text.Paragraph> getParagraphActualFactory();
-    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.ui.text.ParagraphConstraints,? extends androidx.ui.text.Paragraph> p);
+    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.compose.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.compose.ui.text.ParagraphConstraints,androidx.compose.ui.text.Paragraph> getParagraphActualFactory();
+    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.compose.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.compose.ui.text.ParagraphConstraints,? extends androidx.compose.ui.text.Paragraph> p);
   }
 
   public final class AndroidStringDelegateKt {
   }
 
   public final class TypefaceAdapterKt {
-    method public static androidx.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.ui.text.font.FontWeight,? extends androidx.ui.text.font.FontStyle>>? necessaryStyles = null);
+    method public static androidx.compose.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.compose.ui.text.font.FontWeight,? extends androidx.compose.ui.text.font.FontStyle>>? necessaryStyles = null);
   }
 
 }
 
-package androidx.ui.text.platform.extensions {
+package androidx.compose.ui.text.platform.extensions {
 
   public final class LocaleExtensionsKt {
   }
@@ -938,7 +945,7 @@
 
 }
 
-package androidx.ui.text.style {
+package androidx.compose.ui.text.style {
 
   @androidx.compose.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
@@ -948,7 +955,7 @@
     method public float getMultiplier();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
     method @androidx.compose.Immutable public static inline String! toString-impl(float p);
-    field public static final androidx.ui.text.style.BaselineShift.Companion Companion;
+    field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
   public static final class BaselineShift.Companion {
@@ -961,54 +968,54 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-7csQwvo(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
-    method public static androidx.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.ResolvedTextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Rtl;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
   }
 
   public enum TextAlign {
-    method public static androidx.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextAlign[] values();
-    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;
+    method public static androidx.compose.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Center;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign End;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Justify;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Left;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Right;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
   @androidx.compose.Immutable public final class TextDecoration {
     method public int component1();
-    method public operator boolean contains(androidx.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextDecoration copy(int mask);
+    method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
-    method public operator androidx.ui.text.style.TextDecoration plus(androidx.ui.text.style.TextDecoration decoration);
-    field public static final androidx.ui.text.style.TextDecoration.Companion Companion;
+    method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+    field public static final androidx.compose.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;
+    method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+    method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+    method public androidx.compose.ui.text.style.TextDecoration getNone();
+    method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+    property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+    property public final androidx.compose.ui.text.style.TextDecoration None;
+    property public final androidx.compose.ui.text.style.TextDecoration Underline;
   }
 
   public enum TextDirection {
-    method public static androidx.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.TextDirection Content;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrLtr;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrRtl;
-    enum_constant public static final androidx.ui.text.style.TextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.TextDirection Rtl;
+    method public static androidx.compose.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Content;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrLtr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrRtl;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
   @androidx.compose.Immutable public final class TextGeometricTransform {
@@ -1016,42 +1023,42 @@
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.Immutable public androidx.compose.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;
+    field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
   }
 
   public static final class TextGeometricTransform.Companion {
   }
 
   public final class TextGeometricTransformKt {
-    method public static androidx.ui.text.style.TextGeometricTransform lerp(androidx.ui.text.style.TextGeometricTransform start, androidx.ui.text.style.TextGeometricTransform stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion Companion;
+    field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
   }
 
   public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNone();
-    property public final androidx.ui.text.style.TextIndent None;
+    method public androidx.compose.ui.text.style.TextIndent getNone();
+    property public final androidx.compose.ui.text.style.TextIndent None;
   }
 
   public final class TextIndentKt {
-    method public static androidx.ui.text.style.TextIndent lerp(androidx.ui.text.style.TextIndent start, androidx.ui.text.style.TextIndent stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
   }
 
   public enum TextOverflow {
-    method public static androidx.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextOverflow[] values();
-    enum_constant public static final androidx.ui.text.style.TextOverflow Clip;
-    enum_constant public static final androidx.ui.text.style.TextOverflow Ellipsis;
+    method public static androidx.compose.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextOverflow[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Clip;
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Ellipsis;
   }
 
 }
diff --git a/ui/ui-text-core/api/restricted_current.txt b/ui/ui-text-core/api/restricted_current.txt
index 9230b27..f59f204 100644
--- a/ui/ui-text-core/api/restricted_current.txt
+++ b/ui/ui-text-core/api/restricted_current.txt
@@ -1,321 +1,38 @@
 // Signature format: 3.0
-package androidx.ui.input {
-
-  public final class BackspaceKeyEditOp implements androidx.ui.input.EditOperation {
-    ctor public BackspaceKeyEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class CommitTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public CommitTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.CommitTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteAllEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteAllEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.ui.input.EditOperation {
-    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
-    method public int getAfterLength();
-    method public int getBeforeLength();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface EditOperation {
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class EditingBuffer {
-    ctor public EditingBuffer(String initialText, androidx.ui.text.TextRange initialSelection);
-    field public static final int NOWHERE = -1; // 0xffffffff
-  }
-
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
-    ctor @Deprecated public EditorValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor @Deprecated public EditorValue();
-    method @Deprecated public String component1();
-    method @Deprecated public androidx.ui.text.TextRange component2();
-    method @Deprecated public androidx.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.ui.input.EditorValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method @Deprecated public androidx.ui.text.TextRange? getComposition();
-    method @Deprecated public String getSelectedText();
-    method @Deprecated public androidx.ui.text.TextRange getSelection();
-    method @Deprecated public String getText();
-    method @Deprecated public String getTextAfterSelection(int maxChars);
-    method @Deprecated public String getTextBeforeSelection(int maxChars);
-  }
-
-  public final class FinishComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public FinishComposingTextEditOp();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class GapBufferKt {
-  }
-
-  public enum ImeAction {
-    method public static androidx.ui.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.ImeAction[] values();
-    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 interface InputEventListener {
-    method public void onEditOperations(java.util.List<? extends androidx.ui.input.EditOperation> editOps);
-    method public void onImeAction(androidx.ui.input.ImeAction imeAction);
-  }
-
-  public enum KeyboardType {
-    method public static androidx.ui.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.input.KeyboardType[] values();
-    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 final class MoveCursorEditOp implements androidx.ui.input.EditOperation {
-    ctor public MoveCursorEditOp(int amount);
-    method public int component1();
-    method public androidx.ui.input.MoveCursorEditOp copy(int amount);
-    method public int getAmount();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public interface OffsetMap {
-    method public int originalToTransformed(int offset);
-    method public int transformedToOriginal(int offset);
-    field public static final androidx.ui.input.OffsetMap.Companion Companion;
-  }
-
-  public static final class OffsetMap.Companion {
-    method public androidx.ui.input.OffsetMap getIdentityOffsetMap();
-    property public final androidx.ui.input.OffsetMap identityOffsetMap;
-  }
-
-  public final class PasswordVisualTransformation implements androidx.ui.input.VisualTransformation {
-    ctor public PasswordVisualTransformation(char mask);
-    ctor public PasswordVisualTransformation();
-    method public char component1();
-    method public androidx.ui.input.PasswordVisualTransformation copy(char mask);
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    method public char getMask();
-  }
-
-  public interface PlatformTextInputService {
-    method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard();
-    method public void startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput();
-  }
-
-  public final class SetComposingRegionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingRegionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingRegionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetComposingTextEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
-    method public String component1();
-    method public int component2();
-    method public androidx.ui.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
-    method public int getNewCursorPosition();
-    method public String getText();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  public final class SetSelectionEditOp implements androidx.ui.input.EditOperation {
-    ctor public SetSelectionEditOp(int start, int end);
-    method public int component1();
-    method public int component2();
-    method public androidx.ui.input.SetSelectionEditOp copy(int start, int end);
-    method public int getEnd();
-    method public int getStart();
-    method public void process(androidx.ui.input.EditingBuffer buffer);
-  }
-
-  @androidx.compose.Immutable public final class TextFieldValue {
-    ctor public TextFieldValue(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    ctor public TextFieldValue();
-    method public String component1();
-    method public androidx.ui.text.TextRange component2();
-    method public androidx.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.ui.input.TextFieldValue copy(String text, androidx.ui.text.TextRange selection, androidx.ui.text.TextRange? composition);
-    method public androidx.ui.text.TextRange? getComposition();
-    method public androidx.ui.text.TextRange getSelection();
-    method public String getText();
-    field public static final androidx.ui.input.TextFieldValue.Companion Companion;
-  }
-
-  public static final class TextFieldValue.Companion {
-    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> getSaver();
-    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.ui.input.TextFieldValue,java.lang.Object> Saver;
-  }
-
-  public final class TextFieldValueKt {
-    method public static String getSelectedText(androidx.ui.input.TextFieldValue);
-    method public static String getTextAfterSelection(androidx.ui.input.TextFieldValue, int maxChars);
-    method public static String getTextBeforeSelection(androidx.ui.input.TextFieldValue, int maxChars);
-  }
-
-  public class TextInputService {
-    ctor public TextInputService(androidx.ui.input.PlatformTextInputService platformTextInputService);
-    method public void hideSoftwareKeyboard(int token);
-    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
-    method public void onStateUpdated(int token, androidx.ui.input.TextFieldValue value);
-    method public void showSoftwareKeyboard(int token);
-    method public int startInput(androidx.ui.input.TextFieldValue value, androidx.ui.input.KeyboardType keyboardType, androidx.ui.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.ui.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed);
-    method public void stopInput(int token);
-  }
-
-  public final class TextInputServiceKt {
-    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.ui.input.PlatformTextInputService,androidx.ui.input.TextInputService> getTextInputServiceFactory();
-    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.ui.input.PlatformTextInputService,? extends androidx.ui.input.TextInputService> p);
-    field public static final int INVALID_SESSION = -1; // 0xffffffff
-    field public static final int NO_SESSION = 0; // 0x0
-  }
-
-  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();
-  }
-
-  @androidx.compose.Immutable public interface VisualTransformation {
-    method public androidx.ui.input.TransformedText filter(androidx.ui.text.AnnotatedString text);
-    field public static final androidx.ui.input.VisualTransformation.Companion Companion;
-  }
-
-  public static final class VisualTransformation.Companion {
-    method public androidx.ui.input.VisualTransformation getNone();
-    property public final androidx.ui.input.VisualTransformation None;
-  }
-
-}
-
-package androidx.ui.intl {
-
-  public final class AndroidPlatformLocaleKt {
-  }
-
-  @androidx.compose.Immutable public final class Locale {
-    ctor public Locale(String languageTag);
-    method public String getLanguage();
-    method public String getRegion();
-    method public String getScript();
-    method public String toLanguageTag();
-    property public final String language;
-    property public final String region;
-    property public final String script;
-    field public static final androidx.ui.intl.Locale.Companion Companion;
-  }
-
-  public static final class Locale.Companion {
-    method public androidx.ui.intl.Locale getCurrent();
-    property public final androidx.ui.intl.Locale current;
-  }
-
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.ui.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
-    ctor public LocaleList(java.util.List<androidx.ui.intl.Locale> localeList);
-    ctor public LocaleList(String languageTags);
-    ctor public LocaleList(androidx.ui.intl.Locale... locales);
-    method public java.util.List<androidx.ui.intl.Locale> component1();
-    method public operator boolean contains(androidx.ui.intl.Locale element);
-    method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.intl.LocaleList copy(java.util.List<androidx.ui.intl.Locale> localeList);
-    method public operator androidx.ui.intl.Locale get(int i);
-    method public java.util.List<androidx.ui.intl.Locale> getLocaleList();
-    method public int getSize();
-    method public boolean isEmpty();
-    method public java.util.Iterator<androidx.ui.intl.Locale> iterator();
-    property public int size;
-    field public static final androidx.ui.intl.LocaleList.Companion Companion;
-  }
-
-  public static final class LocaleList.Companion {
-    method public androidx.ui.intl.LocaleList getCurrent();
-    property public final androidx.ui.intl.LocaleList current;
-  }
-
-  public final class PlatformLocaleKt {
-  }
-
-}
-
-package androidx.ui.text {
+package androidx.compose.ui.text {
 
   @androidx.compose.Immutable public final class AnnotatedString {
-    ctor public AnnotatedString(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles);
+    ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.ui.text.AnnotatedString copy(String text, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.ParagraphStyle>> getParagraphStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> getSpanStyles();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.ui.text.AnnotatedString plus(androidx.ui.text.AnnotatedString other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
     ctor public AnnotatedString.Builder(int capacity);
     ctor public AnnotatedString.Builder();
     ctor public AnnotatedString.Builder(String text);
-    ctor public AnnotatedString.Builder(androidx.ui.text.AnnotatedString text);
+    ctor public AnnotatedString.Builder(androidx.compose.ui.text.AnnotatedString text);
     method public void addStringAnnotation(String scope, String annotation, int start, int end);
-    method public void addStyle(androidx.ui.text.SpanStyle style, int start, int end);
-    method public void addStyle(androidx.ui.text.ParagraphStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.SpanStyle style, int start, int end);
+    method public void addStyle(androidx.compose.ui.text.ParagraphStyle style, int start, int end);
     method public void append(String text);
     method public void append(char p);
-    method public void append(androidx.ui.text.AnnotatedString text);
+    method public void append(androidx.compose.ui.text.AnnotatedString text);
     method public int getLength();
     method public void pop();
     method public void pop(int index);
     method public int pushStringAnnotation(String tag, String annotation);
-    method public int pushStyle(androidx.ui.text.SpanStyle style);
-    method public int pushStyle(androidx.ui.text.ParagraphStyle style);
-    method public androidx.ui.text.AnnotatedString toAnnotatedString();
+    method public int pushStyle(androidx.compose.ui.text.SpanStyle style);
+    method public int pushStyle(androidx.compose.ui.text.ParagraphStyle style);
+    method public androidx.compose.ui.text.AnnotatedString toAnnotatedString();
     property public final int length;
   }
 
@@ -326,7 +43,7 @@
     method public int component2();
     method public int component3();
     method public String component4();
-    method public androidx.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -334,18 +51,18 @@
   }
 
   public final class AnnotatedStringKt {
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.SpanStyle spanStyle, androidx.ui.text.ParagraphStyle? paragraphStyle = null);
-    method public static androidx.ui.text.AnnotatedString AnnotatedString(String text, androidx.ui.text.ParagraphStyle paragraphStyle);
-    method @Deprecated public static inline androidx.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static inline androidx.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
-    method public static androidx.ui.text.AnnotatedString capitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString decapitalize(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static int getLength(androidx.ui.text.AnnotatedString);
-    method public static androidx.ui.text.AnnotatedString subSequence(androidx.ui.text.AnnotatedString, int start, int end);
-    method public static androidx.ui.text.AnnotatedString toLowerCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static androidx.ui.text.AnnotatedString toUpperCase(androidx.ui.text.AnnotatedString, androidx.ui.intl.LocaleList localeList = LocaleList.current);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
-    method public static inline <R> R withStyle(androidx.ui.text.AnnotatedString.Builder, androidx.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.SpanStyle spanStyle, androidx.compose.ui.text.ParagraphStyle? paragraphStyle = null);
+    method public static androidx.compose.ui.text.AnnotatedString AnnotatedString(String text, androidx.compose.ui.text.ParagraphStyle paragraphStyle);
+    method @Deprecated public static inline androidx.compose.ui.text.AnnotatedString AnnotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static inline androidx.compose.ui.text.AnnotatedString annotatedString(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,kotlin.Unit> builder);
+    method public static androidx.compose.ui.text.AnnotatedString capitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString decapitalize(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static int getLength(androidx.compose.ui.text.AnnotatedString);
+    method public static androidx.compose.ui.text.AnnotatedString subSequence(androidx.compose.ui.text.AnnotatedString, int start, int end);
+    method public static androidx.compose.ui.text.AnnotatedString toLowerCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static androidx.compose.ui.text.AnnotatedString toUpperCase(androidx.compose.ui.text.AnnotatedString, androidx.compose.ui.text.intl.LocaleList localeList = LocaleList.current);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.SpanStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
+    method public static inline <R> R withStyle(androidx.compose.ui.text.AnnotatedString.Builder, androidx.compose.ui.text.ParagraphStyle style, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.AnnotatedString.Builder,? extends R> block);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API that may change frequently and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalTextApi {
@@ -355,16 +72,16 @@
   }
 
   public final class MultiParagraph {
-    ctor public MultiParagraph(androidx.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
-    method public androidx.ui.text.MultiParagraphIntrinsics getIntrinsics();
+    method public androidx.compose.ui.text.MultiParagraphIntrinsics getIntrinsics();
     method public float getLastBaseline();
     method public float getLineBottom(int lineIndex);
     method public int getLineCount();
@@ -372,6 +89,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -382,11 +100,11 @@
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public final boolean didExceedMaxLines;
     property public final float firstBaseline;
@@ -399,12 +117,12 @@
     property public final float width;
   }
 
-  public final class MultiParagraphIntrinsics implements androidx.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.ui.text.AnnotatedString annotatedString, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public androidx.ui.text.AnnotatedString getAnnotatedString();
+  public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
     property public float maxIntrinsicWidth;
     property public float minIntrinsicWidth;
   }
@@ -416,7 +134,7 @@
   }
 
   public interface Paragraph {
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
@@ -430,6 +148,7 @@
     method public int getLineEllipsisOffset(int lineIndex);
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
     method public float getLineHeight(int lineIndex);
     method public float getLineLeft(int lineIndex);
     method public float getLineRight(int lineIndex);
@@ -439,11 +158,11 @@
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
     property public abstract boolean didExceedMaxLines;
     property public abstract float firstBaseline;
@@ -459,7 +178,7 @@
   public final class ParagraphConstraints {
     ctor public ParagraphConstraints(float width);
     method public float component1();
-    method public androidx.ui.text.ParagraphConstraints copy(float width);
+    method public androidx.compose.ui.text.ParagraphConstraints copy(float width);
     method public float getWidth();
   }
 
@@ -471,56 +190,56 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
-    method public static androidx.ui.text.Paragraph Paragraph(androidx.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.ui.text.ParagraphConstraints constraints);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
   @androidx.compose.Immutable public final class ParagraphStyle {
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
+    method public androidx.compose.ui.text.style.TextAlign? component1();
+    method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
-    method public androidx.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.ui.text.ParagraphStyle copy-JVmhFNw(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.TextIndent? component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle merge(androidx.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.ParagraphStyle plus(androidx.ui.text.ParagraphStyle other);
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.ui.text.ParagraphStyle lerp(androidx.ui.text.ParagraphStyle start, androidx.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Placeholder {
     method public long component1();
     method public long component2();
-    method public androidx.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.ui.text.Placeholder copy-eLqjHCw(long width, long height, androidx.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
-    method public androidx.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
+    method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
   }
 
   public enum PlaceholderVerticalAlign {
-    method public static androidx.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.PlaceholderVerticalAlign[] values();
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign AboveBaseline;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Bottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Center;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextBottom;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextCenter;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign TextTop;
-    enum_constant public static final androidx.ui.text.PlaceholderVerticalAlign Top;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.PlaceholderVerticalAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign AboveBaseline;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Bottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Center;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextBottom;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextCenter;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign TextTop;
+    enum_constant public static final androidx.compose.ui.text.PlaceholderVerticalAlign Top;
   }
 
   public final class SoftwareKeyboardController {
-    ctor public SoftwareKeyboardController(androidx.ui.input.TextInputService textInputService, int token);
+    ctor public SoftwareKeyboardController(androidx.compose.ui.text.input.TextInputService textInputService, int token);
     method public void hideSoftwareKeyboard();
     method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
@@ -528,86 +247,86 @@
 
   @androidx.compose.Immutable public final class SpanStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.SpanStyle copy-HjQ0eR4(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-3JaCuMk(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle merge(androidx.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.ui.text.SpanStyle plus(androidx.ui.text.SpanStyle other);
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
-    method public static androidx.ui.text.SpanStyle lerp(androidx.ui.text.SpanStyle start, androidx.ui.text.SpanStyle stop, float fraction);
+    method public static androidx.compose.ui.text.SpanStyle lerp(androidx.compose.ui.text.SpanStyle start, androidx.compose.ui.text.SpanStyle stop, float fraction);
   }
 
   public final class StringKt {
-    method public static String capitalize(String, androidx.ui.intl.Locale locale);
-    method public static String capitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String decapitalize(String, androidx.ui.intl.Locale locale);
-    method public static String decapitalize(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toLowerCase(String, androidx.ui.intl.Locale locale);
-    method public static String toLowerCase(String, androidx.ui.intl.LocaleList localeList);
-    method public static String toUpperCase(String, androidx.ui.intl.Locale locale);
-    method public static String toUpperCase(String, androidx.ui.intl.LocaleList localeList);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String capitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String decapitalize(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toLowerCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.Locale locale);
+    method public static String toUpperCase(String, androidx.compose.ui.text.intl.LocaleList localeList);
   }
 
   public final class TextLayoutHelperKt {
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.text.AnnotatedString component1();
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.AnnotatedString component1();
     method public androidx.ui.core.Constraints component10();
-    method public androidx.ui.text.TextStyle component2();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> component3();
+    method public androidx.compose.ui.text.TextStyle component2();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
-    method public androidx.ui.text.style.TextOverflow component6();
+    method public androidx.compose.ui.text.style.TextOverflow component6();
     method public androidx.ui.unit.Density component7();
     method public androidx.ui.core.LayoutDirection component8();
-    method public androidx.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.ui.text.TextLayoutInput copy(androidx.ui.text.AnnotatedString text, androidx.ui.text.TextStyle style, java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
     method public androidx.ui.core.Constraints getConstraints();
     method public androidx.ui.unit.Density getDensity();
     method public androidx.ui.core.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
-    method public androidx.ui.text.style.TextOverflow getOverflow();
-    method public java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>> getPlaceholders();
-    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
+    method public androidx.compose.ui.text.style.TextOverflow getOverflow();
+    method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
+    method public androidx.compose.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public boolean getSoftWrap();
-    method public androidx.ui.text.TextStyle getStyle();
-    method public androidx.ui.text.AnnotatedString getText();
+    method public androidx.compose.ui.text.TextStyle getStyle();
+    method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
   public final class TextLayoutResult {
-    method public androidx.ui.text.TextLayoutInput component1();
+    method public androidx.compose.ui.text.TextLayoutInput component1();
     method public androidx.ui.unit.IntSize component3();
-    method public androidx.ui.text.TextLayoutResult copy(androidx.ui.text.TextLayoutInput layoutInput, androidx.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
-    method public androidx.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
@@ -616,38 +335,43 @@
     method public boolean getHasVisualOverflow();
     method public float getHorizontalPosition(int offset, boolean usePrimaryDirection);
     method public float getLastBaseline();
-    method public androidx.ui.text.TextLayoutInput getLayoutInput();
+    method public androidx.compose.ui.text.TextLayoutInput getLayoutInput();
     method public float getLineBottom(int lineIndex);
+    method public int getLineCount();
     method public int getLineEnd(int lineIndex);
     method public int getLineForOffset(int offset);
+    method public int getLineForVerticalPosition(float vertical);
+    method public float getLineLeft(int lineIndex);
+    method public float getLineRight(int lineIndex);
     method public int getLineStart(int lineIndex);
     method public float getLineTop(int lineIndex);
     method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
-    method public androidx.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
+    method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.text.TextRange getWordBoundary(int offset);
+    method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
     property public final float firstBaseline;
     property public final boolean hasVisualOverflow;
     property public final float lastBaseline;
+    property public final int lineCount;
     property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
-    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.ui.text.TextLayoutResult textLayoutResult);
-    field public static final androidx.ui.text.TextPainter INSTANCE;
+    method public void paint(androidx.ui.graphics.Canvas canvas, androidx.compose.ui.text.TextLayoutResult textLayoutResult);
+    field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
   @androidx.compose.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
-    method public operator boolean contains(androidx.ui.text.TextRange other);
+    method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -655,274 +379,557 @@
     method public int getMin();
     method public boolean getReversed();
     method public int getStart();
-    method public boolean intersects(androidx.ui.text.TextRange other);
+    method public boolean intersects(androidx.compose.ui.text.TextRange other);
     property public final boolean collapsed;
     property public final int length;
     property public final int max;
     property public final int min;
     property public final boolean reversed;
-    field public static final androidx.ui.text.TextRange.Companion Companion;
+    field public static final androidx.compose.ui.text.TextRange.Companion Companion;
   }
 
   public static final class TextRange.Companion {
-    method public androidx.ui.text.TextRange getZero();
-    property public final androidx.ui.text.TextRange Zero;
+    method public androidx.compose.ui.text.TextRange getZero();
+    property public final androidx.compose.ui.text.TextRange Zero;
   }
 
   public final class TextRangeKt {
-    method public static androidx.ui.text.TextRange TextRange(int index);
-    method public static String substring(CharSequence, androidx.ui.text.TextRange range);
+    method public static androidx.compose.ui.text.TextRange TextRange(int index);
+    method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
   @androidx.compose.Immutable public final class TextStyle {
     method public long component1();
-    method public androidx.ui.text.style.TextGeometricTransform? component10();
-    method public androidx.ui.intl.LocaleList? component11();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
+    method public androidx.compose.ui.text.intl.LocaleList? component11();
     method public long component12();
-    method public androidx.ui.text.style.TextDecoration? component13();
+    method public androidx.compose.ui.text.style.TextDecoration? component13();
     method public androidx.ui.graphics.Shadow? component14();
-    method public androidx.ui.text.style.TextAlign? component15();
-    method public androidx.ui.text.style.TextDirection? component16();
+    method public androidx.compose.ui.text.style.TextAlign? component15();
+    method public androidx.compose.ui.text.style.TextDirection? component16();
     method public long component17();
-    method public androidx.ui.text.style.TextIndent? component18();
+    method public androidx.compose.ui.text.style.TextIndent? component18();
     method public long component2();
-    method public androidx.ui.text.font.FontWeight? component3();
-    method public androidx.ui.text.font.FontStyle? component4();
-    method public androidx.ui.text.font.FontSynthesis? component5();
-    method public androidx.ui.text.font.FontFamily? component6();
+    method public androidx.compose.ui.text.font.FontWeight? component3();
+    method public androidx.compose.ui.text.font.FontStyle? component4();
+    method public androidx.compose.ui.text.font.FontSynthesis? component5();
+    method public androidx.compose.ui.text.font.FontFamily? component6();
     method public String? component7();
     method public long component8();
-    method public androidx.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.ui.text.TextStyle copy-7aJ7aFo(long color, long fontSize, 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, long letterSpacing, androidx.ui.text.style.BaselineShift? baselineShift, androidx.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.ui.intl.LocaleList? localeList, long background, androidx.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.ui.text.style.TextIndent? textIndent);
+    method public androidx.compose.ui.text.style.BaselineShift? component9();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-7Y_OIKU(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
-    method public androidx.ui.text.style.BaselineShift? getBaselineShift();
+    method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
-    method public androidx.ui.text.font.FontFamily? getFontFamily();
+    method public androidx.compose.ui.text.font.FontFamily? getFontFamily();
     method public String? getFontFeatureSettings();
     method public long getFontSize();
-    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 androidx.compose.ui.text.font.FontStyle? getFontStyle();
+    method public androidx.compose.ui.text.font.FontSynthesis? getFontSynthesis();
+    method public androidx.compose.ui.text.font.FontWeight? getFontWeight();
     method public long getLetterSpacing();
     method public long getLineHeight();
-    method public androidx.ui.intl.LocaleList? getLocaleList();
+    method public androidx.compose.ui.text.intl.LocaleList? getLocaleList();
     method public androidx.ui.graphics.Shadow? getShadow();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDecoration? getTextDecoration();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.TextStyle merge(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.ui.text.TextStyle plus(androidx.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.ui.text.SpanStyle toSpanStyle();
-    field public static final androidx.ui.text.TextStyle.Companion Companion;
+    method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
+    method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
+    method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
+    method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
+    method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
   public static final class TextStyle.Companion {
-    method public androidx.ui.text.TextStyle getDefault();
-    property public final androidx.ui.text.TextStyle Default;
+    method public androidx.compose.ui.text.TextStyle getDefault();
+    property public final androidx.compose.ui.text.TextStyle Default;
   }
 
   public final class TextStyleKt {
-    method public static androidx.ui.text.TextStyle lerp(androidx.ui.text.TextStyle start, androidx.ui.text.TextStyle stop, float fraction);
-    method public static androidx.ui.text.TextStyle resolveDefaults(androidx.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
   }
 
   public interface Typeface {
-    method public androidx.ui.text.font.FontFamily getFontFamily();
-    property public abstract androidx.ui.text.font.FontFamily fontFamily;
+    method public androidx.compose.ui.text.font.FontFamily getFontFamily();
+    property public abstract androidx.compose.ui.text.font.FontFamily fontFamily;
   }
 
 }
 
-package androidx.ui.text.font {
+package androidx.compose.ui.text.font {
 
-  public abstract sealed class FileBasedFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
   @androidx.compose.Immutable public interface Font {
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
-    property public abstract androidx.ui.text.font.FontStyle style;
-    property public abstract androidx.ui.text.font.FontWeight weight;
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
+    property public abstract androidx.compose.ui.text.font.FontStyle style;
+    property public abstract androidx.compose.ui.text.font.FontWeight weight;
   }
 
   public static interface Font.ResourceLoader {
-    method public Object load(androidx.ui.text.font.Font font);
+    method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
   @androidx.compose.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
-    field public static final androidx.ui.text.font.FontFamily.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
 
   public static final class FontFamily.Companion {
-    method public androidx.ui.text.font.GenericFontFamily getCursive();
-    method public androidx.ui.text.font.SystemFontFamily getDefault();
-    method public androidx.ui.text.font.GenericFontFamily getMonospace();
-    method public androidx.ui.text.font.GenericFontFamily getSansSerif();
-    method public androidx.ui.text.font.GenericFontFamily getSerif();
-    property public final androidx.ui.text.font.GenericFontFamily Cursive;
-    property public final androidx.ui.text.font.SystemFontFamily Default;
-    property public final androidx.ui.text.font.GenericFontFamily Monospace;
-    property public final androidx.ui.text.font.GenericFontFamily SansSerif;
-    property public final androidx.ui.text.font.GenericFontFamily Serif;
+    method public androidx.compose.ui.text.font.GenericFontFamily getCursive();
+    method public androidx.compose.ui.text.font.SystemFontFamily getDefault();
+    method public androidx.compose.ui.text.font.GenericFontFamily getMonospace();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSansSerif();
+    method public androidx.compose.ui.text.font.GenericFontFamily getSerif();
+    property public final androidx.compose.ui.text.font.GenericFontFamily Cursive;
+    property public final androidx.compose.ui.text.font.SystemFontFamily Default;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Monospace;
+    property public final androidx.compose.ui.text.font.GenericFontFamily SansSerif;
+    property public final androidx.compose.ui.text.font.GenericFontFamily Serif;
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily fontFamily(androidx.ui.text.font.Font... fonts);
-    method public static androidx.ui.text.font.LoadedFontFamily fontFamily(androidx.ui.text.Typeface typeface);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.ui.text.font.FontListFontFamily asFontFamily(androidx.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.ui.text.font.Font font(int resId, androidx.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.ui.text.font.FontStyle style = androidx.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
-    ctor public FontListFontFamily(java.util.List<? extends androidx.ui.text.font.Font> fonts);
-    method public java.util.List<androidx.ui.text.font.Font> component1();
-    method public boolean contains(androidx.ui.text.font.Font element);
+  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+    ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public java.util.List<androidx.compose.ui.text.font.Font> component1();
+    method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontListFontFamily copy(java.util.List<? extends 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 @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method public androidx.compose.ui.text.font.Font get(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
-    method public int indexOf(androidx.ui.text.font.Font element);
+    method public int indexOf(androidx.compose.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);
+    method public java.util.Iterator<androidx.compose.ui.text.font.Font> iterator();
+    method public int lastIndexOf(androidx.compose.ui.text.font.Font element);
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator();
+    method public java.util.ListIterator<androidx.compose.ui.text.font.Font> listIterator(int index);
+    method public java.util.List<androidx.compose.ui.text.font.Font> subList(int fromIndex, int toIndex);
   }
 
   public enum FontStyle {
-    method public static androidx.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontStyle[] values();
-    enum_constant public static final androidx.ui.text.font.FontStyle Italic;
-    enum_constant public static final androidx.ui.text.font.FontStyle Normal;
+    method public static androidx.compose.ui.text.font.FontStyle valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontStyle[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Italic;
+    enum_constant public static final androidx.compose.ui.text.font.FontStyle Normal;
   }
 
   public enum FontSynthesis {
-    method public static androidx.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.font.FontSynthesis[] values();
-    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;
+    method public static androidx.compose.ui.text.font.FontSynthesis valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.font.FontSynthesis[] values();
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis All;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis None;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Style;
+    enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.ui.text.font.FontWeight> {
+  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
-    method public int compareTo(androidx.ui.text.font.FontWeight other);
+    method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
-    field public static final androidx.ui.text.font.FontWeight.Companion Companion;
+    field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
 
   public static final class FontWeight.Companion {
-    method public androidx.ui.text.font.FontWeight getBlack();
-    method public androidx.ui.text.font.FontWeight getBold();
-    method public androidx.ui.text.font.FontWeight getExtraBold();
-    method public androidx.ui.text.font.FontWeight getExtraLight();
-    method public androidx.ui.text.font.FontWeight getLight();
-    method public androidx.ui.text.font.FontWeight getMedium();
-    method public androidx.ui.text.font.FontWeight getNormal();
-    method public androidx.ui.text.font.FontWeight getSemiBold();
-    method public androidx.ui.text.font.FontWeight getThin();
-    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();
-    property public final androidx.ui.text.font.FontWeight Black;
-    property public final androidx.ui.text.font.FontWeight Bold;
-    property public final androidx.ui.text.font.FontWeight ExtraBold;
-    property public final androidx.ui.text.font.FontWeight ExtraLight;
-    property public final androidx.ui.text.font.FontWeight Light;
-    property public final androidx.ui.text.font.FontWeight Medium;
-    property public final androidx.ui.text.font.FontWeight Normal;
-    property public final androidx.ui.text.font.FontWeight SemiBold;
-    property public final androidx.ui.text.font.FontWeight Thin;
-    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;
+    method public androidx.compose.ui.text.font.FontWeight getBlack();
+    method public androidx.compose.ui.text.font.FontWeight getBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraBold();
+    method public androidx.compose.ui.text.font.FontWeight getExtraLight();
+    method public androidx.compose.ui.text.font.FontWeight getLight();
+    method public androidx.compose.ui.text.font.FontWeight getMedium();
+    method public androidx.compose.ui.text.font.FontWeight getNormal();
+    method public androidx.compose.ui.text.font.FontWeight getSemiBold();
+    method public androidx.compose.ui.text.font.FontWeight getThin();
+    method public androidx.compose.ui.text.font.FontWeight getW100();
+    method public androidx.compose.ui.text.font.FontWeight getW200();
+    method public androidx.compose.ui.text.font.FontWeight getW300();
+    method public androidx.compose.ui.text.font.FontWeight getW400();
+    method public androidx.compose.ui.text.font.FontWeight getW500();
+    method public androidx.compose.ui.text.font.FontWeight getW600();
+    method public androidx.compose.ui.text.font.FontWeight getW700();
+    method public androidx.compose.ui.text.font.FontWeight getW800();
+    method public androidx.compose.ui.text.font.FontWeight getW900();
+    property public final androidx.compose.ui.text.font.FontWeight Black;
+    property public final androidx.compose.ui.text.font.FontWeight Bold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraBold;
+    property public final androidx.compose.ui.text.font.FontWeight ExtraLight;
+    property public final androidx.compose.ui.text.font.FontWeight Light;
+    property public final androidx.compose.ui.text.font.FontWeight Medium;
+    property public final androidx.compose.ui.text.font.FontWeight Normal;
+    property public final androidx.compose.ui.text.font.FontWeight SemiBold;
+    property public final androidx.compose.ui.text.font.FontWeight Thin;
+    property public final androidx.compose.ui.text.font.FontWeight W100;
+    property public final androidx.compose.ui.text.font.FontWeight W200;
+    property public final androidx.compose.ui.text.font.FontWeight W300;
+    property public final androidx.compose.ui.text.font.FontWeight W400;
+    property public final androidx.compose.ui.text.font.FontWeight W500;
+    property public final androidx.compose.ui.text.font.FontWeight W600;
+    property public final androidx.compose.ui.text.font.FontWeight W700;
+    property public final androidx.compose.ui.text.font.FontWeight W800;
+    property public final androidx.compose.ui.text.font.FontWeight W900;
   }
 
   public final class FontWeightKt {
-    method public static androidx.ui.text.font.FontWeight lerp(androidx.ui.text.font.FontWeight start, androidx.ui.text.font.FontWeight stop, float fraction);
+    method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.ui.text.font.SystemFontFamily {
+  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
-  public final class LoadedFontFamily extends androidx.ui.text.font.FontFamily {
-    ctor public LoadedFontFamily(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface component1();
-    method public androidx.ui.text.font.LoadedFontFamily copy(androidx.ui.text.Typeface typeface);
-    method public androidx.ui.text.Typeface getTypeface();
+  public final class LoadedFontFamily extends androidx.compose.ui.text.font.FontFamily {
+    ctor public LoadedFontFamily(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface component1();
+    method public androidx.compose.ui.text.font.LoadedFontFamily copy(androidx.compose.ui.text.Typeface typeface);
+    method public androidx.compose.ui.text.Typeface getTypeface();
   }
 
-  public final class ResourceFont implements androidx.ui.text.font.Font {
-    ctor public ResourceFont(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+  public final class ResourceFont implements androidx.compose.ui.text.font.Font {
+    ctor public ResourceFont(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int component1();
-    method public androidx.ui.text.font.FontWeight component2();
-    method public androidx.ui.text.font.FontStyle component3();
-    method public androidx.ui.text.font.ResourceFont copy(int resId, androidx.ui.text.font.FontWeight weight, androidx.ui.text.font.FontStyle style);
+    method public androidx.compose.ui.text.font.FontWeight component2();
+    method public androidx.compose.ui.text.font.FontStyle component3();
+    method public androidx.compose.ui.text.font.ResourceFont copy(int resId, androidx.compose.ui.text.font.FontWeight weight, androidx.compose.ui.text.font.FontStyle style);
     method public int getResId();
-    method public androidx.ui.text.font.FontStyle getStyle();
-    method public androidx.ui.text.font.FontWeight getWeight();
+    method public androidx.compose.ui.text.font.FontStyle getStyle();
+    method public androidx.compose.ui.text.font.FontWeight getWeight();
   }
 
-  public abstract sealed class SystemFontFamily extends androidx.ui.text.font.FontFamily {
+  public abstract sealed class SystemFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
 }
 
-package androidx.ui.text.platform {
+package androidx.compose.ui.text.input {
+
+  public final class BackspaceKeyEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public BackspaceKeyEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class CommitTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public CommitTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.CommitTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteAllEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteAllEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class DeleteSurroundingTextInCodePointsEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public DeleteSurroundingTextInCodePointsEditOp(int beforeLength, int afterLength);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.DeleteSurroundingTextInCodePointsEditOp copy(int beforeLength, int afterLength);
+    method public int getAfterLength();
+    method public int getBeforeLength();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface EditOperation {
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class EditingBuffer {
+    ctor public EditingBuffer(String initialText, androidx.compose.ui.text.TextRange initialSelection);
+    field public static final int NOWHERE = -1; // 0xffffffff
+  }
+
+  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+    ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor @Deprecated public EditorValue();
+    method @Deprecated public String component1();
+    method @Deprecated public androidx.compose.ui.text.TextRange component2();
+    method @Deprecated public androidx.compose.ui.text.TextRange? component3();
+    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
+    method @Deprecated public String getSelectedText();
+    method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
+    method @Deprecated public String getText();
+    method @Deprecated public String getTextAfterSelection(int maxChars);
+    method @Deprecated public String getTextBeforeSelection(int maxChars);
+  }
+
+  public final class FinishComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public FinishComposingTextEditOp();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class GapBufferKt {
+  }
+
+  public enum ImeAction {
+    method public static androidx.compose.ui.text.input.ImeAction valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.ImeAction[] values();
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Done;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Go;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Next;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction NoAction;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Previous;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Search;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Send;
+    enum_constant public static final androidx.compose.ui.text.input.ImeAction Unspecified;
+  }
+
+  public interface InputEventListener {
+    method public void onEditOperations(java.util.List<? extends androidx.compose.ui.text.input.EditOperation> editOps);
+    method public void onImeAction(androidx.compose.ui.text.input.ImeAction imeAction);
+  }
+
+  public enum KeyboardType {
+    method public static androidx.compose.ui.text.input.KeyboardType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.input.KeyboardType[] values();
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Ascii;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Email;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Number;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType NumberPassword;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Password;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Phone;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Text;
+    enum_constant public static final androidx.compose.ui.text.input.KeyboardType Uri;
+  }
+
+  public final class MoveCursorEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public MoveCursorEditOp(int amount);
+    method public int component1();
+    method public androidx.compose.ui.text.input.MoveCursorEditOp copy(int amount);
+    method public int getAmount();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public interface OffsetMap {
+    method public int originalToTransformed(int offset);
+    method public int transformedToOriginal(int offset);
+    field public static final androidx.compose.ui.text.input.OffsetMap.Companion Companion;
+  }
+
+  public static final class OffsetMap.Companion {
+    method public androidx.compose.ui.text.input.OffsetMap getIdentityOffsetMap();
+    property public final androidx.compose.ui.text.input.OffsetMap identityOffsetMap;
+  }
+
+  public final class PasswordVisualTransformation implements androidx.compose.ui.text.input.VisualTransformation {
+    ctor public PasswordVisualTransformation(char mask);
+    ctor public PasswordVisualTransformation();
+    method public char component1();
+    method public androidx.compose.ui.text.input.PasswordVisualTransformation copy(char mask);
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    method public char getMask();
+  }
+
+  public interface PlatformTextInputService {
+    method public void hideSoftwareKeyboard();
+    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard();
+    method public void startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput();
+  }
+
+  public final class SetComposingRegionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingRegionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingRegionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetComposingTextEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetComposingTextEditOp(String text, int newCursorPosition);
+    method public String component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetComposingTextEditOp copy(String text, int newCursorPosition);
+    method public int getNewCursorPosition();
+    method public String getText();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  public final class SetSelectionEditOp implements androidx.compose.ui.text.input.EditOperation {
+    ctor public SetSelectionEditOp(int start, int end);
+    method public int component1();
+    method public int component2();
+    method public androidx.compose.ui.text.input.SetSelectionEditOp copy(int start, int end);
+    method public int getEnd();
+    method public int getStart();
+    method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
+  }
+
+  @androidx.compose.Immutable public final class TextFieldValue {
+    ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    ctor public TextFieldValue();
+    method public String component1();
+    method public androidx.compose.ui.text.TextRange component2();
+    method public androidx.compose.ui.text.TextRange? component3();
+    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method public androidx.compose.ui.text.TextRange? getComposition();
+    method public androidx.compose.ui.text.TextRange getSelection();
+    method public String getText();
+    field public static final androidx.compose.ui.text.input.TextFieldValue.Companion Companion;
+  }
+
+  public static final class TextFieldValue.Companion {
+    method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> getSaver();
+    property public final androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.ui.text.input.TextFieldValue,java.lang.Object> Saver;
+  }
+
+  public final class TextFieldValueKt {
+    method public static String getSelectedText(androidx.compose.ui.text.input.TextFieldValue);
+    method public static String getTextAfterSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+    method public static String getTextBeforeSelection(androidx.compose.ui.text.input.TextFieldValue, int maxChars);
+  }
+
+  public class TextInputService {
+    ctor public TextInputService(androidx.compose.ui.text.input.PlatformTextInputService platformTextInputService);
+    method public void hideSoftwareKeyboard(int token);
+    method public void notifyFocusedRect(int token, androidx.ui.geometry.Rect rect);
+    method public void onStateUpdated(int token, androidx.compose.ui.text.input.TextFieldValue value);
+    method public void showSoftwareKeyboard(int token);
+    method public int startInput(androidx.compose.ui.text.input.TextFieldValue value, androidx.compose.ui.text.input.KeyboardType keyboardType, androidx.compose.ui.text.input.ImeAction imeAction, kotlin.jvm.functions.Function1<? super java.util.List<? extends androidx.compose.ui.text.input.EditOperation>,kotlin.Unit> onEditCommand, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed);
+    method public void stopInput(int token);
+  }
+
+  public final class TextInputServiceKt {
+    method @Deprecated public static kotlin.jvm.functions.Function1<androidx.compose.ui.text.input.PlatformTextInputService,androidx.compose.ui.text.input.TextInputService> getTextInputServiceFactory();
+    method @Deprecated public static void setTextInputServiceFactory(kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.PlatformTextInputService,? extends androidx.compose.ui.text.input.TextInputService> p);
+    field public static final int INVALID_SESSION = -1; // 0xffffffff
+    field public static final int NO_SESSION = 0; // 0x0
+  }
+
+  public final class TransformedText {
+    ctor public TransformedText(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.AnnotatedString component1();
+    method public androidx.compose.ui.text.input.OffsetMap component2();
+    method public androidx.compose.ui.text.input.TransformedText copy(androidx.compose.ui.text.AnnotatedString transformedText, androidx.compose.ui.text.input.OffsetMap offsetMap);
+    method public androidx.compose.ui.text.input.OffsetMap getOffsetMap();
+    method public androidx.compose.ui.text.AnnotatedString getTransformedText();
+  }
+
+  @androidx.compose.Immutable public interface VisualTransformation {
+    method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
+    field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
+  }
+
+  public static final class VisualTransformation.Companion {
+    method public androidx.compose.ui.text.input.VisualTransformation getNone();
+    property public final androidx.compose.ui.text.input.VisualTransformation None;
+  }
+
+}
+
+package androidx.compose.ui.text.intl {
+
+  public final class AndroidPlatformLocaleKt {
+  }
+
+  @androidx.compose.Immutable public final class Locale {
+    ctor public Locale(String languageTag);
+    method public String getLanguage();
+    method public String getRegion();
+    method public String getScript();
+    method public String toLanguageTag();
+    property public final String language;
+    property public final String region;
+    property public final String script;
+    field public static final androidx.compose.ui.text.intl.Locale.Companion Companion;
+  }
+
+  public static final class Locale.Companion {
+    method public androidx.compose.ui.text.intl.Locale getCurrent();
+    property public final androidx.compose.ui.text.intl.Locale current;
+  }
+
+  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+    ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    ctor public LocaleList(String languageTags);
+    ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
+    method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method public operator androidx.compose.ui.text.intl.Locale get(int i);
+    method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
+    method public int getSize();
+    method public boolean isEmpty();
+    method public java.util.Iterator<androidx.compose.ui.text.intl.Locale> iterator();
+    property public int size;
+    field public static final androidx.compose.ui.text.intl.LocaleList.Companion Companion;
+  }
+
+  public static final class LocaleList.Companion {
+    method public androidx.compose.ui.text.intl.LocaleList getCurrent();
+    property public final androidx.compose.ui.text.intl.LocaleList current;
+  }
+
+  public final class PlatformLocaleKt {
+  }
+
+}
+
+package androidx.compose.ui.text.platform {
 
   public final class AndroidParagraphHelperKt {
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.ui.text.TextStyle,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.ui.text.font.Font.ResourceLoader,androidx.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.ui.text.TextStyle,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.SpanStyle>>,? super java.util.List<androidx.ui.text.AnnotatedString.Range<androidx.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.ui.text.font.Font.ResourceLoader,? extends androidx.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
-    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.ui.text.ParagraphConstraints,androidx.ui.text.Paragraph> getParagraphActualFactory();
-    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.ui.text.ParagraphConstraints,? extends androidx.ui.text.Paragraph> p);
+    method @Deprecated public static kotlin.jvm.functions.Function4<androidx.compose.ui.text.ParagraphIntrinsics,java.lang.Integer,java.lang.Boolean,androidx.compose.ui.text.ParagraphConstraints,androidx.compose.ui.text.Paragraph> getParagraphActualFactory();
+    method @Deprecated public static void setParagraphActualFactory(kotlin.jvm.functions.Function4<? super androidx.compose.ui.text.ParagraphIntrinsics,? super java.lang.Integer,? super java.lang.Boolean,? super androidx.compose.ui.text.ParagraphConstraints,? extends androidx.compose.ui.text.Paragraph> p);
   }
 
   public final class AndroidStringDelegateKt {
   }
 
   public final class TypefaceAdapterKt {
-    method public static androidx.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.ui.text.font.FontWeight,? extends androidx.ui.text.font.FontStyle>>? necessaryStyles = null);
+    method public static androidx.compose.ui.text.Typeface typefaceFromFontFamily(android.content.Context context, androidx.compose.ui.text.font.FontFamily fontFamily, java.util.List<? extends kotlin.Pair<androidx.compose.ui.text.font.FontWeight,? extends androidx.compose.ui.text.font.FontStyle>>? necessaryStyles = null);
   }
 
 }
 
-package androidx.ui.text.platform.extensions {
+package androidx.compose.ui.text.platform.extensions {
 
   public final class LocaleExtensionsKt {
   }
@@ -938,7 +945,7 @@
 
 }
 
-package androidx.ui.text.style {
+package androidx.compose.ui.text.style {
 
   @androidx.compose.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
@@ -948,7 +955,7 @@
     method public float getMultiplier();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
     method @androidx.compose.Immutable public static inline String! toString-impl(float p);
-    field public static final androidx.ui.text.style.BaselineShift.Companion Companion;
+    field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
   public static final class BaselineShift.Companion {
@@ -961,54 +968,54 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-7csQwvo(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
-    method public static androidx.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.ResolvedTextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.ResolvedTextDirection Rtl;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.ResolvedTextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.ResolvedTextDirection Rtl;
   }
 
   public enum TextAlign {
-    method public static androidx.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextAlign[] values();
-    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;
+    method public static androidx.compose.ui.text.style.TextAlign valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextAlign[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Center;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign End;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Justify;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Left;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Right;
+    enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
   @androidx.compose.Immutable public final class TextDecoration {
     method public int component1();
-    method public operator boolean contains(androidx.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextDecoration copy(int mask);
+    method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
-    method public operator androidx.ui.text.style.TextDecoration plus(androidx.ui.text.style.TextDecoration decoration);
-    field public static final androidx.ui.text.style.TextDecoration.Companion Companion;
+    method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
+    field public static final androidx.compose.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;
+    method public androidx.compose.ui.text.style.TextDecoration combine(java.util.List<androidx.compose.ui.text.style.TextDecoration> decorations);
+    method public androidx.compose.ui.text.style.TextDecoration getLineThrough();
+    method public androidx.compose.ui.text.style.TextDecoration getNone();
+    method public androidx.compose.ui.text.style.TextDecoration getUnderline();
+    property public final androidx.compose.ui.text.style.TextDecoration LineThrough;
+    property public final androidx.compose.ui.text.style.TextDecoration None;
+    property public final androidx.compose.ui.text.style.TextDecoration Underline;
   }
 
   public enum TextDirection {
-    method public static androidx.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextDirection[] values();
-    enum_constant public static final androidx.ui.text.style.TextDirection Content;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrLtr;
-    enum_constant public static final androidx.ui.text.style.TextDirection ContentOrRtl;
-    enum_constant public static final androidx.ui.text.style.TextDirection Ltr;
-    enum_constant public static final androidx.ui.text.style.TextDirection Rtl;
+    method public static androidx.compose.ui.text.style.TextDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextDirection[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Content;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrLtr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection ContentOrRtl;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Ltr;
+    enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
   @androidx.compose.Immutable public final class TextGeometricTransform {
@@ -1016,42 +1023,42 @@
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.Immutable public androidx.compose.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;
+    field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
   }
 
   public static final class TextGeometricTransform.Companion {
   }
 
   public final class TextGeometricTransformKt {
-    method public static androidx.ui.text.style.TextGeometricTransform lerp(androidx.ui.text.style.TextGeometricTransform start, androidx.ui.text.style.TextGeometricTransform stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion Companion;
+    field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
   }
 
   public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNone();
-    property public final androidx.ui.text.style.TextIndent None;
+    method public androidx.compose.ui.text.style.TextIndent getNone();
+    property public final androidx.compose.ui.text.style.TextIndent None;
   }
 
   public final class TextIndentKt {
-    method public static androidx.ui.text.style.TextIndent lerp(androidx.ui.text.style.TextIndent start, androidx.ui.text.style.TextIndent stop, float fraction);
+    method public static androidx.compose.ui.text.style.TextIndent lerp(androidx.compose.ui.text.style.TextIndent start, androidx.compose.ui.text.style.TextIndent stop, float fraction);
   }
 
   public enum TextOverflow {
-    method public static androidx.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.text.style.TextOverflow[] values();
-    enum_constant public static final androidx.ui.text.style.TextOverflow Clip;
-    enum_constant public static final androidx.ui.text.style.TextOverflow Ellipsis;
+    method public static androidx.compose.ui.text.style.TextOverflow valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.text.style.TextOverflow[] values();
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Clip;
+    enum_constant public static final androidx.compose.ui.text.style.TextOverflow Ellipsis;
   }
 
 }
diff --git a/ui/ui-text-core/samples/src/main/AndroidManifest.xml b/ui/ui-text-core/samples/src/main/AndroidManifest.xml
index 361b69f..88c8279 100644
--- a/ui/ui-text-core/samples/src/main/AndroidManifest.xml
+++ b/ui/ui-text-core/samples/src/main/AndroidManifest.xml
@@ -14,4 +14,4 @@
   limitations under the License.
   -->
 
-<manifest package="androidx.ui.text.samples" />
+<manifest package="androidx.compose.ui.text.samples" />
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/AnnotatedStringBuilderSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/AnnotatedStringBuilderSamples.kt
similarity index 91%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/AnnotatedStringBuilderSamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/AnnotatedStringBuilderSamples.kt
index 22f18f7..919c4f3 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/AnnotatedStringBuilderSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/AnnotatedStringBuilderSamples.kt
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
 import androidx.ui.graphics.Color
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.ParagraphStyle
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextIndent
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.ParagraphStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextIndent
+import androidx.compose.ui.text.withStyle
 import androidx.ui.unit.sp
 
 @Sampled
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/BaselineShiftSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt
similarity index 86%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/BaselineShiftSamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt
index 0bd524f..9f1f9c2 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/BaselineShiftSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.withStyle
 import androidx.ui.unit.sp
 
 @Sampled
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/FontFamilySamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/FontFamilySamples.kt
similarity index 86%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/FontFamilySamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/FontFamilySamples.kt
index b184c7a..1a1344c 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/FontFamilySamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/FontFamilySamples.kt
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.font
-import androidx.ui.text.font.fontFamily
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.font
+import androidx.compose.ui.text.font.fontFamily
 
 @Sampled
 @Composable
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/ParagraphStyleSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/ParagraphStyleSamples.kt
similarity index 88%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/ParagraphStyleSamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/ParagraphStyleSamples.kt
index bfa3f78..b37cec7 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/ParagraphStyleSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/ParagraphStyleSamples.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
-import androidx.ui.text.ParagraphStyle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.ParagraphStyle
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.sp
 
 @Sampled
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/SpanStyleSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/SpanStyleSamples.kt
similarity index 86%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/SpanStyleSamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/SpanStyleSamples.kt
index 725a166..5d0a747 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/SpanStyleSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/SpanStyleSamples.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
 import androidx.ui.graphics.Color
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.withStyle
 import androidx.ui.unit.sp
 
 @Sampled
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/TextDecorationSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextDecorationSamples.kt
similarity index 92%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/TextDecorationSamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextDecorationSamples.kt
index cc3d3b8..b6c1da3 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/TextDecorationSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextDecorationSamples.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
-import androidx.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextDecoration
 
 @Sampled
 @Composable
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/TextStyleSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextStyleSamples.kt
similarity index 81%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/TextStyleSamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextStyleSamples.kt
index b12cc0d8..5b14f7e 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/TextStyleSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextStyleSamples.kt
@@ -14,17 +14,17 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
 import androidx.ui.graphics.Color
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.style.TextDecoration
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextDecoration
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
 
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/VisualTransformationSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/VisualTransformationSamples.kt
similarity index 92%
rename from ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/VisualTransformationSamples.kt
rename to ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/VisualTransformationSamples.kt
index e25e640..11e3f72 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/ui/text/samples/VisualTransformationSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/VisualTransformationSamples.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.samples
+package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
-import androidx.ui.input.OffsetMap
-import androidx.ui.input.TransformedText
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.input.OffsetMap
+import androidx.compose.ui.text.input.TransformedText
+import androidx.compose.ui.text.AnnotatedString
 
 @Sampled
 fun passwordFilter(text: AnnotatedString): TransformedText {
diff --git a/ui/ui-text-core/src/androidAndroidTest/AndroidManifest.xml b/ui/ui-text-core/src/androidAndroidTest/AndroidManifest.xml
index 92206d6..39e91c6 100644
--- a/ui/ui-text-core/src/androidAndroidTest/AndroidManifest.xml
+++ b/ui/ui-text-core/src/androidAndroidTest/AndroidManifest.xml
@@ -14,4 +14,4 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest package="androidx.ui.text.core.test" />
+<manifest package="androidx.compose.ui.text" />
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/FontTestData.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/FontTestData.kt
similarity index 95%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/FontTestData.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/FontTestData.kt
index cccb5e7..21fe261 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/FontTestData.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/FontTestData.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.text.font.font
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.test.R
+import androidx.compose.ui.text.font.font
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.test.R
 
 class FontTestData {
     companion object {
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/MultiParagraphIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
similarity index 98%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/MultiParagraphIntegrationTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
index 8c54adf..f1b57593 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/MultiParagraphIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
@@ -23,13 +23,13 @@
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.PathOperation
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.style.ResolvedTextDirection
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/MultiParagraphIntegrationTextDirectionTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
similarity index 97%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
index 4ea7ff5..e71ea3e 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.style.ResolvedTextDirection
-import androidx.ui.text.style.TextDirection
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.style.TextDirection
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
similarity index 96%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntegrationTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
index 4f2e661..ddc8cf3 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
@@ -13,12 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
@@ -28,18 +28,18 @@
 import androidx.ui.graphics.PathOperation
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.asAndroidBitmap
-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
-import androidx.ui.text.FontTestData.Companion.FONT_200_REGULAR
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.matchers.assertThat
-import androidx.ui.text.matchers.isZero
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.ResolvedTextDirection
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.FontTestData.Companion.BASIC_KERN_FONT
+import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
+import androidx.compose.ui.text.FontTestData.Companion.FONT_100_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_200_REGULAR
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.matchers.assertThat
+import androidx.compose.ui.text.matchers.isZero
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.Density
 import androidx.ui.geometry.Offset
 import androidx.ui.unit.em
@@ -358,6 +358,99 @@
     }
 
     @Test
+    fun getLineForVerticalPosition_ltr() {
+        with(defaultDensity) {
+            val text = "abcdefgh"
+            val fontSize = 20f
+            // Make the layout 4 lines
+            val layoutWidth = text.length * fontSize / 4
+            val lineHeight = 30f
+
+            val paragraph = simpleParagraph(
+                text = text,
+                style = TextStyle(
+                    fontSize = fontSize.sp,
+                    lineHeight = lineHeight.sp
+                ),
+                constraints = ParagraphConstraints(width = layoutWidth)
+            )
+
+            assertThat(paragraph.lineCount).isEqualTo(4)
+            // test positions are 1, lineHeight+1, 2lineHeight+1, 3lineHeight + 1 which map to line
+            // 0, 1, 2, 3
+            for (i in 0 until paragraph.lineCount) {
+                val position = i * lineHeight.sp.toPx() + 1
+                val line = paragraph.getLineForVerticalPosition(position)
+                assertWithMessage(
+                    "Line at line index $i, position $position does not match"
+                ).that(line).isEqualTo(i)
+            }
+        }
+    }
+
+    @Test
+    fun getLineForVerticalPosition_rtl() {
+        with(defaultDensity) {
+            val text = "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7"
+            val fontSize = 20f
+            // Make the layout 4 lines
+            val layoutWidth = text.length * fontSize / 4
+            val lineHeight = 30f
+
+            val paragraph = simpleParagraph(
+                text = text,
+                style = TextStyle(
+                    fontSize = fontSize.sp,
+                    lineHeight = lineHeight.sp
+                ),
+                constraints = ParagraphConstraints(width = layoutWidth)
+            )
+
+            assertThat(paragraph.lineCount).isEqualTo(4)
+            // test positions are 1, lineHeight+1, 2lineHeight+1, 3lineHeight + 1 which map to line
+            // 0, 1, 2, 3
+            for (i in 0 until paragraph.lineCount) {
+                val position = i * lineHeight.sp.toPx() + 1
+                val line = paragraph.getLineForVerticalPosition(position)
+                assertWithMessage(
+                    "Line at line index $i, position $position does not match"
+                ).that(line).isEqualTo(i)
+            }
+        }
+    }
+
+    @Test
+    fun getLineForVerticalPosition_ltr_height_outOfBounds() {
+        with(defaultDensity) {
+            val text = "abcdefgh"
+            val fontSize = 20f
+            // Make the layout 4 lines
+            val layoutWidth = text.length * fontSize / 4
+            val lineHeight = 30f
+
+            val paragraph = simpleParagraph(
+                text = text,
+                style = TextStyle(
+                    fontSize = fontSize.sp,
+                    lineHeight = lineHeight.sp
+                ),
+                constraints = ParagraphConstraints(width = layoutWidth)
+            )
+
+            assertThat(paragraph.lineCount).isEqualTo(4)
+            // greater than height
+            var position = lineHeight.sp.toPx() * paragraph.lineCount * 2
+            var line = paragraph.getLineForVerticalPosition(position)
+            assertThat(line).isEqualTo(paragraph.lineCount - 1)
+
+            // negative
+            position = -1 * lineHeight.sp.toPx()
+            line = paragraph.getLineForVerticalPosition(position)
+            assertThat(line).isZero()
+        }
+    }
+
+    @Test
     fun getBoundingBox_ltr_singleLine() {
         with(defaultDensity) {
             val text = "abc"
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntegrationTextDirectionTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
similarity index 95%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntegrationTextDirectionTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
index 6aa73e2..1cde843 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntegrationTextDirectionTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntrinsicIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
similarity index 98%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntrinsicIntegrationTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
index 1aaea33..59cc6bc 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphIntrinsicIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.asFontFamily
+import androidx.compose.ui.text.font.asFontFamily
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphPlaceholderIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphPlaceholderIntegrationTest.kt
similarity index 99%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphPlaceholderIntegrationTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphPlaceholderIntegrationTest.kt
index b2b1fe2..ace7224 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/ParagraphPlaceholderIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphPlaceholderIntegrationTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.font.asFontFamily
+import androidx.compose.ui.text.font.asFontFamily
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/StringTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/StringTest.kt
similarity index 95%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/StringTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/StringTest.kt
index 2b24cbd..4370df6 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/StringTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/StringTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.filters.SmallTest
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextDelegateIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
similarity index 98%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextDelegateIntegrationTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
index 5eca43e..48e6d90 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextDelegateIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import android.graphics.Bitmap
 import androidx.test.filters.SmallTest
@@ -25,9 +25,9 @@
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 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.assertThat
+import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.matchers.assertThat
 import androidx.ui.unit.Density
 import androidx.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextLayoutResultIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
similarity index 96%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextLayoutResultIntegrationTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
index cbe373b..58e833e 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextLayoutResultIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
@@ -22,9 +22,9 @@
 import androidx.ui.core.LayoutDirection
 import androidx.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
-import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.matchers.isZero
+import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.matchers.isZero
 import androidx.ui.unit.Density
 import androidx.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextTestExtensions.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextTestExtensions.kt
similarity index 92%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextTestExtensions.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextTestExtensions.kt
index e596f60..a0bd79f 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/TextTestExtensions.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextTestExtensions.kt
@@ -13,15 +13,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import android.content.Context
 import android.graphics.Bitmap
 import android.graphics.Canvas
 import android.graphics.Typeface
 import androidx.core.content.res.ResourcesCompat
-import androidx.ui.text.font.Font
-import androidx.ui.text.font.ResourceFont
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.ResourceFont
 import kotlin.math.ceil
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/input/BackspaceKeyEditOpTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/BackspaceKeyEditOpTest.kt
similarity index 97%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/input/BackspaceKeyEditOpTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/BackspaceKeyEditOpTest.kt
index ac30fd6..9427a195a 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/input/BackspaceKeyEditOpTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/BackspaceKeyEditOpTest.kt
@@ -13,11 +13,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Test
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/input/MoveCursorEditOpTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/MoveCursorEditOpTest.kt
similarity index 98%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/input/MoveCursorEditOpTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/MoveCursorEditOpTest.kt
index 85d4ec0..b25c8cb 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/input/MoveCursorEditOpTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/input/MoveCursorEditOpTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Test
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/intl/LocaleListTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleListTest.kt
similarity index 97%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/intl/LocaleListTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleListTest.kt
index 0839a0e..5b10e8a 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/intl/LocaleListTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleListTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/intl/LocaleTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleTest.kt
similarity index 97%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/intl/LocaleTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleTest.kt
index 890157b..a86994c 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/intl/LocaleTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/intl/LocaleTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/BitmapSubject.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/BitmapSubject.kt
similarity index 97%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/BitmapSubject.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/BitmapSubject.kt
index 192dc3c..ab87842 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/BitmapSubject.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/BitmapSubject.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.matchers
+package androidx.compose.ui.text.matchers
 
 import android.graphics.Bitmap
 import com.google.common.truth.FailureMetadata
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/CharSequenceSubject.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/CharSequenceSubject.kt
similarity index 99%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/CharSequenceSubject.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/CharSequenceSubject.kt
index 0b6238b..2dc842c 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/CharSequenceSubject.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/CharSequenceSubject.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.matchers
+package androidx.compose.ui.text.matchers
 
 import android.text.Spanned
 import com.google.common.truth.Fact.simpleFact
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/ComposeMatchers.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/ComposeMatchers.kt
similarity index 96%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/ComposeMatchers.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/ComposeMatchers.kt
index f7366ae..bec7fcb 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/ComposeMatchers.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/ComposeMatchers.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.matchers
+package androidx.compose.ui.text.matchers
 
 import android.graphics.Bitmap
 import android.graphics.Typeface
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/TypefaceSubject.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/TypefaceSubject.kt
similarity index 95%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/TypefaceSubject.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/TypefaceSubject.kt
index 3a3edbb..7d86827 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/matchers/TypefaceSubject.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/matchers/TypefaceSubject.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.matchers
+package androidx.compose.ui.text.matchers
 
 import android.graphics.Typeface
 import android.os.Build
 import android.text.TextPaint
-import androidx.ui.text.FontTestData
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.matchers.TypefaceSubject.Companion.DEFINED_CHARACTERS
+import androidx.compose.ui.text.FontTestData
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.matchers.TypefaceSubject.Companion.DEFINED_CHARACTERS
 import com.google.common.truth.FailureMetadata
 import com.google.common.truth.Subject
 import com.google.common.truth.Subject.Factory
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidParagraphTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
similarity index 96%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidParagraphTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
index 48c0376..e0cfd35 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidParagraphTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
@@ -1,4 +1,4 @@
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.graphics.Paint
 import android.text.TextPaint
@@ -17,31 +17,33 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.toArgb
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
-import androidx.ui.text.ParagraphConstraints
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TestFontResourceLoader
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.matchers.assertThat
-import androidx.ui.text.platform.style.BaselineShiftSpan
-import androidx.ui.text.platform.style.FontFeatureSpan
-import androidx.ui.text.platform.style.FontSpan
-import androidx.ui.text.platform.style.LetterSpacingSpanEm
-import androidx.ui.text.platform.style.LetterSpacingSpanPx
-import androidx.ui.text.platform.style.ShadowSpan
-import androidx.ui.text.platform.style.SkewXSpan
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
+import androidx.compose.ui.text.ParagraphConstraints
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TestFontResourceLoader
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.android.TextLayout
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.matchers.assertThat
+import androidx.compose.ui.text.android.style.BaselineShiftSpan
+import androidx.compose.ui.text.android.style.FontFeatureSpan
+import androidx.compose.ui.text.android.style.FontSpan
+import androidx.compose.ui.text.android.style.LetterSpacingSpanEm
+import androidx.compose.ui.text.android.style.LetterSpacingSpanPx
+import androidx.compose.ui.text.android.style.ShadowSpan
+import androidx.compose.ui.text.android.style.SkewXSpan
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.Density
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidParagraphTextDirectionTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTextDirectionTest.kt
similarity index 94%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidParagraphTextDirectionTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTextDirectionTest.kt
index f072c75..61365d6 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidParagraphTextDirectionTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTextDirectionTest.kt
@@ -14,11 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.android.LayoutCompat
 import androidx.test.filters.SmallTest
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.style.TextDirection
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.style.TextDirection
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Before
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceCacheTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceCacheTest.kt
similarity index 91%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceCacheTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceCacheTest.kt
index 74daa86..3d04b1d 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceCacheTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceCacheTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.FontTestData
-import androidx.ui.text.matchers.assertThat
+import androidx.compose.ui.text.FontTestData
+import androidx.compose.ui.text.matchers.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.junit.MockitoJUnitRunner
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceSubsetTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceSubsetTest.kt
similarity index 91%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceSubsetTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceSubsetTest.kt
index 92cffca..08a805a 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceSubsetTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceSubsetTest.kt
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.content.Context
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.FontTestData
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.fontFamily
-import androidx.ui.text.matchers.assertThat
+import androidx.compose.ui.text.FontTestData
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.fontFamily
+import androidx.compose.ui.text.matchers.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.junit.MockitoJUnitRunner
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceTest.kt
similarity index 96%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceTest.kt
index 8b66324..c60c98c 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/AndroidTypefaceTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidTypefaceTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.content.Context
 import android.graphics.Typeface
@@ -22,17 +22,17 @@
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.FontTestData
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontMatcher
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.font.font
-import androidx.ui.text.font.fontFamily
-import androidx.ui.text.matchers.assertThat
-import androidx.ui.text.core.test.R
+import androidx.compose.ui.text.FontTestData
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontMatcher
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.font.font
+import androidx.compose.ui.text.font.fontFamily
+import androidx.compose.ui.text.matchers.assertThat
+import androidx.compose.ui.text.test.R
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.eq
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/GenerifFontFamilyCacheTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/GenerifFontFamilyCacheTest.kt
similarity index 84%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/GenerifFontFamilyCacheTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/GenerifFontFamilyCacheTest.kt
index a094134..47e7d9a 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/GenerifFontFamilyCacheTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/GenerifFontFamilyCacheTest.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.matchers.assertThat
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.matchers.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.junit.MockitoJUnitRunner
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/TextTestExtensions.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/TextTestExtensions.kt
similarity index 91%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/TextTestExtensions.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/TextTestExtensions.kt
index d371fe8..175ba72 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/TextTestExtensions.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/TextTestExtensions.kt
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.graphics.Bitmap
 import android.graphics.Canvas
 import android.graphics.Typeface
 import android.text.Layout
 import android.text.TextPaint
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.android.TextLayout
 import kotlin.math.ceil
 
 internal fun AndroidParagraph.bitmap(): Bitmap {
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/TypefaceAdapterTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/TypefaceAdapterTest.kt
similarity index 89%
rename from ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/TypefaceAdapterTest.kt
rename to ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/TypefaceAdapterTest.kt
index 419d336..11e1a26 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/ui/text/platform/TypefaceAdapterTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/TypefaceAdapterTest.kt
@@ -13,42 +13,42 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.graphics.Typeface
 import android.os.Build
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.text.FontTestData.Companion.FONT_100_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_100_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_200_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_200_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_300_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_300_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_400_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_400_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_500_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_500_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_600_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_600_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_700_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_700_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_800_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_800_REGULAR
-import androidx.ui.text.FontTestData.Companion.FONT_900_ITALIC
-import androidx.ui.text.FontTestData.Companion.FONT_900_REGULAR
-import androidx.ui.text.TestFontResourceLoader
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.font
-import androidx.ui.text.font.fontFamily
-import androidx.ui.text.font.FontMatcher
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.matchers.assertThat
-import androidx.ui.text.core.test.R
+import androidx.compose.ui.text.FontTestData.Companion.FONT_100_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_100_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_200_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_200_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_300_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_300_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_400_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_400_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_500_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_500_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_600_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_600_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_700_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_700_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_800_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_800_REGULAR
+import androidx.compose.ui.text.FontTestData.Companion.FONT_900_ITALIC
+import androidx.compose.ui.text.FontTestData.Companion.FONT_900_REGULAR
+import androidx.compose.ui.text.TestFontResourceLoader
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.font
+import androidx.compose.ui.text.font.fontFamily
+import androidx.compose.ui.text.font.FontMatcher
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.matchers.assertThat
+import androidx.compose.ui.text.test.R
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.eq
diff --git a/ui/ui-text-core/src/androidMain/AndroidManifest.xml b/ui/ui-text-core/src/androidMain/AndroidManifest.xml
index 3085d36..39e91c6 100644
--- a/ui/ui-text-core/src/androidMain/AndroidManifest.xml
+++ b/ui/ui-text-core/src/androidMain/AndroidManifest.xml
@@ -14,4 +14,4 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest package="androidx.ui.text.core" />
+<manifest package="androidx.compose.ui.text" />
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/intl/AndroidLocaleDelegate.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidLocaleDelegate.kt
similarity index 98%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/intl/AndroidLocaleDelegate.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidLocaleDelegate.kt
index 35e3ec3..a192a45d 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/intl/AndroidLocaleDelegate.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidLocaleDelegate.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 import androidx.annotation.RequiresApi
 import android.os.LocaleList as AndroidLocaleList
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/intl/AndroidPlatformLocale.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidPlatformLocale.kt
similarity index 95%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/intl/AndroidPlatformLocale.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidPlatformLocale.kt
index 340722c..3bb2d2a 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/intl/AndroidPlatformLocale.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/intl/AndroidPlatformLocale.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 import android.os.Build
 
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidDefaultTypeface.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidDefaultTypeface.kt
similarity index 81%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidDefaultTypeface.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidDefaultTypeface.kt
index 7c0bdf3..8951161 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidDefaultTypeface.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidDefaultTypeface.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.graphics.Typeface
 import android.os.Build
-import androidx.ui.text.font.DefaultFontFamily
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.DefaultFontFamily
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
 
 /**
  * An implementation of [AndroidTypeface] for [DefaultFontFamily]
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidFontListTypeface.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidFontListTypeface.kt
similarity index 89%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidFontListTypeface.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidFontListTypeface.kt
index bab7ef8..a62a522 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidFontListTypeface.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidFontListTypeface.kt
@@ -14,21 +14,21 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.content.Context
 import android.graphics.Typeface
 import android.util.TypedValue
 import androidx.collection.LruCache
 import androidx.core.content.res.ResourcesCompat
-import androidx.ui.text.font.Font
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontListFontFamily
-import androidx.ui.text.font.FontMatcher
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.ResourceFont
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontListFontFamily
+import androidx.compose.ui.text.font.FontMatcher
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.ResourceFont
 import androidx.ui.util.fastForEach
 
 /**
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidGenericFontFamilyTypeface.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidGenericFontFamilyTypeface.kt
similarity index 89%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidGenericFontFamilyTypeface.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidGenericFontFamilyTypeface.kt
index fe3909f..4ded9a9 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidGenericFontFamilyTypeface.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidGenericFontFamilyTypeface.kt
@@ -14,17 +14,17 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.graphics.Typeface
 import android.os.Build
 import androidx.annotation.GuardedBy
 import androidx.collection.SparseArrayCompat
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.GenericFontFamily
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.GenericFontFamily
 
 /**
  * An implementation of [AndroidTypeface] for [GenericFontFamily]
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraph.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
similarity index 89%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraph.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
index af00d7f..cafa3e6 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraph.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
@@ -13,37 +13,39 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.text.Spanned
 import android.text.TextPaint
 import android.text.TextUtils
+import androidx.compose.ui.text.android.InternalPlatformTextApi
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.asComposePath
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.Paragraph
-import androidx.ui.text.ParagraphConstraints
-import androidx.ui.text.ParagraphIntrinsics
-import androidx.ui.text.Placeholder
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.Font
-import androidx.ui.text.platform.LayoutCompat.ALIGN_CENTER
-import androidx.ui.text.platform.LayoutCompat.ALIGN_LEFT
-import androidx.ui.text.platform.LayoutCompat.ALIGN_NORMAL
-import androidx.ui.text.platform.LayoutCompat.ALIGN_OPPOSITE
-import androidx.ui.text.platform.LayoutCompat.ALIGN_RIGHT
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_ALIGNMENT
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_JUSTIFICATION_MODE
-import androidx.ui.text.platform.LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER
-import androidx.ui.text.platform.LayoutCompat.JUSTIFICATION_MODE_INTER_WORD
-import androidx.ui.text.platform.selection.WordBoundary
-import androidx.ui.text.platform.style.PlaceholderSpan
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.Paragraph
+import androidx.compose.ui.text.ParagraphConstraints
+import androidx.compose.ui.text.ParagraphIntrinsics
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_CENTER
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_LEFT
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_NORMAL
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_OPPOSITE
+import androidx.compose.ui.text.android.LayoutCompat.ALIGN_RIGHT
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_ALIGNMENT
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_JUSTIFICATION_MODE
+import androidx.compose.ui.text.android.LayoutCompat.DEFAULT_LINESPACING_MULTIPLIER
+import androidx.compose.ui.text.android.LayoutCompat.JUSTIFICATION_MODE_INTER_WORD
+import androidx.compose.ui.text.android.TextLayout
+import androidx.compose.ui.text.android.selection.WordBoundary
+import androidx.compose.ui.text.android.style.PlaceholderSpan
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Density
 import androidx.ui.geometry.Offset
 import androidx.ui.util.annotation.VisibleForTesting
@@ -208,6 +210,10 @@
     internal val textPaint: TextPaint
         get() = paragraphIntrinsics.textPaint
 
+    override fun getLineForVerticalPosition(vertical: Float): Int {
+        return layout.getLineForVertical(vertical.toInt())
+    }
+
     override fun getOffsetForPosition(position: Offset): Int {
         val line = layout.getLineForVertical(position.y.toInt())
         return layout.getOffsetForHorizontal(line, position.x)
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraphHelper.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphHelper.kt
similarity index 74%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraphHelper.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphHelper.kt
index 6b12724..0dabd95 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraphHelper.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphHelper.kt
@@ -14,17 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.text.SpannableString
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.Placeholder
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.platform.extensions.setLineHeight
-import androidx.ui.text.platform.extensions.setPlaceholders
-import androidx.ui.text.platform.extensions.setSpanStyles
-import androidx.ui.text.platform.extensions.setTextIndent
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.platform.extensions.setLineHeight
+import androidx.compose.ui.text.platform.extensions.setPlaceholders
+import androidx.compose.ui.text.platform.extensions.setSpanStyles
+import androidx.compose.ui.text.platform.extensions.setTextIndent
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.kt
similarity index 87%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.kt
index 1277b38..c38778a 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidParagraphIntrinsics.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.kt
@@ -14,22 +14,25 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.graphics.Paint
 import android.text.TextPaint
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.android.LayoutCompat
+import androidx.compose.ui.text.android.LayoutIntrinsics
 import androidx.core.text.TextUtilsCompat
 import androidx.core.view.ViewCompat
-import androidx.ui.intl.AndroidLocale
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.ParagraphIntrinsics
-import androidx.ui.text.Placeholder
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.Font
-import androidx.ui.text.platform.extensions.applySpanStyle
-import androidx.ui.text.style.TextDirection
+import androidx.compose.ui.text.intl.AndroidLocale
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.ParagraphIntrinsics
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.platform.extensions.applySpanStyle
+import androidx.compose.ui.text.style.TextDirection
 import androidx.ui.unit.Density
 import java.util.Locale
 
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidStringDelegate.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidStringDelegate.kt
similarity index 86%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidStringDelegate.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidStringDelegate.kt
index 02469d3..d5522c5 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidStringDelegate.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidStringDelegate.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
-import androidx.ui.intl.AndroidLocale
-import androidx.ui.intl.PlatformLocale
-import androidx.ui.text.PlatformStringDelegate
+import androidx.compose.ui.text.intl.AndroidLocale
+import androidx.compose.ui.text.intl.PlatformLocale
+import androidx.compose.ui.text.PlatformStringDelegate
 
 /**
  * An Android implementation of StringDelegate
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidTypeface.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTypeface.kt
similarity index 84%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidTypeface.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTypeface.kt
index 359a6ae..f30da6d 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/AndroidTypeface.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidTypeface.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
-import androidx.ui.text.Typeface
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
+import androidx.compose.ui.text.Typeface
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
 import android.graphics.Typeface as NativeTypeface
 
 /**
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/TypefaceAdapter.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/TypefaceAdapter.kt
similarity index 94%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/TypefaceAdapter.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/TypefaceAdapter.kt
index 29c8247f0..a99c794 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/TypefaceAdapter.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/TypefaceAdapter.kt
@@ -14,23 +14,23 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
 import android.content.Context
 import android.graphics.Typeface
 import android.os.Build
 import androidx.collection.LruCache
-import androidx.ui.text.font.DefaultFontFamily
-import androidx.ui.text.font.Font
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontListFontFamily
-import androidx.ui.text.font.FontMatcher
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.GenericFontFamily
-import androidx.ui.text.font.LoadedFontFamily
-import androidx.ui.text.font.font
+import androidx.compose.ui.text.font.DefaultFontFamily
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontListFontFamily
+import androidx.compose.ui.text.font.FontMatcher
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.GenericFontFamily
+import androidx.compose.ui.text.font.LoadedFontFamily
+import androidx.compose.ui.text.font.font
 
 /**
  * Creates a Typeface based on generic font family or a custom [FontFamily].
@@ -274,7 +274,7 @@
     context: Context,
     fontFamily: FontFamily,
     necessaryStyles: List<Pair<FontWeight, FontStyle>>? = null
-): androidx.ui.text.Typeface {
+): androidx.compose.ui.text.Typeface {
     return when (fontFamily) {
         is FontListFontFamily -> AndroidFontListTypeface(fontFamily, context, necessaryStyles)
         is GenericFontFamily -> AndroidGenericFontFamilyTypeface(fontFamily)
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/LocaleExtensions.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/LocaleExtensions.kt
similarity index 82%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/LocaleExtensions.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/LocaleExtensions.kt
index 061c10d..a1b62b4f 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/LocaleExtensions.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/LocaleExtensions.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.extensions
+package androidx.compose.ui.text.platform.extensions
 
 import androidx.annotation.RequiresApi
-import androidx.ui.intl.AndroidLocale
-import androidx.ui.intl.Locale
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.AndroidLocale
+import androidx.compose.ui.text.intl.Locale
+import androidx.compose.ui.text.intl.LocaleList
 
 internal fun Locale.toJavaLocale(): java.util.Locale = (platformLocale as AndroidLocale).javaLocale
 
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/PlaceholderExtensions.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/PlaceholderExtensions.kt
similarity index 89%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/PlaceholderExtensions.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/PlaceholderExtensions.kt
index 45a5674..191691c 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/PlaceholderExtensions.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/PlaceholderExtensions.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.extensions
+package androidx.compose.ui.text.platform.extensions
 
 import android.text.Spannable
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.Placeholder
-import androidx.ui.text.PlaceholderVerticalAlign
-import androidx.ui.text.platform.InternalPlatformTextApi
-import androidx.ui.text.platform.style.PlaceholderSpan
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.PlaceholderVerticalAlign
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.android.style.PlaceholderSpan
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.TextUnitType
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/SpannableExtensions.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.kt
similarity index 88%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/SpannableExtensions.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.kt
index 17387cc..a33f12c 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/SpannableExtensions.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.extensions
+package androidx.compose.ui.text.platform.extensions
 
 import android.graphics.Typeface
 import android.os.Build
@@ -34,29 +34,29 @@
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.isSet
 import androidx.ui.graphics.toArgb
-import androidx.ui.intl.Locale
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.platform.InternalPlatformTextApi
-import androidx.ui.text.platform.TypefaceAdapter
-import androidx.ui.text.platform.style.BaselineShiftSpan
-import androidx.ui.text.platform.style.FontFeatureSpan
-import androidx.ui.text.platform.style.FontSpan
-import androidx.ui.text.platform.style.FontWeightStyleSpan
-import androidx.ui.text.platform.style.LetterSpacingSpanEm
-import androidx.ui.text.platform.style.LetterSpacingSpanPx
-import androidx.ui.text.platform.style.LineHeightSpan
-import androidx.ui.text.platform.style.ShadowSpan
-import androidx.ui.text.platform.style.SkewXSpan
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.intl.Locale
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.android.InternalPlatformTextApi
+import androidx.compose.ui.text.platform.TypefaceAdapter
+import androidx.compose.ui.text.android.style.BaselineShiftSpan
+import androidx.compose.ui.text.android.style.FontFeatureSpan
+import androidx.compose.ui.text.android.style.FontSpan
+import androidx.compose.ui.text.android.style.FontWeightStyleSpan
+import androidx.compose.ui.text.android.style.LetterSpacingSpanEm
+import androidx.compose.ui.text.android.style.LetterSpacingSpanPx
+import androidx.compose.ui.text.android.style.LineHeightSpan
+import androidx.compose.ui.text.android.style.ShadowSpan
+import androidx.compose.ui.text.android.style.SkewXSpan
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.TextUnitType
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/TextPaintExtensions.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.kt
similarity index 88%
rename from ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/TextPaintExtensions.kt
rename to ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.kt
index 0d7fb2c..f8578b9 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/ui/text/platform/extensions/TextPaintExtensions.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform.extensions
+package androidx.compose.ui.text.platform.extensions
 
 import android.graphics.Typeface
 import android.os.Build
@@ -23,17 +23,17 @@
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.isSet
 import androidx.ui.graphics.toArgb
-import androidx.ui.intl.Locale
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.font.FontListFontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.platform.TypefaceAdapter
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.intl.Locale
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.font.FontListFontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.platform.TypefaceAdapter
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.TextUnitType
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/AnnotatedString.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/AnnotatedString.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/AnnotatedString.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/AnnotatedString.kt
index 9b9bfde..16e4427 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/AnnotatedString.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/AnnotatedString.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.AnnotatedString.Builder
-import androidx.ui.text.AnnotatedString.Range
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.AnnotatedString.Builder
+import androidx.compose.ui.text.AnnotatedString.Range
 import androidx.ui.util.fastForEach
 
 /**
@@ -67,7 +67,7 @@
      * between specified paragraph [Range]s, a default paragraph will be created in between.
      *
      * @throws IllegalArgumentException if [paragraphStyles] contains any two overlapping [Range]s.
-     * @sample androidx.ui.text.samples.AnnotatedStringConstructorSample
+     * @sample androidx.compose.ui.text.samples.AnnotatedStringConstructorSample
      *
      * @see SpanStyle
      * @see ParagraphStyle
@@ -149,7 +149,7 @@
      * Builder class for AnnotatedString. Enables construction of an [AnnotatedString] using
      * methods such as [append] and [addStyle].
      *
-     * @sample androidx.ui.text.samples.AnnotatedStringBuilderSample
+     * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderSample
      *
      * @param capacity initial capacity for the internal char buffer
      */
@@ -270,7 +270,7 @@
          * @param start the inclusive starting offset of the range
          * @param end the exclusive end offset of the range
          * @see getStringAnnotations
-         * @sample androidx.ui.text.samples.AnnotatedStringAddStringAnnotationSample
+         * @sample androidx.compose.ui.text.samples.AnnotatedStringAddStringAnnotationSample
          */
         fun addStringAnnotation(scope: String, annotation: String, start: Int, end: Int) {
             annotations.add(MutableRange(annotation, start, end, scope))
@@ -280,7 +280,7 @@
          * Applies the given [SpanStyle] to any appended text until a corresponding [pop] is
          * called.
          *
-         * @sample androidx.ui.text.samples.AnnotatedStringBuilderPushSample
+         * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderPushSample
          *
          * @param style SpanStyle to be applied
          */
@@ -296,7 +296,7 @@
          * Applies the given [ParagraphStyle] to any appended text until a corresponding [pop]
          * is called.
          *
-         * @sample androidx.ui.text.samples.AnnotatedStringBuilderPushParagraphStyleSample
+         * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderPushParagraphStyleSample
          *
          * @param style ParagraphStyle to be applied
          */
@@ -312,7 +312,7 @@
          * Attach the given [annotation] to any appended text until a corresponding [pop]
          * is called.
          *
-         * @sample androidx.ui.text.samples.AnnotatedStringBuilderPushStringAnnotationSample
+         * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderPushStringAnnotationSample
          *
          * @param tag the tag used to distinguish annotations
          * @param annotation the string annotation attached on this AnnotatedString
@@ -581,7 +581,7 @@
 /**
  * Pushes [style] to the [AnnotatedString.Builder], executes [block] and then pops the [style].
  *
- * @sample androidx.ui.text.samples.AnnotatedStringBuilderWithStyleSample
+ * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderWithStyleSample
  *
  * @param style [SpanStyle] to be applied
  * @param block function to be executed
@@ -606,7 +606,7 @@
 /**
  * Pushes [style] to the [AnnotatedString.Builder], executes [block] and then pops the [style].
  *
- * @sample androidx.ui.text.samples.AnnotatedStringBuilderWithStyleSample
+ * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderWithStyleSample
  *
  * @param style [SpanStyle] to be applied
  * @param block function to be executed
@@ -700,7 +700,7 @@
  * Build a new AnnotatedString by populating newly created [AnnotatedString.Builder] provided
  * by [builder].
  *
- * @sample androidx.ui.text.samples.AnnotatedStringBuilderLambdaSample
+ * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderLambdaSample
  *
  * @param builder lambda to modify [AnnotatedString.Builder]
  */
@@ -715,7 +715,7 @@
  * Build a new AnnotatedString by populating newly created [AnnotatedString.Builder] provided
  * by [builder].
  *
- * @sample androidx.ui.text.samples.AnnotatedStringBuilderLambdaSample
+ * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderLambdaSample
  *
  * @param builder lambda to modify [AnnotatedString.Builder]
  */
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/InternalTextApi.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/InternalTextApi.kt
similarity index 96%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/InternalTextApi.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/InternalTextApi.kt
index 807eddc..e0b91a4 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/InternalTextApi.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/InternalTextApi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 @RequiresOptIn(
     level = RequiresOptIn.Level.ERROR,
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/MultiParagraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/MultiParagraph.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
index 9b30ec4..06f00c4 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/MultiParagraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Path
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Density
 import androidx.ui.geometry.Offset
 import androidx.ui.util.fastForEach
@@ -264,6 +264,28 @@
         return path
     }
 
+    /**
+     * Returns line number closest to the given graphical vertical position.
+     * If you ask for a vertical position before 0, you get 0; if you ask for a vertical position
+     * beyond the last line, you get the last line.
+     */
+    fun getLineForVerticalPosition(vertical: Float): Int {
+        val paragraphIndex = when {
+            vertical <= 0f -> 0
+            vertical >= height -> paragraphInfoList.lastIndex
+            else -> findParagraphByY(paragraphInfoList, vertical)
+        }
+        return with(paragraphInfoList[paragraphIndex]) {
+            if (length == 0) {
+                max(0, startIndex - 1)
+            } else {
+                paragraph.getLineForVerticalPosition(
+                    vertical.toLocalYPosition()
+                ).toGlobalLineIndex()
+            }
+        }
+    }
+
     /** Returns the character offset closest to the given graphical position. */
     fun getOffsetForPosition(position: Offset): Int {
         val paragraphIndex = when {
@@ -685,7 +707,7 @@
     }
 
     /**
-     * Convert a local y position relative to [paragraph] to the globla y postiion relative to the
+     * Convert a local y position relative to [paragraph] to the global y position relative to the
      * parent [MultiParagraph].
      */
     fun Float.toGlobalYPosition(): Float {
@@ -693,6 +715,14 @@
     }
 
     /**
+     * Convert a global y position relative to the parent [MultiParagraph] to a local y position
+     * relative to [paragraph].
+     */
+    fun Float.toLocalYPosition(): Float {
+        return this - top
+    }
+
+    /**
      * Convert a [Offset] relative to the parent [MultiParagraph] to the local [Offset]
      * relative to the [paragraph].
      */
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/MultiParagraphIntrinsics.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraphIntrinsics.kt
similarity index 97%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/MultiParagraphIntrinsics.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraphIntrinsics.kt
index 5e08541..5e75b7f 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/MultiParagraphIntrinsics.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraphIntrinsics.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.TextDirection
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.TextDirection
 import androidx.ui.unit.Density
 
 /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Paragraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
similarity index 93%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Paragraph.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
index f0bef7e..ac6c641 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Paragraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
@@ -13,14 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Path
-import androidx.ui.text.font.Font
-import androidx.ui.text.platform.ActualParagraph
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.platform.ActualParagraph
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Density
 import androidx.ui.geometry.Offset
 
@@ -189,6 +189,13 @@
      */
     fun getBidiRunDirection(offset: Int): ResolvedTextDirection
 
+    /**
+     * Returns line number closest to the given graphical vertical position.
+     * If you ask for a vertical position before 0, you get 0; if you ask for a vertical position
+     * beyond the last line, you get the last line.
+     */
+    fun getLineForVerticalPosition(vertical: Float): Int
+
     /** Returns the character offset closest to the given graphical position. */
     fun getOffsetForPosition(position: Offset): Int
 
@@ -217,8 +224,8 @@
  * Lays out a given [text] with the given constraints. A paragraph is a text that has a single
  * [ParagraphStyle].
  *
- * If the [style] does not contain any [androidx.ui.text.style.TextDirection],
- * [androidx.ui.text.style.TextDirection.Content] is used as the default value.
+ * If the [style] does not contain any [androidx.compose.ui.text.style.TextDirection],
+ * [androidx.compose.ui.text.style.TextDirection.Content] is used as the default value.
  *
  * @param text the text to be laid out
  * @param style the [TextStyle] to be applied to the whole text
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphConstraints.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphConstraints.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphConstraints.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphConstraints.kt
index dec867f..dfbbf72 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphConstraints.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphConstraints.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text
+package androidx.compose.ui.text
 
 /**
  * Layout constraints for [Paragraph] objects.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphIntrinsics.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphIntrinsics.kt
similarity index 83%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphIntrinsics.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphIntrinsics.kt
index f230fe0..5878b1d 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphIntrinsics.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphIntrinsics.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.text.font.Font
-import androidx.ui.text.platform.ActualParagraphIntrinsics
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.platform.ActualParagraphIntrinsics
 import androidx.ui.unit.Density
 
 /**
@@ -39,8 +39,8 @@
 /**
  *  Factory method to create a [ParagraphIntrinsics].
  *
- *  If the [style] does not contain any [androidx.ui.text.style.TextDirection],
- * [androidx.ui.text.style.TextDirection.Content] is used as the default value.
+ *  If the [style] does not contain any [androidx.compose.ui.text.style.TextDirection],
+ * [androidx.compose.ui.text.style.TextDirection.Content] is used as the default value.
  *
  * @see ParagraphIntrinsics
  */
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphStyle.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt
similarity index 91%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphStyle.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt
index 8d9c6f9..f251871b 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/ParagraphStyle.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextIndent
-import androidx.ui.text.style.lerp
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextIndent
+import androidx.compose.ui.text.style.lerp
 import androidx.ui.unit.TextUnit
 
 /**
@@ -31,8 +31,8 @@
  * Once a portion of the text is marked with a `ParagraphStyle`, that portion will be separated from
  * the remaining as if a line feed character was added.
  *
- * @sample androidx.ui.text.samples.ParagraphStyleSample
- * @sample androidx.ui.text.samples.ParagraphStyleAnnotatedStringsSample
+ * @sample androidx.compose.ui.text.samples.ParagraphStyleSample
+ * @sample androidx.compose.ui.text.samples.ParagraphStyleAnnotatedStringsSample
  *
  * @param textAlign The alignment of the text within the lines of the paragraph.
  * @param textDirection The algorithm to be used to resolve the final text direction:
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Placeholder.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Placeholder.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Placeholder.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Placeholder.kt
index d778c0b..b9112d2 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Placeholder.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Placeholder.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.compose.Immutable
 import androidx.ui.unit.TextUnit
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/SoftwareKeyboardController.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SoftwareKeyboardController.kt
similarity index 91%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/SoftwareKeyboardController.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SoftwareKeyboardController.kt
index 71fa0c9..1594bd8 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/SoftwareKeyboardController.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SoftwareKeyboardController.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.geometry.Rect
-import androidx.ui.input.InputSessionToken
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.InputSessionToken
+import androidx.compose.ui.text.input.TextInputService
 
 /**
  * Provide software keyboard control.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/SpanStyle.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
similarity index 92%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/SpanStyle.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
index a3d9025..c959d7c 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/SpanStyle.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
@@ -14,24 +14,24 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.lerp
 import androidx.ui.graphics.useOrElse
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.lerp
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.lerp
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.lerp
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.lerp
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.lerp
 
@@ -40,9 +40,9 @@
  * in order to set paragraph level styling such as line height, or text alignment please see
  * [ParagraphStyle].
  *
- * @sample androidx.ui.text.samples.SpanStyleSample
+ * @sample androidx.compose.ui.text.samples.SpanStyleSample
  *
- * @sample androidx.ui.text.samples.AnnotatedStringBuilderSample
+ * @sample androidx.compose.ui.text.samples.AnnotatedStringBuilderSample
  *
  * @param color The text color.
  * @param fontSize The size of glyphs (in logical pixels) to use when painting the text. This
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/String.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/String.kt
similarity index 94%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/String.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/String.kt
index f31ae8e..8261b49 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/String.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/String.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.intl.Locale
-import androidx.ui.intl.LocaleList
-import androidx.ui.intl.PlatformLocale
-import androidx.ui.text.platform.ActualStringDelegate
+import androidx.compose.ui.text.intl.Locale
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.intl.PlatformLocale
+import androidx.compose.ui.text.platform.ActualStringDelegate
 
 /**
  * Interface for providing platform dependent string related operations.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextDelegate.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextDelegate.kt
similarity index 97%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextDelegate.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextDelegate.kt
index f7ddaaa..abff943 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextDelegate.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextDelegate.kt
@@ -14,17 +14,17 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
 import androidx.ui.core.constrain
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Paint
-import androidx.ui.text.TextDelegate.Companion.paint
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.TextDelegate.Companion.paint
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntSize
 import androidx.ui.util.annotation.VisibleForTesting
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextLayoutHelper.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutHelper.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextLayoutHelper.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutHelper.kt
index 8b60c0b..5dffdb5 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextLayoutHelper.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutHelper.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Density
 
 /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextLayoutResult.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
similarity index 87%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextLayoutResult.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
index c68da8a..9e1580d 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextLayoutResult.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Path
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.ResolvedTextDirection
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntSize
 
@@ -148,6 +148,11 @@
     val placeholderRects: List<Rect?> = multiParagraph.placeholderRects
 
     /**
+     * Returns a number of lines of this text layout
+     */
+    val lineCount: Int get() = multiParagraph.lineCount
+
+    /**
      * Returns the end offset of the given line, inclusive.
      *
      * @param lineIndex the line number
@@ -180,6 +185,22 @@
     fun getLineBottom(lineIndex: Int): Float = multiParagraph.getLineBottom(lineIndex)
 
     /**
+     * Returns the left x coordinate of the given line.
+     *
+     * @param lineIndex the line number
+     * @return the line left x coordinate
+     */
+    fun getLineLeft(lineIndex: Int): Float = multiParagraph.getLineLeft(lineIndex)
+
+    /**
+     * Returns the right x coordinate of the given line.
+     *
+     * @param lineIndex the line number
+     * @return the line right x coordinate
+     */
+    fun getLineRight(lineIndex: Int): Float = multiParagraph.getLineRight(lineIndex)
+
+    /**
      * Returns the line number on which the specified text offset appears.
      *
      * If you ask for a position before 0, you get 0; if you ask for a position
@@ -191,6 +212,18 @@
     fun getLineForOffset(offset: Int): Int = multiParagraph.getLineForOffset(offset)
 
     /**
+     * Returns line number closest to the given graphical vertical position.
+     *
+     * If you ask for a vertical position before 0, you get 0; if you ask for a vertical position
+     * beyond the last line, you get the last line.
+     *
+     * @param vertical the vertical position
+     * @return the 0 origin line number.
+     */
+    fun getLineForVerticalPosition(vertical: Float): Int =
+        multiParagraph.getLineForVerticalPosition(vertical)
+
+    /**
      * Get the horizontal position for the specified text [offset].
      *
      * Returns the relative distance from the text starting offset. For example, if the paragraph
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextPainter.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
similarity index 94%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextPainter.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
index 2bedb69..ad8d976 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextPainter.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.style.TextOverflow
 
 object TextPainter {
     /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextRange.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextRange.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
index ecb624c..95f1efe 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextRange.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.compose.Immutable
 import androidx.ui.util.annotation.IntRange
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextStyle.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
similarity index 94%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextStyle.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
index 445aa0c..21bf09cc 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/TextStyle.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
@@ -22,17 +22,17 @@
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.useOrElse
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.sp
 import androidx.ui.util.annotation.VisibleForTesting
@@ -49,7 +49,7 @@
 /**
  * Styling configuration for a `Text`.
  *
- * @sample androidx.ui.text.samples.TextStyleSample
+ * @sample androidx.compose.ui.text.samples.TextStyleSample
  *
  * @param color The text color.
  * @param fontSize The size of glyphs to use when painting the text. This
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Typeface.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Typeface.kt
similarity index 90%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Typeface.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Typeface.kt
index f4ab861..7834fce 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/Typeface.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Typeface.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontFamily
 
 /**
  * A class that can be used for changing the font used in text.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/Font.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/Font.kt
similarity index 83%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/Font.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/Font.kt
index dbb7568..151b6a1 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/Font.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/Font.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
@@ -28,13 +28,13 @@
 interface Font {
     /**
      * The weight of the font. The system uses this to match a font to a font request
-     * that is given in a [androidx.ui.text.SpanStyle].
+     * that is given in a [androidx.compose.ui.text.SpanStyle].
      */
     val weight: FontWeight
 
     /**
      * The style of the font, normal or italic. The system uses this to match a font to a
-     * font request that is given in a [androidx.ui.text.SpanStyle].
+     * font request that is given in a [androidx.compose.ui.text.SpanStyle].
      */
     val style: FontStyle
 
@@ -55,13 +55,13 @@
 /**
  * Defines a font to be used while rendering text with resource ID.
  *
- * @sample androidx.ui.text.samples.CustomFontFamilySample
+ * @sample androidx.compose.ui.text.samples.CustomFontFamilySample
  *
  * @param resId The resource ID of the font file in font resources. i.e. "R.font.myfont".
  * @param weight The weight of the font. The system uses this to match a font to a font request
- * that is given in a [androidx.ui.text.TextStyle].
+ * that is given in a [androidx.compose.ui.text.TextStyle].
  * @param style The style of the font, normal or italic. The system uses this to match a font to a
- * font request that is given in a [androidx.ui.text.TextStyle].
+ * font request that is given in a [androidx.compose.ui.text.TextStyle].
  *
  * @see FontFamily
  */
@@ -76,9 +76,9 @@
  *
  * @param resId The resource ID of the font file in font resources. i.e. "R.font.myfont".
  * @param weight The weight of the font. The system uses this to match a font to a font request
- * that is given in a [androidx.ui.text.SpanStyle].
+ * that is given in a [androidx.compose.ui.text.SpanStyle].
  * @param style The style of the font, normal or italic. The system uses this to match a font to a
- * font request that is given in a [androidx.ui.text.SpanStyle].
+ * font request that is given in a [androidx.compose.ui.text.SpanStyle].
  *
  * @see FontFamily
  */
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontFamily.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontFamily.kt
similarity index 88%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontFamily.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontFamily.kt
index 1a9a765..1e6ca56 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontFamily.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontFamily.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.text.Typeface
+import androidx.compose.ui.text.Typeface
 
 /**
  * The base class of the font families.
@@ -37,7 +37,7 @@
         /**
          * Font family with low contrast and plain stroke endings.
          *
-         * @sample androidx.ui.text.samples.FontFamilySansSerifSample
+         * @sample androidx.compose.ui.text.samples.FontFamilySansSerifSample
          *
          * @see [CSS sans-serif](https://www.w3.org/TR/css-fonts-3/#sans-serif)
          */
@@ -46,7 +46,7 @@
         /**
          * The formal text style for scripts.
          *
-         * @sample androidx.ui.text.samples.FontFamilySerifSample
+         * @sample androidx.compose.ui.text.samples.FontFamilySerifSample
          *
          * @see [CSS serif](https://www.w3.org/TR/css-fonts-3/#serif)
          */
@@ -55,7 +55,7 @@
         /**
          * Font family where glyphs have the same fixed width.
          *
-         * @sample androidx.ui.text.samples.FontFamilyMonospaceSample
+         * @sample androidx.compose.ui.text.samples.FontFamilyMonospaceSample
          *
          * @see [CSS monospace](https://www.w3.org/TR/css-fonts-3/#monospace)
          */
@@ -67,7 +67,7 @@
          * If the device doesn't support this font family, the system will fallback to the
          * default font.
          *
-         * @sample androidx.ui.text.samples.FontFamilyCursiveSample
+         * @sample androidx.compose.ui.text.samples.FontFamilyCursiveSample
          *
          * @see [CSS cursive](https://www.w3.org/TR/css-fonts-3/#cursive)
          */
@@ -88,8 +88,8 @@
 /**
  * Defines a font family with list of [Font].
  *
- * @sample androidx.ui.text.samples.FontFamilySansSerifSample
- * @sample androidx.ui.text.samples.CustomFontFamilySample
+ * @sample androidx.compose.ui.text.samples.FontFamilySansSerifSample
+ * @sample androidx.compose.ui.text.samples.CustomFontFamilySample
  */
 @Immutable
 data class FontListFontFamily(val fonts: List<Font>) : FileBasedFontFamily(), List<Font> by fonts {
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontMatcher.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontMatcher.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontMatcher.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontMatcher.kt
index 452bda3..41851e0 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontMatcher.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontMatcher.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 /**
  * Given a [FontFamily], [FontWeight] and [FontStyle], matches the best font in the [FontFamily]
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontStyle.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontStyle.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontStyle.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontStyle.kt
index 0a5dda8..c7726bb 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontStyle.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontStyle.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 /**
  *  Defines whether the font is [Italic] or [Normal].
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontSynthesis.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontSynthesis.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontSynthesis.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontSynthesis.kt
index 73bc506..a4f63c6 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontSynthesis.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontSynthesis.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 /**
  *  Possible options for font synthesis.
@@ -31,7 +31,7 @@
  *  `FontSynthesis` works the same way as the [CSS font-synthesis](https://www.w3
  *  .org/TR/css-fonts-4/#font-synthesis) property.
  *
- *  @sample androidx.ui.text.samples.FontFamilySynthesisSample
+ *  @sample androidx.compose.ui.text.samples.FontFamilySynthesisSample
  **/
 enum class FontSynthesis {
     /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontWeight.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontWeight.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontWeight.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontWeight.kt
index 72bce00..092fddf 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/font/FontWeight.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontWeight.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditOperation.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditOperation.kt
similarity index 99%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditOperation.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditOperation.kt
index a11a949..5a2bec4 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditOperation.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditOperation.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.ui.util.isSurrogatePair
 import androidx.ui.util.findFollowingBreak
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditProcessor.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditProcessor.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditProcessor.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditProcessor.kt
index fc485f2..b1cd851 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditProcessor.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditProcessor.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 import androidx.ui.util.annotation.VisibleForTesting
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 
 /**
  * The core editing implementation
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditingBuffer.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditingBuffer.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditingBuffer.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditingBuffer.kt
index fc44c74..5c8384e 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/EditingBuffer.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/EditingBuffer.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.TextRange
 
 /**
  * The editing buffer
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/GapBuffer.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/GapBuffer.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt
index 8e83bbc..cdd1313 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/GapBuffer.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/GapBuffer.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 
 private fun String.toCharArray(
     destination: CharArray,
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/ImeAction.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/ImeAction.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/ImeAction.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/ImeAction.kt
index 1f19c4e..530be56 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/ImeAction.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/ImeAction.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 /**
  * Enums used for indicating IME action.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/InputEventListener.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/InputEventListener.kt
similarity index 96%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/InputEventListener.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/InputEventListener.kt
index b43beb1..3ce0b3e 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/InputEventListener.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/InputEventListener.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 /**
  * An interface of listening IME events.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/KeyboardType.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/KeyboardType.kt
similarity index 97%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/KeyboardType.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/KeyboardType.kt
index ee7f088..1978a21 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/KeyboardType.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/KeyboardType.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 /**
  * Enums used for indicating keyboard types
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/TextFieldValue.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
similarity index 94%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/TextFieldValue.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
index 472d244..68611b4 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/TextFieldValue.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
 import androidx.compose.runtime.savedinstancestate.Saver
 import androidx.compose.runtime.savedinstancestate.listSaver
-import androidx.ui.text.TextRange
-import androidx.ui.text.substring
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.substring
 import kotlin.math.max
 import kotlin.math.min
 
@@ -34,8 +34,8 @@
  */
 @Immutable
 @Deprecated(
-    "Please use androidx.ui.input.TextFieldValue instead",
-    ReplaceWith("TextFieldValue", "androidx.ui.input.TextFieldValue")
+    "Please use androidx.compose.ui.text.input.TextFieldValue instead",
+    ReplaceWith("TextFieldValue", "androidx.compose.ui.text.input.TextFieldValue")
 )
 data class EditorValue(
     /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/TextInputService.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
similarity index 98%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/TextInputService.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
index 886fce3..3a2253c 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/TextInputService.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.ui.geometry.Rect
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/VisualTransformation.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/VisualTransformation.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/VisualTransformation.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/VisualTransformation.kt
index 4ea3255..830a58c 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/VisualTransformation.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/VisualTransformation.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 
 /**
  * The map interface used for bidirectional offset mapping from original to transformed text.
@@ -95,13 +95,13 @@
      *  original text   : thisispassword
      *  transformed text: **************
      *
-     *  @sample androidx.ui.text.samples.passwordFilter
+     *  @sample androidx.compose.ui.text.samples.passwordFilter
      *
      * Example: Credit Card Visual Output (inserting hyphens each 4 digits)
      *  original text   : 1234567890123456
      *  transformed text: 1234-5678-9012-3456
      *
-     *  @sample androidx.ui.text.samples.creditCardFilter
+     *  @sample androidx.compose.ui.text.samples.creditCardFilter
      *
      * @param text The original text
      * @return the pair of filtered text and offset translator.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/Locale.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/Locale.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/Locale.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/Locale.kt
index d32e2bc..aa304dd 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/Locale.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/Locale.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 import androidx.compose.Immutable
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
 
 /**
  * A `Locale` object represents a specific geographical, political, or cultural region. An
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/LocaleList.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/LocaleList.kt
similarity index 93%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/LocaleList.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/LocaleList.kt
index dc300f8..2d163a9 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/LocaleList.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/LocaleList.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 import androidx.compose.Immutable
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
 
 /**
  * Defines a list of [Locale] objects.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/PlatformLocale.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/PlatformLocale.kt
similarity index 97%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/PlatformLocale.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/PlatformLocale.kt
index d934ca9..0c99171 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/intl/PlatformLocale.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/PlatformLocale.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.intl
+package androidx.compose.ui.text.intl
 
 /**
  * Interface for providing platform dependent locale object.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/platform/PlatformParagraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformParagraph.kt
similarity index 79%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/platform/PlatformParagraph.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformParagraph.kt
index 92761f5..b7b46b5 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/platform/PlatformParagraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformParagraph.kt
@@ -13,16 +13,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
-import androidx.ui.text.font.Font
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.Paragraph
-import androidx.ui.text.ParagraphIntrinsics
-import androidx.ui.text.ParagraphConstraints
-import androidx.ui.text.Placeholder
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.Paragraph
+import androidx.compose.ui.text.ParagraphIntrinsics
+import androidx.compose.ui.text.ParagraphConstraints
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.Density
 
 // TODO(b/157854677): remove after fixing.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/platform/PlatformString.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformString.kt
similarity index 87%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/platform/PlatformString.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformString.kt
index 6fe3c71..95f3d64 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/platform/PlatformString.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformString.kt
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.compose.ui.text.platform
 
-import androidx.ui.text.PlatformStringDelegate
+import androidx.compose.ui.text.PlatformStringDelegate
 
 internal expect fun ActualStringDelegate(): PlatformStringDelegate
\ No newline at end of file
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/BaselineShift.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/BaselineShift.kt
similarity index 90%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/BaselineShift.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/BaselineShift.kt
index d6d4cb3..ea69620 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/BaselineShift.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/BaselineShift.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
@@ -23,8 +23,8 @@
 /**
  * The amount by which the text is shifted up or down from current the baseline.
  * @constructor
- * @sample androidx.ui.text.samples.BaselineShiftSample
- * @sample androidx.ui.text.samples.BaselineShiftAnnotatedStringSample
+ * @sample androidx.compose.ui.text.samples.BaselineShiftSample
+ * @sample androidx.compose.ui.text.samples.BaselineShiftAnnotatedStringSample
  *
  * @param multiplier shift the baseline by multiplier * (baseline - ascent)
  */
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/ResolvedTextDirection.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/ResolvedTextDirection.kt
similarity index 83%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/ResolvedTextDirection.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/ResolvedTextDirection.kt
index 18da04c..19f57ab 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/ResolvedTextDirection.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/ResolvedTextDirection.kt
@@ -13,14 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 /**
  * Describes the directionality of a text.
  *
  * @see TextDirection
- * @see androidx.ui.text.Paragraph.getParagraphDirection
- * @see androidx.ui.text.Paragraph.getBidiRunDirection
+ * @see androidx.compose.ui.text.Paragraph.getParagraphDirection
+ * @see androidx.compose.ui.text.Paragraph.getBidiRunDirection
  */
 enum class ResolvedTextDirection {
     /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextAlign.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextAlign.kt
similarity index 97%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextAlign.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextAlign.kt
index e34472b..1d46a83 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextAlign.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextAlign.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 /**
  * Defines how to align text horizontally. `TextAlign` controls how text aligns in the space it
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextDecoration.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDecoration.kt
similarity index 87%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextDecoration.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDecoration.kt
index c23d546..b0fb6b6 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextDecoration.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDecoration.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
@@ -31,7 +31,7 @@
         /**
          * Draws a horizontal line below the text.
          *
-         * @sample androidx.ui.text.samples.TextDecorationUnderlineSample
+         * @sample androidx.compose.ui.text.samples.TextDecorationUnderlineSample
          */
         @Stable
         val Underline: TextDecoration = TextDecoration(0x1)
@@ -39,7 +39,7 @@
         /**
          * Draws a horizontal line over the text.
          *
-         * @sample androidx.ui.text.samples.TextDecorationLineThroughSample
+         * @sample androidx.compose.ui.text.samples.TextDecorationLineThroughSample
          */
         @Stable
         val LineThrough: TextDecoration = TextDecoration(0x2)
@@ -47,7 +47,7 @@
         /**
          * Creates a decoration that includes all the given decorations.
          *
-         * @sample androidx.ui.text.samples.TextDecorationCombinedSample
+         * @sample androidx.compose.ui.text.samples.TextDecorationCombinedSample
          *
          * @param decorations The decorations to be added
          */
@@ -62,7 +62,7 @@
     /**
      * Creates a decoration that includes both of the TextDecorations.
      *
-     * @sample androidx.ui.text.samples.TextDecorationCombinedSample
+     * @sample androidx.compose.ui.text.samples.TextDecorationCombinedSample
      */
     operator fun plus(decoration: TextDecoration): TextDecoration {
         return TextDecoration(this.mask or decoration.mask)
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextDirection.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDirection.kt
similarity index 93%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextDirection.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDirection.kt
index 7cd98be..41b0cea 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextDirection.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDirection.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 /**
  * Defines the algorithm to be used while determining the text direction.
@@ -37,7 +37,7 @@
      * character in the text according to the Unicode Bidirectional Algorithm.
      * * If no strong directional character is present, then [androidx.ui.core.LayoutDirection]
      * is used to resolve the final TextDirection.
-     * * if used while creating a Paragraph object, [androidx.ui.intl.LocaleList] will
+     * * if used while creating a Paragraph object, [androidx.compose.ui.text.intl.LocaleList] will
      * be used to resolve the direction as a fallback instead of [androidx.ui.core.LayoutDirection].
      */
     Content,
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextGeometricTransform.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextGeometricTransform.kt
similarity index 97%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextGeometricTransform.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextGeometricTransform.kt
index 2acfb4c..af9b0a4 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextGeometricTransform.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextGeometricTransform.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextIndent.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextIndent.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextIndent.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextIndent.kt
index d54b399..9299bac 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextIndent.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextIndent.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.sp
-import androidx.ui.text.lerpTextUnitInheritable
+import androidx.compose.ui.text.lerpTextUnitInheritable
 
 /**
  * Specify the indentation of a paragraph.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextOverflow.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextOverflow.kt
similarity index 95%
rename from ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextOverflow.kt
rename to ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextOverflow.kt
index dae6a02..8061c84 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/text/style/TextOverflow.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextOverflow.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 /** How overflowing text should be handled. */
 enum class TextOverflow {
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/OWNERS b/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/OWNERS
deleted file mode 100644
index 2552593..0000000
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/ui/input/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-haoyuchang@google.com
-nona@google.com
-qqd@google.com
-siyamed@google.com
diff --git a/ui/ui-text-core/src/jvmMain/kotlin/androidx/ui/text/JvmAnnotatedString.kt b/ui/ui-text-core/src/jvmMain/kotlin/androidx/compose/ui/text/JvmAnnotatedString.kt
similarity index 96%
rename from ui/ui-text-core/src/jvmMain/kotlin/androidx/ui/text/JvmAnnotatedString.kt
rename to ui/ui-text-core/src/jvmMain/kotlin/androidx/compose/ui/text/JvmAnnotatedString.kt
index 531a2f7..4cf0652 100644
--- a/ui/ui-text-core/src/jvmMain/kotlin/androidx/ui/text/JvmAnnotatedString.kt
+++ b/ui/ui-text-core/src/jvmMain/kotlin/androidx/compose/ui/text/JvmAnnotatedString.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.text.AnnotatedString.Range
+import androidx.compose.ui.text.AnnotatedString.Range
 
 import java.util.SortedSet
 
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringBuilderTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringBuilderTest.kt
similarity index 99%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringBuilderTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringBuilderTest.kt
index 77464dd..a4a812f 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringBuilderTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringBuilderTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.graphics.Color
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTest.kt
index d5d7154..3cf0129 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.graphics.Color
-import androidx.ui.text.AnnotatedString.Range
-import androidx.ui.text.style.TextAlign
+import androidx.compose.ui.text.AnnotatedString.Range
+import androidx.compose.ui.text.style.TextAlign
 import androidx.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringTransformTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringTransformTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
index e56d966..e040811 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/AnnotatedStringTransformTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.ui.unit.sp
 import org.junit.Assert.assertEquals
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/MultiParagraphTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/MultiParagraphTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/MultiParagraphTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/MultiParagraphTest.kt
index a2dff3c..bf1b5e1 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/MultiParagraphTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/MultiParagraphTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/ParagraphConstraintsTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphConstraintsTest.kt
similarity index 96%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/ParagraphConstraintsTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphConstraintsTest.kt
index 05e4206..a1d78da 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/ParagraphConstraintsTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphConstraintsTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/ParagraphStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
similarity index 97%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/ParagraphStyleTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
index 50e3d23..abc5710 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/ParagraphStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextIndent
-import androidx.ui.text.style.lerp
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextIndent
+import androidx.compose.ui.text.style.lerp
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.lerp
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/PlaceholderTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/PlaceholderTest.kt
similarity index 97%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/PlaceholderTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/PlaceholderTest.kt
index c1ba745..0c30a03 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/PlaceholderTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/PlaceholderTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/SpanStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
similarity index 97%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/SpanStyleTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
index 68cd687..8818192 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/SpanStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
@@ -14,20 +14,20 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.lerp
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.lerp
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.lerp
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.lerp
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.lerp
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/TextDelegateTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextDelegateTest.kt
similarity index 96%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/TextDelegateTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextDelegateTest.kt
index 5a983a8..e8a55ad 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/TextDelegateTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextDelegateTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.core.LayoutDirection
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/TextInputServiceTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
similarity index 95%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/TextInputServiceTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
index 3aa49e2..1c674611 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/TextInputServiceTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.geometry.Rect
-import androidx.ui.input.ImeAction
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.PlatformTextInputService
-import androidx.ui.input.TextInputService
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.PlatformTextInputService
+import androidx.compose.ui.text.input.TextInputService
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.eq
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/TextLayoutHelperTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextLayoutHelperTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/TextLayoutHelperTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextLayoutHelperTest.kt
index 3fe5bbd..501a6a9 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/TextLayoutHelperTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextLayoutHelperTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.em
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/TextRangeTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextRangeTest.kt
similarity index 99%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/TextRangeTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextRangeTest.kt
index cb4d375..819402c 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/TextRangeTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextRangeTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/TextSpanParagraphStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextSpanParagraphStyleTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/TextSpanParagraphStyleTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextSpanParagraphStyleTest.kt
index 05c2508..da681f7 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/TextSpanParagraphStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextSpanParagraphStyleTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/TextStyleResolveDefaultsTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleResolveDefaultsTest.kt
similarity index 94%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/TextStyleResolveDefaultsTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleResolveDefaultsTest.kt
index 293bf5c..98199ed 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/TextStyleResolveDefaultsTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleResolveDefaultsTest.kt
@@ -14,22 +14,22 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.ui.core.LayoutDirection
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/TextStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
similarity index 97%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/TextStyleTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
index 63fbc12..72e6b20e 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/TextStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
@@ -14,25 +14,25 @@
  * limitations under the License.
  */
 
-package androidx.ui.text
+package androidx.compose.ui.text
 
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.lerp
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontSynthesis
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.lerp
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextDirection
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
-import androidx.ui.text.style.lerp
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontSynthesis
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.lerp
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextDirection
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
+import androidx.compose.ui.text.style.lerp
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontFamilyTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontFamilyTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontFamilyTest.kt
index 67b8850..b00f106 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontFamilyTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontMatcherTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontMatcherTest.kt
similarity index 90%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/font/FontMatcherTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontMatcherTest.kt
index 6dc13a4..5733506 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontMatcherTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontMatcherTest.kt
@@ -14,23 +14,23 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
-import androidx.ui.text.font.FontTestData.Companion.FONT_100_ITALIC
-import androidx.ui.text.font.FontTestData.Companion.FONT_100_REGULAR
-import androidx.ui.text.font.FontTestData.Companion.FONT_200_ITALIC
-import androidx.ui.text.font.FontTestData.Companion.FONT_200_REGULAR
-import androidx.ui.text.font.FontTestData.Companion.FONT_300_ITALIC
-import androidx.ui.text.font.FontTestData.Companion.FONT_300_REGULAR
-import androidx.ui.text.font.FontTestData.Companion.FONT_400_ITALIC
-import androidx.ui.text.font.FontTestData.Companion.FONT_400_REGULAR
-import androidx.ui.text.font.FontTestData.Companion.FONT_500_ITALIC
-import androidx.ui.text.font.FontTestData.Companion.FONT_500_REGULAR
-import androidx.ui.text.font.FontTestData.Companion.FONT_600_ITALIC
-import androidx.ui.text.font.FontTestData.Companion.FONT_600_REGULAR
-import androidx.ui.text.font.FontTestData.Companion.FONT_700_REGULAR
-import androidx.ui.text.font.FontTestData.Companion.FONT_800_ITALIC
-import androidx.ui.text.font.FontTestData.Companion.FONT_800_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_100_ITALIC
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_100_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_200_ITALIC
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_200_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_300_ITALIC
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_300_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_400_ITALIC
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_400_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_500_ITALIC
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_500_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_600_ITALIC
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_600_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_700_REGULAR
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_800_ITALIC
+import androidx.compose.ui.text.font.FontTestData.Companion.FONT_800_REGULAR
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/font/FontTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontTest.kt
index d9c6a70..c1601f5 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontTestData.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontTestData.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/font/FontTestData.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontTestData.kt
index 6a8e978..b763b1f 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontTestData.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontTestData.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 class FontTestData {
     companion object {
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontWeightTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontWeightTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/font/FontWeightTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontWeightTest.kt
index 831fe5d..e309ddb 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/font/FontWeightTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/FontWeightTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/font/LoadedFontFamilyTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/LoadedFontFamilyTest.kt
similarity index 93%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/font/LoadedFontFamilyTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/LoadedFontFamilyTest.kt
index 457ef95..dfc3c0c 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/font/LoadedFontFamilyTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/font/LoadedFontFamilyTest.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.font
+package androidx.compose.ui.text.font
 
-import androidx.ui.text.Typeface
+import androidx.compose.ui.text.Typeface
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/CommitTextEditOpTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/CommitTextEditOpTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/CommitTextEditOpTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/CommitTextEditOpTest.kt
index e9b20fd..554dac7 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/CommitTextEditOpTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/CommitTextEditOpTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/DeleteSurroundingTextEditOpTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/DeleteSurroundingTextEditOpTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/DeleteSurroundingTextEditOpTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/DeleteSurroundingTextEditOpTest.kt
index 40840aa..770665a 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/DeleteSurroundingTextEditOpTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/DeleteSurroundingTextEditOpTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/DeleteSurroundingTextInCodePointsEditOpTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
index 1699039a..6a0ef8d 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/EditProcessorTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
similarity index 94%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/EditProcessorTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
index 877e6b3..dc3e3cd 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/EditProcessorTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/EditProcessorTest.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.TextRange
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
 import com.nhaarman.mockitokotlin2.eq
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/EditingBufferTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/EditingBufferTest.kt
similarity index 99%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/EditingBufferTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/EditingBufferTest.kt
index 28f5bd4..c3cff1c 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/EditingBufferTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/EditingBufferTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/FinishComposingTextEditOpTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/FinishComposingTextEditOpTest.kt
similarity index 94%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/FinishComposingTextEditOpTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/FinishComposingTextEditOpTest.kt
index 9115bac..aa83b85 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/FinishComposingTextEditOpTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/FinishComposingTextEditOpTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/GapBufferTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/GapBufferTest.kt
similarity index 99%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/GapBufferTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/GapBufferTest.kt
index 826bbda..5856efb 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/GapBufferTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/GapBufferTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/PasswordVisualTransformationTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/PasswordVisualTransformationTest.kt
similarity index 94%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/PasswordVisualTransformationTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/PasswordVisualTransformationTest.kt
index 0b95106..6f062f3 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/PasswordVisualTransformationTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/PasswordVisualTransformationTest.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/SetComposingRegionEditOpTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetComposingRegionEditOpTest.kt
similarity index 97%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/SetComposingRegionEditOpTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetComposingRegionEditOpTest.kt
index 549f084..ca05b07 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/SetComposingRegionEditOpTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetComposingRegionEditOpTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/SetComposingTextEditOpTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetComposingTextEditOpTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/SetComposingTextEditOpTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetComposingTextEditOpTest.kt
index b992af58..33bb6b3 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/SetComposingTextEditOpTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetComposingTextEditOpTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/SetSelectionEditOpTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetSelectionEditOpTest.kt
similarity index 97%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/SetSelectionEditOpTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetSelectionEditOpTest.kt
index c696ac5..71fafd5 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/SetSelectionEditOpTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/SetSelectionEditOpTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/input/TextFieldValueTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/TextFieldValueTest.kt
similarity index 96%
rename from ui/ui-text-core/src/test/java/androidx/ui/input/TextFieldValueTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/TextFieldValueTest.kt
index eece874..aba0417 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/input/TextFieldValueTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/input/TextFieldValueTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.input
+package androidx.compose.ui.text.input
 
 import androidx.test.filters.SmallTest
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextRange
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/style/BaselineShiftTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/style/BaselineShiftTest.kt
similarity index 96%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/style/BaselineShiftTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/style/BaselineShiftTest.kt
index 8933082..f29101d 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/style/BaselineShiftTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/style/BaselineShiftTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/ui/text/style/TextDecorationTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/style/TextDecorationTest.kt
similarity index 98%
rename from ui/ui-text-core/src/test/java/androidx/ui/text/style/TextDecorationTest.kt
rename to ui/ui-text-core/src/test/java/androidx/compose/ui/text/style/TextDecorationTest.kt
index be049d9..6fcbdb0 100644
--- a/ui/ui-text-core/src/test/java/androidx/ui/text/style/TextDecorationTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/style/TextDecorationTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.text.style
+package androidx.compose.ui.text.style
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text/api/0.1.0-dev16.txt b/ui/ui-text/api/0.1.0-dev16.txt
index 866fea2..a8b583f 100644
--- a/ui/ui-text/api/0.1.0-dev16.txt
+++ b/ui/ui-text/api/0.1.0-dev16.txt
@@ -2,43 +2,43 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
   public final class InlineTextContent {
-    ctor public InlineTextContent(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
-    method public androidx.ui.text.Placeholder component1();
+    ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
-    method public androidx.ui.text.Placeholder getPlaceholder();
+    method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
 
   public final class InlineTextContentKt {
-    method public static void appendInlineContent(androidx.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
+    method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
   }
 
   public final class TextFieldDelegateKt {
   }
 
   public final class TextSemanticsProperties {
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> getImeAction();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSupportsInputMethods();
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> ImeAction;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SupportsInputMethods;
     field public static final androidx.compose.foundation.text.TextSemanticsProperties INSTANCE;
   }
 
   public final class TextSemanticsPropertiesKt {
-    method public static androidx.ui.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.input.ImeAction p);
+    method public static androidx.compose.ui.text.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.input.ImeAction p);
     method public static void supportsInputMethods(androidx.ui.semantics.SemanticsPropertyReceiver);
   }
 
diff --git a/ui/ui-text/api/current.txt b/ui/ui-text/api/current.txt
index 866fea2..a8b583f 100644
--- a/ui/ui-text/api/current.txt
+++ b/ui/ui-text/api/current.txt
@@ -2,43 +2,43 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
   public final class InlineTextContent {
-    ctor public InlineTextContent(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
-    method public androidx.ui.text.Placeholder component1();
+    ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
-    method public androidx.ui.text.Placeholder getPlaceholder();
+    method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
 
   public final class InlineTextContentKt {
-    method public static void appendInlineContent(androidx.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
+    method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
   }
 
   public final class TextFieldDelegateKt {
   }
 
   public final class TextSemanticsProperties {
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> getImeAction();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSupportsInputMethods();
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> ImeAction;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SupportsInputMethods;
     field public static final androidx.compose.foundation.text.TextSemanticsProperties INSTANCE;
   }
 
   public final class TextSemanticsPropertiesKt {
-    method public static androidx.ui.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.input.ImeAction p);
+    method public static androidx.compose.ui.text.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.input.ImeAction p);
     method public static void supportsInputMethods(androidx.ui.semantics.SemanticsPropertyReceiver);
   }
 
diff --git a/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt
index 866fea2..a8b583f 100644
--- a/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt
@@ -2,43 +2,43 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
   public final class InlineTextContent {
-    ctor public InlineTextContent(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
-    method public androidx.ui.text.Placeholder component1();
+    ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
-    method public androidx.ui.text.Placeholder getPlaceholder();
+    method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
 
   public final class InlineTextContentKt {
-    method public static void appendInlineContent(androidx.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
+    method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
   }
 
   public final class TextFieldDelegateKt {
   }
 
   public final class TextSemanticsProperties {
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> getImeAction();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSupportsInputMethods();
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> ImeAction;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SupportsInputMethods;
     field public static final androidx.compose.foundation.text.TextSemanticsProperties INSTANCE;
   }
 
   public final class TextSemanticsPropertiesKt {
-    method public static androidx.ui.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.input.ImeAction p);
+    method public static androidx.compose.ui.text.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.input.ImeAction p);
     method public static void supportsInputMethods(androidx.ui.semantics.SemanticsPropertyReceiver);
   }
 
diff --git a/ui/ui-text/api/public_plus_experimental_current.txt b/ui/ui-text/api/public_plus_experimental_current.txt
index 866fea2..a8b583f 100644
--- a/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/ui/ui-text/api/public_plus_experimental_current.txt
@@ -2,43 +2,43 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
   public final class InlineTextContent {
-    ctor public InlineTextContent(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
-    method public androidx.ui.text.Placeholder component1();
+    ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
-    method public androidx.ui.text.Placeholder getPlaceholder();
+    method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
 
   public final class InlineTextContentKt {
-    method public static void appendInlineContent(androidx.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
+    method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
   }
 
   public final class TextFieldDelegateKt {
   }
 
   public final class TextSemanticsProperties {
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> getImeAction();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSupportsInputMethods();
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> ImeAction;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SupportsInputMethods;
     field public static final androidx.compose.foundation.text.TextSemanticsProperties INSTANCE;
   }
 
   public final class TextSemanticsPropertiesKt {
-    method public static androidx.ui.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.input.ImeAction p);
+    method public static androidx.compose.ui.text.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.input.ImeAction p);
     method public static void supportsInputMethods(androidx.ui.semantics.SemanticsPropertyReceiver);
   }
 
diff --git a/ui/ui-text/api/restricted_0.1.0-dev16.txt b/ui/ui-text/api/restricted_0.1.0-dev16.txt
index 866fea2..a8b583f 100644
--- a/ui/ui-text/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-text/api/restricted_0.1.0-dev16.txt
@@ -2,43 +2,43 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
   public final class InlineTextContent {
-    ctor public InlineTextContent(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
-    method public androidx.ui.text.Placeholder component1();
+    ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
-    method public androidx.ui.text.Placeholder getPlaceholder();
+    method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
 
   public final class InlineTextContentKt {
-    method public static void appendInlineContent(androidx.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
+    method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
   }
 
   public final class TextFieldDelegateKt {
   }
 
   public final class TextSemanticsProperties {
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> getImeAction();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSupportsInputMethods();
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> ImeAction;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SupportsInputMethods;
     field public static final androidx.compose.foundation.text.TextSemanticsProperties INSTANCE;
   }
 
   public final class TextSemanticsPropertiesKt {
-    method public static androidx.ui.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.input.ImeAction p);
+    method public static androidx.compose.ui.text.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.input.ImeAction p);
     method public static void supportsInputMethods(androidx.ui.semantics.SemanticsPropertyReceiver);
   }
 
diff --git a/ui/ui-text/api/restricted_current.txt b/ui/ui-text/api/restricted_current.txt
index 866fea2..a8b583f 100644
--- a/ui/ui-text/api/restricted_current.txt
+++ b/ui/ui-text/api/restricted_current.txt
@@ -2,43 +2,43 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.EditorValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.ui.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.text.TextStyle textStyle = TextStyle.Default, androidx.ui.input.KeyboardType keyboardType = KeyboardType.Text, androidx.ui.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.ui.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.ui.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.text.TextStyle style, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
   public final class InlineTextContent {
-    ctor public InlineTextContent(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
-    method public androidx.ui.text.Placeholder component1();
+    ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
-    method public androidx.ui.text.Placeholder getPlaceholder();
+    method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
 
   public final class InlineTextContentKt {
-    method public static void appendInlineContent(androidx.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
+    method public static void appendInlineContent(androidx.compose.ui.text.AnnotatedString.Builder, String id, String alternateText = "\ufffd");
   }
 
   public final class TextFieldDelegateKt {
   }
 
   public final class TextSemanticsProperties {
-    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> getImeAction();
+    method public androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> getImeAction();
     method public androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> getSupportsInputMethods();
-    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.ui.input.ImeAction> ImeAction;
+    property public final androidx.ui.semantics.SemanticsPropertyKey<androidx.compose.ui.text.input.ImeAction> ImeAction;
     property public final androidx.ui.semantics.SemanticsPropertyKey<kotlin.Unit> SupportsInputMethods;
     field public static final androidx.compose.foundation.text.TextSemanticsProperties INSTANCE;
   }
 
   public final class TextSemanticsPropertiesKt {
-    method public static androidx.ui.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
-    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.ui.input.ImeAction p);
+    method public static androidx.compose.ui.text.input.ImeAction getImeAction(androidx.ui.semantics.SemanticsPropertyReceiver);
+    method public static void setImeAction(androidx.ui.semantics.SemanticsPropertyReceiver, androidx.compose.ui.text.input.ImeAction p);
     method public static void supportsInputMethods(androidx.ui.semantics.SemanticsPropertyReceiver);
   }
 
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt
index 3273555..cd80fd3 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt
@@ -23,11 +23,11 @@
 import androidx.compose.key
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.state
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
-import androidx.ui.text.SoftwareKeyboardController
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.TextStyle
 
 private val KEYBOARD_TYPES = listOf(
     Pair(KeyboardType.Text, "Text"),
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt
index 7d035dc..07b95db 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt
@@ -24,9 +24,9 @@
 import androidx.compose.state
 import androidx.ui.core.focus.FocusModifier
 import androidx.ui.graphics.Color
-import androidx.ui.input.ImeAction
-import androidx.ui.input.TextFieldValue
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.sp
 
 @Composable
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt
index f9310d7..43e5d69 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt
@@ -21,9 +21,9 @@
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.TextFieldValue
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.sp
 
 @Composable
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt
index b20bf12..cdf1fb5 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt
@@ -19,13 +19,13 @@
 import androidx.compose.Composable
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.ParagraphStyle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextIndent
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.ParagraphStyle
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextIndent
+import androidx.compose.ui.text.withStyle
 import androidx.ui.unit.sp
 
 val lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fermentum non" +
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt
index ebfed32..3e2188a 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt
@@ -27,26 +27,26 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.ui.intl.LocaleList
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.samples.BaselineShiftSample
-import androidx.ui.text.samples.FontFamilyCursiveSample
-import androidx.ui.text.samples.FontFamilyMonospaceSample
-import androidx.ui.text.samples.FontFamilySansSerifSample
-import androidx.ui.text.samples.FontFamilySerifSample
-import androidx.ui.text.samples.ParagraphStyleAnnotatedStringsSample
-import androidx.ui.text.samples.ParagraphStyleSample
-import androidx.ui.text.samples.TextDecorationCombinedSample
-import androidx.ui.text.samples.TextDecorationLineThroughSample
-import androidx.ui.text.samples.TextDecorationUnderlineSample
-import androidx.ui.text.samples.TextStyleSample
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.intl.LocaleList
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.samples.BaselineShiftSample
+import androidx.compose.ui.text.samples.FontFamilyCursiveSample
+import androidx.compose.ui.text.samples.FontFamilyMonospaceSample
+import androidx.compose.ui.text.samples.FontFamilySansSerifSample
+import androidx.compose.ui.text.samples.FontFamilySerifSample
+import androidx.compose.ui.text.samples.ParagraphStyleAnnotatedStringsSample
+import androidx.compose.ui.text.samples.ParagraphStyleSample
+import androidx.compose.ui.text.samples.TextDecorationCombinedSample
+import androidx.compose.ui.text.samples.TextDecorationLineThroughSample
+import androidx.compose.ui.text.samples.TextDecorationUnderlineSample
+import androidx.compose.ui.text.samples.TextStyleSample
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.withStyle
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
 
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt
index 6bf44b0..47a4126 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt
@@ -24,17 +24,17 @@
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
 import androidx.ui.graphics.Color
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.withStyle
 
 @Composable
 fun TextSelectionDemo() {
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt
index 2241a56..1b06f51 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt
@@ -29,10 +29,10 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextStyle
-import androidx.ui.text.annotatedString
-import androidx.ui.text.withStyle
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.annotatedString
+import androidx.compose.ui.text.withStyle
 import androidx.ui.unit.dp
 import androidx.ui.unit.sp
 
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt
index 097a6d2..7126593 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt
@@ -32,20 +32,20 @@
 import androidx.compose.foundation.background
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Color
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.OffsetMap
-import androidx.ui.input.PasswordVisualTransformation
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.TransformedText
-import androidx.ui.input.VisualTransformation
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.OffsetMap
+import androidx.compose.ui.text.input.PasswordVisualTransformation
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.TransformedText
+import androidx.compose.ui.text.input.VisualTransformation
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.toUpperCase
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.toUpperCase
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt
index f2b1f0a..654fe7b 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt
@@ -21,7 +21,7 @@
 import androidx.compose.foundation.ClickableText
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 
 @Composable
 fun InteractiveTextDemo() {
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt
index 2d2eae0..e83fe78 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt
@@ -31,8 +31,8 @@
 import androidx.ui.core.clipToBounds
 import androidx.ui.core.constrainWidth
 import androidx.ui.graphics.Color
-import androidx.ui.input.TextFieldValue
-import androidx.ui.text.TextStyle
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.TextStyle
 import androidx.ui.unit.dp
 import kotlin.math.min
 
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt
index 733faf4..819fd48 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt
@@ -20,7 +20,7 @@
 import androidx.compose.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
diff --git a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt
index ab6821c..ccc5b2c 100644
--- a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt
+++ b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt
@@ -20,7 +20,7 @@
 import androidx.compose.Composable
 import androidx.compose.getValue
 import androidx.compose.setValue
-import androidx.ui.input.TextFieldValue
+import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.foundation.text.CoreTextField
 
diff --git a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt
index 590834c..d56eb3f 100644
--- a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt
+++ b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt
@@ -25,9 +25,9 @@
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.text.InlineTextContent
-import androidx.ui.text.Placeholder
-import androidx.ui.text.PlaceholderVerticalAlign
-import androidx.ui.text.annotatedString
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.PlaceholderVerticalAlign
+import androidx.compose.ui.text.annotatedString
 import androidx.compose.foundation.text.appendInlineContent
 import androidx.ui.unit.em
 
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt
index 1c4bf81..ae0bbe9 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt
@@ -26,17 +26,17 @@
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.OffsetMap
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.TextDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextPainter
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.Font
-import androidx.ui.text.font.ResourceFont
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.OffsetMap
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.TextDelegate
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextPainter
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.ResourceFont
 import androidx.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt
index 9246e31..c0843b2 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt
@@ -26,15 +26,15 @@
 import androidx.ui.core.Ref
 import androidx.ui.core.onPositioned
 import androidx.ui.core.setContent
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.font.font
-import androidx.ui.text.font.test.R
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.font.font
+import androidx.compose.ui.text.font.test.R
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
index c65365f1..9ca1fd5 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
@@ -27,23 +27,23 @@
 import androidx.ui.core.LayoutDirection
 import androidx.ui.core.selection.Selectable
 import androidx.ui.core.selection.Selection
-import androidx.ui.test.android.AndroidComposeTestRule
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.Font
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.ResourceFont
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.font.font
-import androidx.ui.text.font.test.R
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.ui.test.android.createAndroidComposeRule
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextDelegate
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.ResourceFont
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.font.font
+import androidx.compose.ui.text.font.test.R
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Density
 import androidx.ui.geometry.Offset
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.InternalTextApi
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
@@ -65,7 +65,7 @@
 @SmallTest
 class MultiWidgetSelectionDelegateTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     private val fontFamily = BASIC_MEASURE_FONT.asFontFamily()
     private val context = InstrumentationRegistry.getInstrumentation().context
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
index 18e4609..610c2d1 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
@@ -31,17 +31,17 @@
 import androidx.ui.core.selection.Selection
 import androidx.ui.core.selection.SelectionContainer
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.test.android.AndroidComposeTestRule
+import androidx.ui.test.android.createAndroidComposeRule
 import androidx.ui.test.runOnIdle
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.foundation.text.CoreText
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.ResourceFont
-import androidx.ui.text.font.asFontFamily
-import androidx.ui.text.font.test.R
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.ResourceFont
+import androidx.compose.ui.text.font.asFontFamily
+import androidx.compose.ui.text.font.test.R
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
@@ -59,7 +59,7 @@
 @RunWith(JUnit4::class)
 class SelectionContainerTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     private lateinit var view: View
 
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt
index cfda12a..eb3a5c7 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt
@@ -21,15 +21,15 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
-import androidx.ui.test.android.AndroidComposeTestRule
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.asFontFamily
+import androidx.ui.test.android.createAndroidComposeRule
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextDelegate
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.asFontFamily
 import androidx.ui.unit.Density
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.sp
@@ -44,7 +44,7 @@
 @SmallTest
 class TextFieldSelectionDelegateTest {
     @get:Rule
-    val composeTestRule = AndroidComposeTestRule<ComponentActivity>()
+    val composeTestRule = createAndroidComposeRule<ComponentActivity>()
 
     private val fontFamily = BASIC_MEASURE_FONT.asFontFamily()
     private val context = InstrumentationRegistry.getInstrumentation().context
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt
index f18233b..8175c15 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt
@@ -42,19 +42,19 @@
 import androidx.ui.graphics.drawscope.drawCanvas
 import androidx.ui.graphics.Paint
 import androidx.ui.semantics.getTextLayoutResult
-import androidx.ui.text.font.Font
+import androidx.compose.ui.text.font.Font
 import androidx.compose.foundation.text.selection.MultiWidgetSelectionDelegate
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.Placeholder
-import androidx.ui.text.TextDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.length
-import androidx.ui.text.style.TextAlign
-import androidx.ui.text.style.TextOverflow
-import androidx.ui.text.subSequence
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.Placeholder
+import androidx.compose.ui.text.TextDelegate
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.length
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.text.subSequence
 import androidx.ui.unit.Density
 import androidx.ui.util.fastForEach
 import kotlin.math.floor
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
index 1312fb0..11766d1 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
@@ -50,12 +50,12 @@
 import androidx.ui.core.semantics.semantics
 import androidx.ui.geometry.Offset
 import androidx.ui.graphics.drawscope.drawCanvas
-import androidx.ui.input.EditProcessor
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.NO_SESSION
-import androidx.ui.input.VisualTransformation
+import androidx.compose.ui.text.input.EditProcessor
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.NO_SESSION
+import androidx.compose.ui.text.input.VisualTransformation
 import androidx.ui.semantics.onClick
 import androidx.compose.foundation.text.selection.SelectionHandle
 import androidx.compose.foundation.text.selection.TextFieldSelectionManager
@@ -66,24 +66,24 @@
 import androidx.ui.semantics.setText
 import androidx.ui.semantics.text
 import androidx.ui.semantics.textSelectionRange
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.SoftwareKeyboardController
-import androidx.ui.text.TextDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.constrain
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.SoftwareKeyboardController
+import androidx.compose.ui.text.TextDelegate
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.constrain
 import kotlin.math.roundToInt
 
 @Suppress("DEPRECATION")
 @Composable
-@Deprecated("Use the Composable with androidx.ui.input.TextFieldValue instead.")
+@Deprecated("Use the Composable with androidx.compose.ui.text.input.TextFieldValue instead.")
 @OptIn(InternalTextApi::class)
 fun CoreTextField(
-    value: androidx.ui.input.EditorValue,
+    value: androidx.compose.ui.text.input.EditorValue,
     modifier: Modifier,
-    onValueChange: (androidx.ui.input.EditorValue) -> Unit,
+    onValueChange: (androidx.compose.ui.text.input.EditorValue) -> Unit,
     textStyle: TextStyle = TextStyle.Default,
     keyboardType: KeyboardType = KeyboardType.Text,
     imeAction: ImeAction = ImeAction.Unspecified,
@@ -108,7 +108,7 @@
     val onValueChangeWrapper: (TextFieldValue) -> Unit = {
         fullModel.value = it
         onValueChange(
-            androidx.ui.input.EditorValue(
+            androidx.compose.ui.text.input.EditorValue(
                 it.text,
                 it.selection,
                 it.composition
@@ -152,7 +152,7 @@
  * [TextFieldValue] may result in a context reset and end up with input session restart. Such
  * a scenario would cause glitches in the UI or text input experience for users.
  *
- * @param value The [androidx.ui.input.TextFieldValue] to be shown in the [CoreTextField].
+ * @param value The [androidx.compose.ui.text.input.TextFieldValue] to be shown in the [CoreTextField].
  * @param onValueChange Called when the input service updates the values in [TextFieldValue].
  * @param modifier optional [Modifier] for this text field.
  * @param textStyle Style configuration that applies at character level such as color, font etc.
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt
index fd64102..343f014 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.text
 
 import androidx.compose.Composable
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.Placeholder
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.Placeholder
 
 /** The annotation tag used by inline content. */
 internal const val INLINE_CONTENT_TAG = "androidx.compose.foundation.text.inlineContent"
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
index 5d744420..c5bf1e7 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
@@ -25,30 +25,30 @@
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
-import androidx.ui.input.EditOperation
-import androidx.ui.input.EditProcessor
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.FinishComposingTextEditOp
-import androidx.ui.input.INVALID_SESSION
-import androidx.ui.input.ImeAction
-import androidx.ui.input.InputSessionToken
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.OffsetMap
-import androidx.ui.input.SetSelectionEditOp
-import androidx.ui.input.TextInputService
-import androidx.ui.input.TransformedText
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.Paragraph
-import androidx.ui.text.ParagraphConstraints
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextPainter
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.Font
-import androidx.ui.text.style.TextDecoration
+import androidx.compose.ui.text.input.EditOperation
+import androidx.compose.ui.text.input.EditProcessor
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.FinishComposingTextEditOp
+import androidx.compose.ui.text.input.INVALID_SESSION
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.InputSessionToken
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.OffsetMap
+import androidx.compose.ui.text.input.SetSelectionEditOp
+import androidx.compose.ui.text.input.TextInputService
+import androidx.compose.ui.text.input.TransformedText
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.Paragraph
+import androidx.compose.ui.text.ParagraphConstraints
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextDelegate
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextPainter
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.style.TextDecoration
 import androidx.ui.unit.Density
 import kotlin.jvm.JvmStatic
 import kotlin.math.ceil
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextSemanticsProperties.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextSemanticsProperties.kt
index 038a9d4..8a071d5 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextSemanticsProperties.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextSemanticsProperties.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.text
 
-import androidx.ui.input.ImeAction
+import androidx.compose.ui.text.input.ImeAction
 import androidx.ui.semantics.SemanticsPropertyKey
 import androidx.ui.semantics.SemanticsPropertyReceiver
 
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegate.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegate.kt
index e40fbc3..89102a4 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegate.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegate.kt
@@ -21,9 +21,9 @@
 import androidx.ui.core.selection.Selection
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Rect
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
 import kotlin.math.max
 
 internal class MultiWidgetSelectionDelegate(
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegate.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegate.kt
index 812d574..34dc847 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegate.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegate.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.selection
 
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
 
 /**
  * Return selection information for TextField.
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt
index 3cf0da9..54927d2 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt
@@ -31,16 +31,16 @@
 import androidx.ui.core.texttoolbar.TextToolbarStatus
 import androidx.ui.geometry.Offset
 import androidx.ui.geometry.Rect
-import androidx.ui.input.OffsetMap
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.getSelectedText
-import androidx.ui.input.getTextAfterSelection
-import androidx.ui.input.getTextBeforeSelection
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.InternalTextApi
+import androidx.compose.ui.text.input.OffsetMap
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.getSelectedText
+import androidx.compose.ui.text.input.getTextAfterSelection
+import androidx.compose.ui.text.input.getTextBeforeSelection
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.InternalTextApi
 import androidx.compose.foundation.text.TextFieldState
-import androidx.ui.text.TextRange
-import androidx.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.dp
 import kotlin.math.max
 import kotlin.math.min
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionDelegate.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionDelegate.kt
index ccf4e38..1baaef9 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionDelegate.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextSelectionDelegate.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.text.selection
 
 import androidx.ui.geometry.Rect
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
 import androidx.ui.geometry.Offset
 import kotlin.math.max
 
diff --git a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
index 29f16b3..e190488 100644
--- a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
+++ b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
@@ -23,27 +23,27 @@
 import androidx.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
-import androidx.ui.input.CommitTextEditOp
-import androidx.ui.input.EditOperation
-import androidx.ui.input.EditProcessor
-import androidx.ui.input.TextFieldValue
-import androidx.ui.input.FinishComposingTextEditOp
-import androidx.ui.input.ImeAction
-import androidx.ui.input.KeyboardType
-import androidx.ui.input.OffsetMap
-import androidx.ui.input.SetSelectionEditOp
-import androidx.ui.input.TextInputService
-import androidx.ui.input.TransformedText
-import androidx.ui.input.VisualTransformation
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.InternalTextApi
-import androidx.ui.text.MultiParagraphIntrinsics
-import androidx.ui.text.SpanStyle
-import androidx.ui.text.TextDelegate
-import androidx.ui.text.TextLayoutResult
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.style.TextDecoration
+import androidx.compose.ui.text.input.CommitTextEditOp
+import androidx.compose.ui.text.input.EditOperation
+import androidx.compose.ui.text.input.EditProcessor
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.input.FinishComposingTextEditOp
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.OffsetMap
+import androidx.compose.ui.text.input.SetSelectionEditOp
+import androidx.compose.ui.text.input.TextInputService
+import androidx.compose.ui.text.input.TransformedText
+import androidx.compose.ui.text.input.VisualTransformation
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.InternalTextApi
+import androidx.compose.ui.text.MultiParagraphIntrinsics
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextDelegate
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.TextDecoration
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
index 8655c01..372dc4c 100644
--- a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
+++ b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
@@ -25,15 +25,15 @@
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.geometry.Rect
 import androidx.ui.geometry.Offset
-import androidx.ui.input.OffsetMap
-import androidx.ui.input.TextFieldValue
-import androidx.ui.text.AnnotatedString
+import androidx.compose.ui.text.input.OffsetMap
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.foundation.text.TextFieldState
-import androidx.ui.text.TextLayoutInput
-import androidx.ui.text.TextRange
-import androidx.ui.text.TextStyle
-import androidx.ui.text.style.ResolvedTextDirection
-import androidx.ui.text.style.TextOverflow
+import androidx.compose.ui.text.TextLayoutInput
+import androidx.compose.ui.text.TextRange
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.style.ResolvedTextDirection
+import androidx.compose.ui.text.style.TextOverflow
 import androidx.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt
index 0c750e1..211f482a 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt
@@ -32,22 +32,22 @@
 import androidx.ui.graphics.SolidColor
 import androidx.ui.graphics.colorspace.ColorModel
 import androidx.ui.graphics.toArgb
-import androidx.ui.intl.Locale
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.Locale
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.CrossAxisAlignment
 import androidx.compose.foundation.layout.InnerPadding
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontListFontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.ResourceFont
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontListFontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.ResourceFont
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
 import androidx.ui.unit.TextUnit
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt
index 6ee0daa..2061da2 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt
@@ -29,22 +29,22 @@
 import androidx.ui.graphics.Shape
 import androidx.ui.graphics.SolidColor
 import androidx.ui.graphics.toArgb
-import androidx.ui.intl.Locale
-import androidx.ui.intl.LocaleList
+import androidx.compose.ui.text.intl.Locale
+import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.CrossAxisAlignment
 import androidx.compose.foundation.layout.InnerPadding
-import androidx.ui.text.AnnotatedString
-import androidx.ui.text.TextStyle
-import androidx.ui.text.font.FontFamily
-import androidx.ui.text.font.FontListFontFamily
-import androidx.ui.text.font.FontStyle
-import androidx.ui.text.font.FontWeight
-import androidx.ui.text.font.ResourceFont
-import androidx.ui.text.style.BaselineShift
-import androidx.ui.text.style.TextDecoration
-import androidx.ui.text.style.TextGeometricTransform
-import androidx.ui.text.style.TextIndent
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontListFontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.font.ResourceFont
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextGeometricTransform
+import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.tooling.inspector.ParameterType.DimensionDp
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
index f2172af..d4397b5 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/LayoutlibFontResourceLoader.kt
@@ -20,9 +20,8 @@
 import android.graphics.Typeface
 import android.os.Build
 import androidx.annotation.RequiresApi
-import androidx.ui.text.font.Font
-import androidx.ui.text.font.font
-import androidx.ui.text.font.ResourceFont
+import androidx.compose.ui.text.font.Font
+import androidx.compose.ui.text.font.ResourceFont
 
 /**
  * Layoutlib implementation for [Font.ResourceLoader]
diff --git a/work/workmanager-gcm/api/2.5.0-alpha01.txt b/work/workmanager-gcm/api/2.5.0-alpha01.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-gcm/api/2.5.0-alpha01.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-gcm/api/public_plus_experimental_2.5.0-alpha01.txt b/work/workmanager-gcm/api/public_plus_experimental_2.5.0-alpha01.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-gcm/api/public_plus_experimental_2.5.0-alpha01.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-gcm/api/res-2.5.0-alpha01.txt b/work/workmanager-gcm/api/res-2.5.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-gcm/api/res-2.5.0-alpha01.txt
diff --git a/work/workmanager-gcm/api/restricted_2.5.0-alpha01.txt b/work/workmanager-gcm/api/restricted_2.5.0-alpha01.txt
new file mode 100644
index 0000000..da4f6cc
--- /dev/null
+++ b/work/workmanager-gcm/api/restricted_2.5.0-alpha01.txt
@@ -0,0 +1 @@
+// Signature format: 3.0
diff --git a/work/workmanager-ktx/api/2.5.0-alpha01.txt b/work/workmanager-ktx/api/2.5.0-alpha01.txt
new file mode 100644
index 0000000..5406dc3
--- /dev/null
+++ b/work/workmanager-ktx/api/2.5.0-alpha01.txt
@@ -0,0 +1,40 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+    ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+    method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
+    method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+    method public final void onStopped();
+    method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+    property @Deprecated public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+  }
+
+  public final class DataKt {
+    method public static inline <reified T> boolean hasKeyWithValueOfType(androidx.work.Data, String key);
+    method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class ListenableFutureKt {
+  }
+
+  public final class OneTimeWorkRequestKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder! OneTimeWorkRequestBuilder();
+    method public static inline androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+  }
+
+  public final class OperationKt {
+    method public static suspend inline Object? await(androidx.work.Operation, kotlin.coroutines.Continuation<? super androidx.work.Operation.State.SUCCESS> p);
+  }
+
+  public final class PeriodicWorkRequestKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+  }
+
+}
+
diff --git a/work/workmanager-ktx/api/public_plus_experimental_2.5.0-alpha01.txt b/work/workmanager-ktx/api/public_plus_experimental_2.5.0-alpha01.txt
new file mode 100644
index 0000000..5406dc3
--- /dev/null
+++ b/work/workmanager-ktx/api/public_plus_experimental_2.5.0-alpha01.txt
@@ -0,0 +1,40 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+    ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+    method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
+    method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+    method public final void onStopped();
+    method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+    property @Deprecated public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+  }
+
+  public final class DataKt {
+    method public static inline <reified T> boolean hasKeyWithValueOfType(androidx.work.Data, String key);
+    method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class ListenableFutureKt {
+  }
+
+  public final class OneTimeWorkRequestKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder! OneTimeWorkRequestBuilder();
+    method public static inline androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+  }
+
+  public final class OperationKt {
+    method public static suspend inline Object? await(androidx.work.Operation, kotlin.coroutines.Continuation<? super androidx.work.Operation.State.SUCCESS> p);
+  }
+
+  public final class PeriodicWorkRequestKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+  }
+
+}
+
diff --git a/work/workmanager-ktx/api/res-2.5.0-alpha01.txt b/work/workmanager-ktx/api/res-2.5.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-ktx/api/res-2.5.0-alpha01.txt
diff --git a/work/workmanager-ktx/api/restricted_2.5.0-alpha01.txt b/work/workmanager-ktx/api/restricted_2.5.0-alpha01.txt
new file mode 100644
index 0000000..5406dc3
--- /dev/null
+++ b/work/workmanager-ktx/api/restricted_2.5.0-alpha01.txt
@@ -0,0 +1,40 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class CoroutineWorker extends androidx.work.ListenableWorker {
+    ctor public CoroutineWorker(android.content.Context appContext, androidx.work.WorkerParameters params);
+    method public abstract suspend Object? doWork(kotlin.coroutines.Continuation<? super androidx.work.ListenableWorker.Result> p);
+    method @Deprecated public kotlinx.coroutines.CoroutineDispatcher getCoroutineContext();
+    method public final void onStopped();
+    method public final suspend Object? setForeground(androidx.work.ForegroundInfo foregroundInfo, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public final suspend Object? setProgress(androidx.work.Data data, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result> startWork();
+    property @Deprecated public kotlinx.coroutines.CoroutineDispatcher coroutineContext;
+  }
+
+  public final class DataKt {
+    method public static inline <reified T> boolean hasKeyWithValueOfType(androidx.work.Data, String key);
+    method public static inline androidx.work.Data workDataOf(kotlin.Pair<java.lang.String,?>... pairs);
+  }
+
+  public final class ListenableFutureKt {
+  }
+
+  public final class OneTimeWorkRequestKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.OneTimeWorkRequest.Builder! OneTimeWorkRequestBuilder();
+    method public static inline androidx.work.OneTimeWorkRequest.Builder setInputMerger(androidx.work.OneTimeWorkRequest.Builder, kotlin.reflect.KClass<? extends androidx.work.InputMerger> inputMerger);
+  }
+
+  public final class OperationKt {
+    method public static suspend inline Object? await(androidx.work.Operation, kotlin.coroutines.Continuation<? super androidx.work.Operation.State.SUCCESS> p);
+  }
+
+  public final class PeriodicWorkRequestKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration repeatInterval);
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(long repeatInterval, java.util.concurrent.TimeUnit repeatIntervalTimeUnit, long flexTimeInterval, java.util.concurrent.TimeUnit flexTimeIntervalUnit);
+    method @RequiresApi(26) public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.PeriodicWorkRequest.Builder! PeriodicWorkRequestBuilder(java.time.Duration repeatInterval, java.time.Duration flexTimeInterval);
+  }
+
+}
+
diff --git a/work/workmanager-rxjava2/api/2.5.0-alpha01.txt b/work/workmanager-rxjava2/api/2.5.0-alpha01.txt
new file mode 100644
index 0000000..8764610
--- /dev/null
+++ b/work/workmanager-rxjava2/api/2.5.0-alpha01.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class RxWorker extends androidx.work.ListenableWorker {
+    ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+    method @MainThread public abstract io.reactivex.Single<androidx.work.ListenableWorker.Result!> createWork();
+    method protected io.reactivex.Scheduler getBackgroundScheduler();
+    method public final io.reactivex.Completable setCompletableProgress(androidx.work.Data);
+    method @Deprecated public final io.reactivex.Single<java.lang.Void!> setProgress(androidx.work.Data);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+}
+
diff --git a/work/workmanager-rxjava2/api/public_plus_experimental_2.5.0-alpha01.txt b/work/workmanager-rxjava2/api/public_plus_experimental_2.5.0-alpha01.txt
new file mode 100644
index 0000000..8764610
--- /dev/null
+++ b/work/workmanager-rxjava2/api/public_plus_experimental_2.5.0-alpha01.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class RxWorker extends androidx.work.ListenableWorker {
+    ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+    method @MainThread public abstract io.reactivex.Single<androidx.work.ListenableWorker.Result!> createWork();
+    method protected io.reactivex.Scheduler getBackgroundScheduler();
+    method public final io.reactivex.Completable setCompletableProgress(androidx.work.Data);
+    method @Deprecated public final io.reactivex.Single<java.lang.Void!> setProgress(androidx.work.Data);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+}
+
diff --git a/work/workmanager-rxjava2/api/res-2.5.0-alpha01.txt b/work/workmanager-rxjava2/api/res-2.5.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-rxjava2/api/res-2.5.0-alpha01.txt
diff --git a/work/workmanager-rxjava2/api/restricted_2.5.0-alpha01.txt b/work/workmanager-rxjava2/api/restricted_2.5.0-alpha01.txt
new file mode 100644
index 0000000..8764610
--- /dev/null
+++ b/work/workmanager-rxjava2/api/restricted_2.5.0-alpha01.txt
@@ -0,0 +1,14 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public abstract class RxWorker extends androidx.work.ListenableWorker {
+    ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+    method @MainThread public abstract io.reactivex.Single<androidx.work.ListenableWorker.Result!> createWork();
+    method protected io.reactivex.Scheduler getBackgroundScheduler();
+    method public final io.reactivex.Completable setCompletableProgress(androidx.work.Data);
+    method @Deprecated public final io.reactivex.Single<java.lang.Void!> setProgress(androidx.work.Data);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+}
+
diff --git a/work/workmanager-rxjava3/api/2.5.0-alpha01.txt b/work/workmanager-rxjava3/api/2.5.0-alpha01.txt
new file mode 100644
index 0000000..be6440d
--- /dev/null
+++ b/work/workmanager-rxjava3/api/2.5.0-alpha01.txt
@@ -0,0 +1,13 @@
+// Signature format: 3.0
+package androidx.work.rxjava3 {
+
+  public abstract class RxWorker extends androidx.work.ListenableWorker {
+    ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+    method @MainThread public abstract io.reactivex.rxjava3.core.Single<androidx.work.ListenableWorker.Result!> createWork();
+    method protected io.reactivex.rxjava3.core.Scheduler getBackgroundScheduler();
+    method public final io.reactivex.rxjava3.core.Completable setCompletableProgress(androidx.work.Data);
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+}
+
diff --git a/work/workmanager-rxjava3/api/public_plus_experimental_2.5.0-alpha01.txt b/work/workmanager-rxjava3/api/public_plus_experimental_2.5.0-alpha01.txt
new file mode 100644
index 0000000..be6440d
--- /dev/null
+++ b/work/workmanager-rxjava3/api/public_plus_experimental_2.5.0-alpha01.txt
@@ -0,0 +1,13 @@
+// Signature format: 3.0
+package androidx.work.rxjava3 {
+
+  public abstract class RxWorker extends androidx.work.ListenableWorker {
+    ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+    method @MainThread public abstract io.reactivex.rxjava3.core.Single<androidx.work.ListenableWorker.Result!> createWork();
+    method protected io.reactivex.rxjava3.core.Scheduler getBackgroundScheduler();
+    method public final io.reactivex.rxjava3.core.Completable setCompletableProgress(androidx.work.Data);
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+}
+
diff --git a/work/workmanager-rxjava3/api/res-2.5.0-alpha01.txt b/work/workmanager-rxjava3/api/res-2.5.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-rxjava3/api/res-2.5.0-alpha01.txt
diff --git a/work/workmanager-rxjava3/api/restricted_2.5.0-alpha01.txt b/work/workmanager-rxjava3/api/restricted_2.5.0-alpha01.txt
new file mode 100644
index 0000000..be6440d
--- /dev/null
+++ b/work/workmanager-rxjava3/api/restricted_2.5.0-alpha01.txt
@@ -0,0 +1,13 @@
+// Signature format: 3.0
+package androidx.work.rxjava3 {
+
+  public abstract class RxWorker extends androidx.work.ListenableWorker {
+    ctor public RxWorker(android.content.Context, androidx.work.WorkerParameters);
+    method @MainThread public abstract io.reactivex.rxjava3.core.Single<androidx.work.ListenableWorker.Result!> createWork();
+    method protected io.reactivex.rxjava3.core.Scheduler getBackgroundScheduler();
+    method public final io.reactivex.rxjava3.core.Completable setCompletableProgress(androidx.work.Data);
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+}
+
diff --git a/work/workmanager-testing/api/2.5.0-alpha01.txt b/work/workmanager-testing/api/2.5.0-alpha01.txt
new file mode 100644
index 0000000..e49fe25
--- /dev/null
+++ b/work/workmanager-testing/api/2.5.0-alpha01.txt
@@ -0,0 +1,52 @@
+// Signature format: 3.0
+package androidx.work.testing {
+
+  public class SynchronousExecutor implements java.util.concurrent.Executor {
+    ctor public SynchronousExecutor();
+    method public void execute(Runnable);
+  }
+
+  public interface TestDriver {
+    method public void setAllConstraintsMet(java.util.UUID);
+    method public void setInitialDelayMet(java.util.UUID);
+    method public void setPeriodDelayMet(java.util.UUID);
+  }
+
+  public class TestListenableWorkerBuilder<W extends androidx.work.ListenableWorker> {
+    method public W build();
+    method public static androidx.work.testing.TestListenableWorkerBuilder from(android.content.Context, androidx.work.WorkRequest);
+    method public static <W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W!> from(android.content.Context, Class<W!>);
+    method public androidx.work.testing.TestListenableWorkerBuilder setForegroundUpdater(androidx.work.ForegroundUpdater);
+    method public androidx.work.testing.TestListenableWorkerBuilder setId(java.util.UUID);
+    method public androidx.work.testing.TestListenableWorkerBuilder setInputData(androidx.work.Data);
+    method @RequiresApi(28) public androidx.work.testing.TestListenableWorkerBuilder setNetwork(android.net.Network);
+    method public androidx.work.testing.TestListenableWorkerBuilder setProgressUpdater(androidx.work.ProgressUpdater);
+    method public androidx.work.testing.TestListenableWorkerBuilder setRunAttemptCount(int);
+    method public androidx.work.testing.TestListenableWorkerBuilder setTags(java.util.List<java.lang.String!>);
+    method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentAuthorities(java.util.List<java.lang.String!>);
+    method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentUris(java.util.List<android.net.Uri!>);
+    method public androidx.work.testing.TestListenableWorkerBuilder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public final class TestListenableWorkerBuilderKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W>! TestListenableWorkerBuilder(android.content.Context context, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<? extends java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<? extends java.lang.String> triggeredContentAuthorities = emptyList());
+  }
+
+  public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
+    method public static androidx.work.testing.TestWorkerBuilder<? extends androidx.work.Worker> from(android.content.Context, androidx.work.WorkRequest, java.util.concurrent.Executor);
+    method public static <W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W!> from(android.content.Context, Class<W!>, java.util.concurrent.Executor);
+  }
+
+  public final class TestWorkerBuilderKt {
+    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W>! TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<? extends java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<? extends java.lang.String> triggeredContentAuthorities = emptyList());
+  }
+
+  public final class WorkManagerTestInitHelper {
+    method @Deprecated public static androidx.work.testing.TestDriver? getTestDriver();
+    method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+  }
+
+}
+
diff --git a/work/workmanager-testing/api/public_plus_experimental_2.5.0-alpha01.txt b/work/workmanager-testing/api/public_plus_experimental_2.5.0-alpha01.txt
new file mode 100644
index 0000000..e49fe25
--- /dev/null
+++ b/work/workmanager-testing/api/public_plus_experimental_2.5.0-alpha01.txt
@@ -0,0 +1,52 @@
+// Signature format: 3.0
+package androidx.work.testing {
+
+  public class SynchronousExecutor implements java.util.concurrent.Executor {
+    ctor public SynchronousExecutor();
+    method public void execute(Runnable);
+  }
+
+  public interface TestDriver {
+    method public void setAllConstraintsMet(java.util.UUID);
+    method public void setInitialDelayMet(java.util.UUID);
+    method public void setPeriodDelayMet(java.util.UUID);
+  }
+
+  public class TestListenableWorkerBuilder<W extends androidx.work.ListenableWorker> {
+    method public W build();
+    method public static androidx.work.testing.TestListenableWorkerBuilder from(android.content.Context, androidx.work.WorkRequest);
+    method public static <W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W!> from(android.content.Context, Class<W!>);
+    method public androidx.work.testing.TestListenableWorkerBuilder setForegroundUpdater(androidx.work.ForegroundUpdater);
+    method public androidx.work.testing.TestListenableWorkerBuilder setId(java.util.UUID);
+    method public androidx.work.testing.TestListenableWorkerBuilder setInputData(androidx.work.Data);
+    method @RequiresApi(28) public androidx.work.testing.TestListenableWorkerBuilder setNetwork(android.net.Network);
+    method public androidx.work.testing.TestListenableWorkerBuilder setProgressUpdater(androidx.work.ProgressUpdater);
+    method public androidx.work.testing.TestListenableWorkerBuilder setRunAttemptCount(int);
+    method public androidx.work.testing.TestListenableWorkerBuilder setTags(java.util.List<java.lang.String!>);
+    method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentAuthorities(java.util.List<java.lang.String!>);
+    method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentUris(java.util.List<android.net.Uri!>);
+    method public androidx.work.testing.TestListenableWorkerBuilder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public final class TestListenableWorkerBuilderKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W>! TestListenableWorkerBuilder(android.content.Context context, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<? extends java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<? extends java.lang.String> triggeredContentAuthorities = emptyList());
+  }
+
+  public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
+    method public static androidx.work.testing.TestWorkerBuilder<? extends androidx.work.Worker> from(android.content.Context, androidx.work.WorkRequest, java.util.concurrent.Executor);
+    method public static <W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W!> from(android.content.Context, Class<W!>, java.util.concurrent.Executor);
+  }
+
+  public final class TestWorkerBuilderKt {
+    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W>! TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<? extends java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<? extends java.lang.String> triggeredContentAuthorities = emptyList());
+  }
+
+  public final class WorkManagerTestInitHelper {
+    method @Deprecated public static androidx.work.testing.TestDriver? getTestDriver();
+    method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+  }
+
+}
+
diff --git a/work/workmanager-testing/api/res-2.5.0-alpha01.txt b/work/workmanager-testing/api/res-2.5.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager-testing/api/res-2.5.0-alpha01.txt
diff --git a/work/workmanager-testing/api/restricted_2.5.0-alpha01.txt b/work/workmanager-testing/api/restricted_2.5.0-alpha01.txt
new file mode 100644
index 0000000..e49fe25
--- /dev/null
+++ b/work/workmanager-testing/api/restricted_2.5.0-alpha01.txt
@@ -0,0 +1,52 @@
+// Signature format: 3.0
+package androidx.work.testing {
+
+  public class SynchronousExecutor implements java.util.concurrent.Executor {
+    ctor public SynchronousExecutor();
+    method public void execute(Runnable);
+  }
+
+  public interface TestDriver {
+    method public void setAllConstraintsMet(java.util.UUID);
+    method public void setInitialDelayMet(java.util.UUID);
+    method public void setPeriodDelayMet(java.util.UUID);
+  }
+
+  public class TestListenableWorkerBuilder<W extends androidx.work.ListenableWorker> {
+    method public W build();
+    method public static androidx.work.testing.TestListenableWorkerBuilder from(android.content.Context, androidx.work.WorkRequest);
+    method public static <W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W!> from(android.content.Context, Class<W!>);
+    method public androidx.work.testing.TestListenableWorkerBuilder setForegroundUpdater(androidx.work.ForegroundUpdater);
+    method public androidx.work.testing.TestListenableWorkerBuilder setId(java.util.UUID);
+    method public androidx.work.testing.TestListenableWorkerBuilder setInputData(androidx.work.Data);
+    method @RequiresApi(28) public androidx.work.testing.TestListenableWorkerBuilder setNetwork(android.net.Network);
+    method public androidx.work.testing.TestListenableWorkerBuilder setProgressUpdater(androidx.work.ProgressUpdater);
+    method public androidx.work.testing.TestListenableWorkerBuilder setRunAttemptCount(int);
+    method public androidx.work.testing.TestListenableWorkerBuilder setTags(java.util.List<java.lang.String!>);
+    method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentAuthorities(java.util.List<java.lang.String!>);
+    method @RequiresApi(24) public androidx.work.testing.TestListenableWorkerBuilder setTriggeredContentUris(java.util.List<android.net.Uri!>);
+    method public androidx.work.testing.TestListenableWorkerBuilder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public final class TestListenableWorkerBuilderKt {
+    method public static inline <reified W extends androidx.work.ListenableWorker> androidx.work.testing.TestListenableWorkerBuilder<W>! TestListenableWorkerBuilder(android.content.Context context, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<? extends java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<? extends java.lang.String> triggeredContentAuthorities = emptyList());
+  }
+
+  public class TestWorkerBuilder<W extends androidx.work.Worker> extends androidx.work.testing.TestListenableWorkerBuilder<W> {
+    method public static androidx.work.testing.TestWorkerBuilder<? extends androidx.work.Worker> from(android.content.Context, androidx.work.WorkRequest, java.util.concurrent.Executor);
+    method public static <W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W!> from(android.content.Context, Class<W!>, java.util.concurrent.Executor);
+  }
+
+  public final class TestWorkerBuilderKt {
+    method public static inline <reified W extends androidx.work.Worker> androidx.work.testing.TestWorkerBuilder<W>! TestWorkerBuilder(android.content.Context context, java.util.concurrent.Executor executor, androidx.work.Data inputData = androidx.work.Data.EMPTY, java.util.List<? extends java.lang.String> tags = emptyList(), int runAttemptCount = 1, java.util.List<? extends android.net.Uri> triggeredContentUris = emptyList(), java.util.List<? extends java.lang.String> triggeredContentAuthorities = emptyList());
+  }
+
+  public final class WorkManagerTestInitHelper {
+    method @Deprecated public static androidx.work.testing.TestDriver? getTestDriver();
+    method public static androidx.work.testing.TestDriver? getTestDriver(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context);
+    method public static void initializeTestWorkManager(android.content.Context, androidx.work.Configuration);
+  }
+
+}
+
diff --git a/work/workmanager/api/2.5.0-alpha01.txt b/work/workmanager/api/2.5.0-alpha01.txt
new file mode 100644
index 0000000..6c0ce36
--- /dev/null
+++ b/work/workmanager/api/2.5.0-alpha01.txt
@@ -0,0 +1,358 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public final class ArrayCreatingInputMerger extends androidx.work.InputMerger {
+    ctor public ArrayCreatingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public enum BackoffPolicy {
+    enum_constant public static final androidx.work.BackoffPolicy EXPONENTIAL;
+    enum_constant public static final androidx.work.BackoffPolicy LINEAR;
+  }
+
+  public final class Configuration {
+    method public java.util.concurrent.Executor getExecutor();
+    method public androidx.work.InputMergerFactory getInputMergerFactory();
+    method public int getMaxJobSchedulerId();
+    method public int getMinJobSchedulerId();
+    method public androidx.work.RunnableScheduler getRunnableScheduler();
+    method public java.util.concurrent.Executor getTaskExecutor();
+    method public androidx.work.WorkerFactory getWorkerFactory();
+    field public static final int MIN_SCHEDULER_LIMIT = 20; // 0x14
+  }
+
+  public static final class Configuration.Builder {
+    ctor public Configuration.Builder();
+    method public androidx.work.Configuration build();
+    method public androidx.work.Configuration.Builder setExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setInputMergerFactory(androidx.work.InputMergerFactory);
+    method public androidx.work.Configuration.Builder setJobSchedulerJobIdRange(int, int);
+    method public androidx.work.Configuration.Builder setMaxSchedulerLimit(int);
+    method public androidx.work.Configuration.Builder setMinimumLoggingLevel(int);
+    method public androidx.work.Configuration.Builder setRunnableScheduler(androidx.work.RunnableScheduler);
+    method public androidx.work.Configuration.Builder setTaskExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public static interface Configuration.Provider {
+    method public androidx.work.Configuration getWorkManagerConfiguration();
+  }
+
+  public final class Constraints {
+    ctor public Constraints(androidx.work.Constraints);
+    method public androidx.work.NetworkType getRequiredNetworkType();
+    method public boolean requiresBatteryNotLow();
+    method public boolean requiresCharging();
+    method @RequiresApi(23) public boolean requiresDeviceIdle();
+    method public boolean requiresStorageNotLow();
+    field public static final androidx.work.Constraints NONE;
+  }
+
+  public static final class Constraints.Builder {
+    ctor public Constraints.Builder();
+    method @RequiresApi(24) public androidx.work.Constraints.Builder addContentUriTrigger(android.net.Uri, boolean);
+    method public androidx.work.Constraints build();
+    method public androidx.work.Constraints.Builder setRequiredNetworkType(androidx.work.NetworkType);
+    method public androidx.work.Constraints.Builder setRequiresBatteryNotLow(boolean);
+    method public androidx.work.Constraints.Builder setRequiresCharging(boolean);
+    method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean);
+    method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration!);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration!);
+  }
+
+  public final class Data {
+    ctor public Data(androidx.work.Data);
+    method @androidx.room.TypeConverter public static androidx.work.Data fromByteArray(byte[]);
+    method public boolean getBoolean(String, boolean);
+    method public boolean[]? getBooleanArray(String);
+    method public byte getByte(String, byte);
+    method public byte[]? getByteArray(String);
+    method public double getDouble(String, double);
+    method public double[]? getDoubleArray(String);
+    method public float getFloat(String, float);
+    method public float[]? getFloatArray(String);
+    method public int getInt(String, int);
+    method public int[]? getIntArray(String);
+    method public java.util.Map<java.lang.String!,java.lang.Object!> getKeyValueMap();
+    method public long getLong(String, long);
+    method public long[]? getLongArray(String);
+    method public String? getString(String);
+    method public String![]? getStringArray(String);
+    method public <T> boolean hasKeyWithValueOfType(String, Class<T!>);
+    method public byte[] toByteArray();
+    field public static final androidx.work.Data EMPTY;
+    field public static final int MAX_DATA_BYTES = 10240; // 0x2800
+  }
+
+  public static final class Data.Builder {
+    ctor public Data.Builder();
+    method public androidx.work.Data build();
+    method public androidx.work.Data.Builder putAll(androidx.work.Data);
+    method public androidx.work.Data.Builder putAll(java.util.Map<java.lang.String!,java.lang.Object!>);
+    method public androidx.work.Data.Builder putBoolean(String, boolean);
+    method public androidx.work.Data.Builder putBooleanArray(String, boolean[]);
+    method public androidx.work.Data.Builder putByte(String, byte);
+    method public androidx.work.Data.Builder putByteArray(String, byte[]);
+    method public androidx.work.Data.Builder putDouble(String, double);
+    method public androidx.work.Data.Builder putDoubleArray(String, double[]);
+    method public androidx.work.Data.Builder putFloat(String, float);
+    method public androidx.work.Data.Builder putFloatArray(String, float[]);
+    method public androidx.work.Data.Builder putInt(String, int);
+    method public androidx.work.Data.Builder putIntArray(String, int[]);
+    method public androidx.work.Data.Builder putLong(String, long);
+    method public androidx.work.Data.Builder putLongArray(String, long[]);
+    method public androidx.work.Data.Builder putString(String, String?);
+    method public androidx.work.Data.Builder putStringArray(String, String![]);
+  }
+
+  public class DelegatingWorkerFactory extends androidx.work.WorkerFactory {
+    ctor public DelegatingWorkerFactory();
+    method public final void addFactory(androidx.work.WorkerFactory);
+    method public final androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public enum ExistingPeriodicWorkPolicy {
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy REPLACE;
+  }
+
+  public enum ExistingWorkPolicy {
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND;
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND_OR_REPLACE;
+    enum_constant public static final androidx.work.ExistingWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
+  }
+
+  public final class ForegroundInfo {
+    ctor public ForegroundInfo(int, android.app.Notification);
+    ctor public ForegroundInfo(int, android.app.Notification, int);
+    method public int getForegroundServiceType();
+    method public android.app.Notification getNotification();
+    method public int getNotificationId();
+  }
+
+  public interface ForegroundUpdater {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(android.content.Context, java.util.UUID, androidx.work.ForegroundInfo);
+  }
+
+  public abstract class InputMerger {
+    ctor public InputMerger();
+    method public abstract androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public abstract class InputMergerFactory {
+    ctor public InputMergerFactory();
+    method public abstract androidx.work.InputMerger? createInputMerger(String);
+  }
+
+  public abstract class ListenableWorker {
+    ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
+    method public final android.content.Context getApplicationContext();
+    method public final java.util.UUID getId();
+    method public final androidx.work.Data getInputData();
+    method @RequiresApi(28) public final android.net.Network? getNetwork();
+    method @IntRange(from=0) public final int getRunAttemptCount();
+    method public final java.util.Set<java.lang.String!> getTags();
+    method @RequiresApi(24) public final java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public final java.util.List<android.net.Uri!> getTriggeredContentUris();
+    method public final boolean isStopped();
+    method public void onStopped();
+    method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(androidx.work.ForegroundInfo);
+    method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setProgressAsync(androidx.work.Data);
+    method @MainThread public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+  public abstract static class ListenableWorker.Result {
+    method public static androidx.work.ListenableWorker.Result failure();
+    method public static androidx.work.ListenableWorker.Result failure(androidx.work.Data);
+    method public static androidx.work.ListenableWorker.Result retry();
+    method public static androidx.work.ListenableWorker.Result success();
+    method public static androidx.work.ListenableWorker.Result success(androidx.work.Data);
+  }
+
+  public enum NetworkType {
+    enum_constant public static final androidx.work.NetworkType CONNECTED;
+    enum_constant public static final androidx.work.NetworkType METERED;
+    enum_constant public static final androidx.work.NetworkType NOT_REQUIRED;
+    enum_constant public static final androidx.work.NetworkType NOT_ROAMING;
+    enum_constant public static final androidx.work.NetworkType UNMETERED;
+  }
+
+  public final class OneTimeWorkRequest extends androidx.work.WorkRequest {
+    method public static androidx.work.OneTimeWorkRequest from(Class<? extends androidx.work.ListenableWorker>);
+    method public static java.util.List<androidx.work.OneTimeWorkRequest!> from(java.util.List<java.lang.Class<? extends androidx.work.ListenableWorker>!>);
+  }
+
+  public static final class OneTimeWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.OneTimeWorkRequest.Builder,androidx.work.OneTimeWorkRequest> {
+    ctor public OneTimeWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>);
+    method public androidx.work.OneTimeWorkRequest.Builder setInputMerger(Class<? extends androidx.work.InputMerger>);
+  }
+
+  public interface Operation {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS!> getResult();
+    method public androidx.lifecycle.LiveData<androidx.work.Operation.State!> getState();
+  }
+
+  public abstract static class Operation.State {
+  }
+
+  public static final class Operation.State.FAILURE extends androidx.work.Operation.State {
+    ctor public Operation.State.FAILURE(Throwable);
+    method public Throwable getThrowable();
+  }
+
+  public static final class Operation.State.IN_PROGRESS extends androidx.work.Operation.State {
+  }
+
+  public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
+  }
+
+  public final class OverwritingInputMerger extends androidx.work.InputMerger {
+    ctor public OverwritingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public final class PeriodicWorkRequest extends androidx.work.WorkRequest {
+    field public static final long MIN_PERIODIC_FLEX_MILLIS = 300000L; // 0x493e0L
+    field public static final long MIN_PERIODIC_INTERVAL_MILLIS = 900000L; // 0xdbba0L
+  }
+
+  public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration);
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration, java.time.Duration);
+  }
+
+  public interface ProgressUpdater {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> updateProgress(android.content.Context, java.util.UUID, androidx.work.Data);
+  }
+
+  public interface RunnableScheduler {
+    method public void cancel(Runnable);
+    method public void scheduleWithDelay(@IntRange(from=0) long, Runnable);
+  }
+
+  public abstract class WorkContinuation {
+    ctor public WorkContinuation();
+    method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation!>);
+    method public abstract androidx.work.Operation enqueue();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos();
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData();
+    method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest!>);
+  }
+
+  public final class WorkInfo {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getOutputData();
+    method public androidx.work.Data getProgress();
+    method @IntRange(from=0) public int getRunAttemptCount();
+    method public androidx.work.WorkInfo.State getState();
+    method public java.util.Set<java.lang.String!> getTags();
+  }
+
+  public enum WorkInfo.State {
+    method public boolean isFinished();
+    enum_constant public static final androidx.work.WorkInfo.State BLOCKED;
+    enum_constant public static final androidx.work.WorkInfo.State CANCELLED;
+    enum_constant public static final androidx.work.WorkInfo.State ENQUEUED;
+    enum_constant public static final androidx.work.WorkInfo.State FAILED;
+    enum_constant public static final androidx.work.WorkInfo.State RUNNING;
+    enum_constant public static final androidx.work.WorkInfo.State SUCCEEDED;
+  }
+
+  public abstract class WorkManager {
+    method public final androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method public final androidx.work.WorkContinuation beginWith(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginWith(java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method public abstract androidx.work.Operation cancelAllWork();
+    method public abstract androidx.work.Operation cancelAllWorkByTag(String);
+    method public abstract androidx.work.Operation cancelUniqueWork(String);
+    method public abstract androidx.work.Operation cancelWorkById(java.util.UUID);
+    method public abstract android.app.PendingIntent createCancelPendingIntent(java.util.UUID);
+    method public final androidx.work.Operation enqueue(androidx.work.WorkRequest);
+    method public abstract androidx.work.Operation enqueue(java.util.List<? extends androidx.work.WorkRequest>);
+    method public abstract androidx.work.Operation enqueueUniquePeriodicWork(String, androidx.work.ExistingPeriodicWorkPolicy, androidx.work.PeriodicWorkRequest);
+    method public androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method @Deprecated public static androidx.work.WorkManager getInstance();
+    method public static androidx.work.WorkManager getInstance(android.content.Context);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> getLastCancelAllTimeMillis();
+    method public abstract androidx.lifecycle.LiveData<java.lang.Long!> getLastCancelAllTimeMillisLiveData();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo!> getWorkInfoById(java.util.UUID);
+    method public abstract androidx.lifecycle.LiveData<androidx.work.WorkInfo!> getWorkInfoByIdLiveData(java.util.UUID);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos(androidx.work.WorkQuery);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTag(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTagLiveData(String);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWork(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWorkLiveData(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData(androidx.work.WorkQuery);
+    method public static void initialize(android.content.Context, androidx.work.Configuration);
+    method public abstract androidx.work.Operation pruneWork();
+  }
+
+  public final class WorkQuery {
+    method public java.util.List<androidx.work.WorkInfo.State!> getStates();
+    method public java.util.List<java.lang.String!> getTags();
+    method public java.util.List<java.lang.String!> getUniqueWorkNames();
+  }
+
+  public static final class WorkQuery.Builder {
+    method public androidx.work.WorkQuery.Builder addStates(java.util.List<androidx.work.WorkInfo.State!>);
+    method public androidx.work.WorkQuery.Builder addTags(java.util.List<java.lang.String!>);
+    method public androidx.work.WorkQuery.Builder addUniqueWorkNames(java.util.List<java.lang.String!>);
+    method public androidx.work.WorkQuery build();
+    method public static androidx.work.WorkQuery.Builder fromStates(java.util.List<androidx.work.WorkInfo.State!>);
+    method public static androidx.work.WorkQuery.Builder fromTags(java.util.List<java.lang.String!>);
+    method public static androidx.work.WorkQuery.Builder fromUniqueWorkNames(java.util.List<java.lang.String!>);
+  }
+
+  public abstract class WorkRequest {
+    method public java.util.UUID getId();
+    field public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; // 0x7530L
+    field public static final long MAX_BACKOFF_MILLIS = 18000000L; // 0x112a880L
+    field public static final long MIN_BACKOFF_MILLIS = 10000L; // 0x2710L
+  }
+
+  public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<?, ?>, W extends androidx.work.WorkRequest> {
+    method public final B addTag(String);
+    method public final W build();
+    method public final B keepResultsForAtLeast(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration);
+    method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
+    method public final B setConstraints(androidx.work.Constraints);
+    method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
+    method public final B setInputData(androidx.work.Data);
+  }
+
+  public abstract class Worker extends androidx.work.ListenableWorker {
+    ctor @Keep public Worker(android.content.Context, androidx.work.WorkerParameters);
+    method @WorkerThread public abstract androidx.work.ListenableWorker.Result doWork();
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+  public abstract class WorkerFactory {
+    ctor public WorkerFactory();
+    method public abstract androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public final class WorkerParameters {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getInputData();
+    method @RequiresApi(28) public android.net.Network? getNetwork();
+    method @IntRange(from=0) public int getRunAttemptCount();
+    method public java.util.Set<java.lang.String!> getTags();
+    method @RequiresApi(24) public java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public java.util.List<android.net.Uri!> getTriggeredContentUris();
+  }
+
+}
+
diff --git a/work/workmanager/api/public_plus_experimental_2.5.0-alpha01.txt b/work/workmanager/api/public_plus_experimental_2.5.0-alpha01.txt
new file mode 100644
index 0000000..6c0ce36
--- /dev/null
+++ b/work/workmanager/api/public_plus_experimental_2.5.0-alpha01.txt
@@ -0,0 +1,358 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public final class ArrayCreatingInputMerger extends androidx.work.InputMerger {
+    ctor public ArrayCreatingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public enum BackoffPolicy {
+    enum_constant public static final androidx.work.BackoffPolicy EXPONENTIAL;
+    enum_constant public static final androidx.work.BackoffPolicy LINEAR;
+  }
+
+  public final class Configuration {
+    method public java.util.concurrent.Executor getExecutor();
+    method public androidx.work.InputMergerFactory getInputMergerFactory();
+    method public int getMaxJobSchedulerId();
+    method public int getMinJobSchedulerId();
+    method public androidx.work.RunnableScheduler getRunnableScheduler();
+    method public java.util.concurrent.Executor getTaskExecutor();
+    method public androidx.work.WorkerFactory getWorkerFactory();
+    field public static final int MIN_SCHEDULER_LIMIT = 20; // 0x14
+  }
+
+  public static final class Configuration.Builder {
+    ctor public Configuration.Builder();
+    method public androidx.work.Configuration build();
+    method public androidx.work.Configuration.Builder setExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setInputMergerFactory(androidx.work.InputMergerFactory);
+    method public androidx.work.Configuration.Builder setJobSchedulerJobIdRange(int, int);
+    method public androidx.work.Configuration.Builder setMaxSchedulerLimit(int);
+    method public androidx.work.Configuration.Builder setMinimumLoggingLevel(int);
+    method public androidx.work.Configuration.Builder setRunnableScheduler(androidx.work.RunnableScheduler);
+    method public androidx.work.Configuration.Builder setTaskExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public static interface Configuration.Provider {
+    method public androidx.work.Configuration getWorkManagerConfiguration();
+  }
+
+  public final class Constraints {
+    ctor public Constraints(androidx.work.Constraints);
+    method public androidx.work.NetworkType getRequiredNetworkType();
+    method public boolean requiresBatteryNotLow();
+    method public boolean requiresCharging();
+    method @RequiresApi(23) public boolean requiresDeviceIdle();
+    method public boolean requiresStorageNotLow();
+    field public static final androidx.work.Constraints NONE;
+  }
+
+  public static final class Constraints.Builder {
+    ctor public Constraints.Builder();
+    method @RequiresApi(24) public androidx.work.Constraints.Builder addContentUriTrigger(android.net.Uri, boolean);
+    method public androidx.work.Constraints build();
+    method public androidx.work.Constraints.Builder setRequiredNetworkType(androidx.work.NetworkType);
+    method public androidx.work.Constraints.Builder setRequiresBatteryNotLow(boolean);
+    method public androidx.work.Constraints.Builder setRequiresCharging(boolean);
+    method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean);
+    method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration!);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration!);
+  }
+
+  public final class Data {
+    ctor public Data(androidx.work.Data);
+    method @androidx.room.TypeConverter public static androidx.work.Data fromByteArray(byte[]);
+    method public boolean getBoolean(String, boolean);
+    method public boolean[]? getBooleanArray(String);
+    method public byte getByte(String, byte);
+    method public byte[]? getByteArray(String);
+    method public double getDouble(String, double);
+    method public double[]? getDoubleArray(String);
+    method public float getFloat(String, float);
+    method public float[]? getFloatArray(String);
+    method public int getInt(String, int);
+    method public int[]? getIntArray(String);
+    method public java.util.Map<java.lang.String!,java.lang.Object!> getKeyValueMap();
+    method public long getLong(String, long);
+    method public long[]? getLongArray(String);
+    method public String? getString(String);
+    method public String![]? getStringArray(String);
+    method public <T> boolean hasKeyWithValueOfType(String, Class<T!>);
+    method public byte[] toByteArray();
+    field public static final androidx.work.Data EMPTY;
+    field public static final int MAX_DATA_BYTES = 10240; // 0x2800
+  }
+
+  public static final class Data.Builder {
+    ctor public Data.Builder();
+    method public androidx.work.Data build();
+    method public androidx.work.Data.Builder putAll(androidx.work.Data);
+    method public androidx.work.Data.Builder putAll(java.util.Map<java.lang.String!,java.lang.Object!>);
+    method public androidx.work.Data.Builder putBoolean(String, boolean);
+    method public androidx.work.Data.Builder putBooleanArray(String, boolean[]);
+    method public androidx.work.Data.Builder putByte(String, byte);
+    method public androidx.work.Data.Builder putByteArray(String, byte[]);
+    method public androidx.work.Data.Builder putDouble(String, double);
+    method public androidx.work.Data.Builder putDoubleArray(String, double[]);
+    method public androidx.work.Data.Builder putFloat(String, float);
+    method public androidx.work.Data.Builder putFloatArray(String, float[]);
+    method public androidx.work.Data.Builder putInt(String, int);
+    method public androidx.work.Data.Builder putIntArray(String, int[]);
+    method public androidx.work.Data.Builder putLong(String, long);
+    method public androidx.work.Data.Builder putLongArray(String, long[]);
+    method public androidx.work.Data.Builder putString(String, String?);
+    method public androidx.work.Data.Builder putStringArray(String, String![]);
+  }
+
+  public class DelegatingWorkerFactory extends androidx.work.WorkerFactory {
+    ctor public DelegatingWorkerFactory();
+    method public final void addFactory(androidx.work.WorkerFactory);
+    method public final androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public enum ExistingPeriodicWorkPolicy {
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy REPLACE;
+  }
+
+  public enum ExistingWorkPolicy {
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND;
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND_OR_REPLACE;
+    enum_constant public static final androidx.work.ExistingWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
+  }
+
+  public final class ForegroundInfo {
+    ctor public ForegroundInfo(int, android.app.Notification);
+    ctor public ForegroundInfo(int, android.app.Notification, int);
+    method public int getForegroundServiceType();
+    method public android.app.Notification getNotification();
+    method public int getNotificationId();
+  }
+
+  public interface ForegroundUpdater {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(android.content.Context, java.util.UUID, androidx.work.ForegroundInfo);
+  }
+
+  public abstract class InputMerger {
+    ctor public InputMerger();
+    method public abstract androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public abstract class InputMergerFactory {
+    ctor public InputMergerFactory();
+    method public abstract androidx.work.InputMerger? createInputMerger(String);
+  }
+
+  public abstract class ListenableWorker {
+    ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
+    method public final android.content.Context getApplicationContext();
+    method public final java.util.UUID getId();
+    method public final androidx.work.Data getInputData();
+    method @RequiresApi(28) public final android.net.Network? getNetwork();
+    method @IntRange(from=0) public final int getRunAttemptCount();
+    method public final java.util.Set<java.lang.String!> getTags();
+    method @RequiresApi(24) public final java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public final java.util.List<android.net.Uri!> getTriggeredContentUris();
+    method public final boolean isStopped();
+    method public void onStopped();
+    method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(androidx.work.ForegroundInfo);
+    method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setProgressAsync(androidx.work.Data);
+    method @MainThread public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+  public abstract static class ListenableWorker.Result {
+    method public static androidx.work.ListenableWorker.Result failure();
+    method public static androidx.work.ListenableWorker.Result failure(androidx.work.Data);
+    method public static androidx.work.ListenableWorker.Result retry();
+    method public static androidx.work.ListenableWorker.Result success();
+    method public static androidx.work.ListenableWorker.Result success(androidx.work.Data);
+  }
+
+  public enum NetworkType {
+    enum_constant public static final androidx.work.NetworkType CONNECTED;
+    enum_constant public static final androidx.work.NetworkType METERED;
+    enum_constant public static final androidx.work.NetworkType NOT_REQUIRED;
+    enum_constant public static final androidx.work.NetworkType NOT_ROAMING;
+    enum_constant public static final androidx.work.NetworkType UNMETERED;
+  }
+
+  public final class OneTimeWorkRequest extends androidx.work.WorkRequest {
+    method public static androidx.work.OneTimeWorkRequest from(Class<? extends androidx.work.ListenableWorker>);
+    method public static java.util.List<androidx.work.OneTimeWorkRequest!> from(java.util.List<java.lang.Class<? extends androidx.work.ListenableWorker>!>);
+  }
+
+  public static final class OneTimeWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.OneTimeWorkRequest.Builder,androidx.work.OneTimeWorkRequest> {
+    ctor public OneTimeWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>);
+    method public androidx.work.OneTimeWorkRequest.Builder setInputMerger(Class<? extends androidx.work.InputMerger>);
+  }
+
+  public interface Operation {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS!> getResult();
+    method public androidx.lifecycle.LiveData<androidx.work.Operation.State!> getState();
+  }
+
+  public abstract static class Operation.State {
+  }
+
+  public static final class Operation.State.FAILURE extends androidx.work.Operation.State {
+    ctor public Operation.State.FAILURE(Throwable);
+    method public Throwable getThrowable();
+  }
+
+  public static final class Operation.State.IN_PROGRESS extends androidx.work.Operation.State {
+  }
+
+  public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
+  }
+
+  public final class OverwritingInputMerger extends androidx.work.InputMerger {
+    ctor public OverwritingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public final class PeriodicWorkRequest extends androidx.work.WorkRequest {
+    field public static final long MIN_PERIODIC_FLEX_MILLIS = 300000L; // 0x493e0L
+    field public static final long MIN_PERIODIC_INTERVAL_MILLIS = 900000L; // 0xdbba0L
+  }
+
+  public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration);
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration, java.time.Duration);
+  }
+
+  public interface ProgressUpdater {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> updateProgress(android.content.Context, java.util.UUID, androidx.work.Data);
+  }
+
+  public interface RunnableScheduler {
+    method public void cancel(Runnable);
+    method public void scheduleWithDelay(@IntRange(from=0) long, Runnable);
+  }
+
+  public abstract class WorkContinuation {
+    ctor public WorkContinuation();
+    method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation!>);
+    method public abstract androidx.work.Operation enqueue();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos();
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData();
+    method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest!>);
+  }
+
+  public final class WorkInfo {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getOutputData();
+    method public androidx.work.Data getProgress();
+    method @IntRange(from=0) public int getRunAttemptCount();
+    method public androidx.work.WorkInfo.State getState();
+    method public java.util.Set<java.lang.String!> getTags();
+  }
+
+  public enum WorkInfo.State {
+    method public boolean isFinished();
+    enum_constant public static final androidx.work.WorkInfo.State BLOCKED;
+    enum_constant public static final androidx.work.WorkInfo.State CANCELLED;
+    enum_constant public static final androidx.work.WorkInfo.State ENQUEUED;
+    enum_constant public static final androidx.work.WorkInfo.State FAILED;
+    enum_constant public static final androidx.work.WorkInfo.State RUNNING;
+    enum_constant public static final androidx.work.WorkInfo.State SUCCEEDED;
+  }
+
+  public abstract class WorkManager {
+    method public final androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method public final androidx.work.WorkContinuation beginWith(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginWith(java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method public abstract androidx.work.Operation cancelAllWork();
+    method public abstract androidx.work.Operation cancelAllWorkByTag(String);
+    method public abstract androidx.work.Operation cancelUniqueWork(String);
+    method public abstract androidx.work.Operation cancelWorkById(java.util.UUID);
+    method public abstract android.app.PendingIntent createCancelPendingIntent(java.util.UUID);
+    method public final androidx.work.Operation enqueue(androidx.work.WorkRequest);
+    method public abstract androidx.work.Operation enqueue(java.util.List<? extends androidx.work.WorkRequest>);
+    method public abstract androidx.work.Operation enqueueUniquePeriodicWork(String, androidx.work.ExistingPeriodicWorkPolicy, androidx.work.PeriodicWorkRequest);
+    method public androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method @Deprecated public static androidx.work.WorkManager getInstance();
+    method public static androidx.work.WorkManager getInstance(android.content.Context);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> getLastCancelAllTimeMillis();
+    method public abstract androidx.lifecycle.LiveData<java.lang.Long!> getLastCancelAllTimeMillisLiveData();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo!> getWorkInfoById(java.util.UUID);
+    method public abstract androidx.lifecycle.LiveData<androidx.work.WorkInfo!> getWorkInfoByIdLiveData(java.util.UUID);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos(androidx.work.WorkQuery);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTag(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTagLiveData(String);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWork(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWorkLiveData(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData(androidx.work.WorkQuery);
+    method public static void initialize(android.content.Context, androidx.work.Configuration);
+    method public abstract androidx.work.Operation pruneWork();
+  }
+
+  public final class WorkQuery {
+    method public java.util.List<androidx.work.WorkInfo.State!> getStates();
+    method public java.util.List<java.lang.String!> getTags();
+    method public java.util.List<java.lang.String!> getUniqueWorkNames();
+  }
+
+  public static final class WorkQuery.Builder {
+    method public androidx.work.WorkQuery.Builder addStates(java.util.List<androidx.work.WorkInfo.State!>);
+    method public androidx.work.WorkQuery.Builder addTags(java.util.List<java.lang.String!>);
+    method public androidx.work.WorkQuery.Builder addUniqueWorkNames(java.util.List<java.lang.String!>);
+    method public androidx.work.WorkQuery build();
+    method public static androidx.work.WorkQuery.Builder fromStates(java.util.List<androidx.work.WorkInfo.State!>);
+    method public static androidx.work.WorkQuery.Builder fromTags(java.util.List<java.lang.String!>);
+    method public static androidx.work.WorkQuery.Builder fromUniqueWorkNames(java.util.List<java.lang.String!>);
+  }
+
+  public abstract class WorkRequest {
+    method public java.util.UUID getId();
+    field public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; // 0x7530L
+    field public static final long MAX_BACKOFF_MILLIS = 18000000L; // 0x112a880L
+    field public static final long MIN_BACKOFF_MILLIS = 10000L; // 0x2710L
+  }
+
+  public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<?, ?>, W extends androidx.work.WorkRequest> {
+    method public final B addTag(String);
+    method public final W build();
+    method public final B keepResultsForAtLeast(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration);
+    method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
+    method public final B setConstraints(androidx.work.Constraints);
+    method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
+    method public final B setInputData(androidx.work.Data);
+  }
+
+  public abstract class Worker extends androidx.work.ListenableWorker {
+    ctor @Keep public Worker(android.content.Context, androidx.work.WorkerParameters);
+    method @WorkerThread public abstract androidx.work.ListenableWorker.Result doWork();
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+  public abstract class WorkerFactory {
+    ctor public WorkerFactory();
+    method public abstract androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public final class WorkerParameters {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getInputData();
+    method @RequiresApi(28) public android.net.Network? getNetwork();
+    method @IntRange(from=0) public int getRunAttemptCount();
+    method public java.util.Set<java.lang.String!> getTags();
+    method @RequiresApi(24) public java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public java.util.List<android.net.Uri!> getTriggeredContentUris();
+  }
+
+}
+
diff --git a/work/workmanager/api/res-2.5.0-alpha01.txt b/work/workmanager/api/res-2.5.0-alpha01.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/work/workmanager/api/res-2.5.0-alpha01.txt
diff --git a/work/workmanager/api/restricted_2.5.0-alpha01.txt b/work/workmanager/api/restricted_2.5.0-alpha01.txt
new file mode 100644
index 0000000..6c0ce36
--- /dev/null
+++ b/work/workmanager/api/restricted_2.5.0-alpha01.txt
@@ -0,0 +1,358 @@
+// Signature format: 3.0
+package androidx.work {
+
+  public final class ArrayCreatingInputMerger extends androidx.work.InputMerger {
+    ctor public ArrayCreatingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public enum BackoffPolicy {
+    enum_constant public static final androidx.work.BackoffPolicy EXPONENTIAL;
+    enum_constant public static final androidx.work.BackoffPolicy LINEAR;
+  }
+
+  public final class Configuration {
+    method public java.util.concurrent.Executor getExecutor();
+    method public androidx.work.InputMergerFactory getInputMergerFactory();
+    method public int getMaxJobSchedulerId();
+    method public int getMinJobSchedulerId();
+    method public androidx.work.RunnableScheduler getRunnableScheduler();
+    method public java.util.concurrent.Executor getTaskExecutor();
+    method public androidx.work.WorkerFactory getWorkerFactory();
+    field public static final int MIN_SCHEDULER_LIMIT = 20; // 0x14
+  }
+
+  public static final class Configuration.Builder {
+    ctor public Configuration.Builder();
+    method public androidx.work.Configuration build();
+    method public androidx.work.Configuration.Builder setExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setInputMergerFactory(androidx.work.InputMergerFactory);
+    method public androidx.work.Configuration.Builder setJobSchedulerJobIdRange(int, int);
+    method public androidx.work.Configuration.Builder setMaxSchedulerLimit(int);
+    method public androidx.work.Configuration.Builder setMinimumLoggingLevel(int);
+    method public androidx.work.Configuration.Builder setRunnableScheduler(androidx.work.RunnableScheduler);
+    method public androidx.work.Configuration.Builder setTaskExecutor(java.util.concurrent.Executor);
+    method public androidx.work.Configuration.Builder setWorkerFactory(androidx.work.WorkerFactory);
+  }
+
+  public static interface Configuration.Provider {
+    method public androidx.work.Configuration getWorkManagerConfiguration();
+  }
+
+  public final class Constraints {
+    ctor public Constraints(androidx.work.Constraints);
+    method public androidx.work.NetworkType getRequiredNetworkType();
+    method public boolean requiresBatteryNotLow();
+    method public boolean requiresCharging();
+    method @RequiresApi(23) public boolean requiresDeviceIdle();
+    method public boolean requiresStorageNotLow();
+    field public static final androidx.work.Constraints NONE;
+  }
+
+  public static final class Constraints.Builder {
+    ctor public Constraints.Builder();
+    method @RequiresApi(24) public androidx.work.Constraints.Builder addContentUriTrigger(android.net.Uri, boolean);
+    method public androidx.work.Constraints build();
+    method public androidx.work.Constraints.Builder setRequiredNetworkType(androidx.work.NetworkType);
+    method public androidx.work.Constraints.Builder setRequiresBatteryNotLow(boolean);
+    method public androidx.work.Constraints.Builder setRequiresCharging(boolean);
+    method @RequiresApi(23) public androidx.work.Constraints.Builder setRequiresDeviceIdle(boolean);
+    method public androidx.work.Constraints.Builder setRequiresStorageNotLow(boolean);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentMaxDelay(java.time.Duration!);
+    method @RequiresApi(24) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public androidx.work.Constraints.Builder setTriggerContentUpdateDelay(java.time.Duration!);
+  }
+
+  public final class Data {
+    ctor public Data(androidx.work.Data);
+    method @androidx.room.TypeConverter public static androidx.work.Data fromByteArray(byte[]);
+    method public boolean getBoolean(String, boolean);
+    method public boolean[]? getBooleanArray(String);
+    method public byte getByte(String, byte);
+    method public byte[]? getByteArray(String);
+    method public double getDouble(String, double);
+    method public double[]? getDoubleArray(String);
+    method public float getFloat(String, float);
+    method public float[]? getFloatArray(String);
+    method public int getInt(String, int);
+    method public int[]? getIntArray(String);
+    method public java.util.Map<java.lang.String!,java.lang.Object!> getKeyValueMap();
+    method public long getLong(String, long);
+    method public long[]? getLongArray(String);
+    method public String? getString(String);
+    method public String![]? getStringArray(String);
+    method public <T> boolean hasKeyWithValueOfType(String, Class<T!>);
+    method public byte[] toByteArray();
+    field public static final androidx.work.Data EMPTY;
+    field public static final int MAX_DATA_BYTES = 10240; // 0x2800
+  }
+
+  public static final class Data.Builder {
+    ctor public Data.Builder();
+    method public androidx.work.Data build();
+    method public androidx.work.Data.Builder putAll(androidx.work.Data);
+    method public androidx.work.Data.Builder putAll(java.util.Map<java.lang.String!,java.lang.Object!>);
+    method public androidx.work.Data.Builder putBoolean(String, boolean);
+    method public androidx.work.Data.Builder putBooleanArray(String, boolean[]);
+    method public androidx.work.Data.Builder putByte(String, byte);
+    method public androidx.work.Data.Builder putByteArray(String, byte[]);
+    method public androidx.work.Data.Builder putDouble(String, double);
+    method public androidx.work.Data.Builder putDoubleArray(String, double[]);
+    method public androidx.work.Data.Builder putFloat(String, float);
+    method public androidx.work.Data.Builder putFloatArray(String, float[]);
+    method public androidx.work.Data.Builder putInt(String, int);
+    method public androidx.work.Data.Builder putIntArray(String, int[]);
+    method public androidx.work.Data.Builder putLong(String, long);
+    method public androidx.work.Data.Builder putLongArray(String, long[]);
+    method public androidx.work.Data.Builder putString(String, String?);
+    method public androidx.work.Data.Builder putStringArray(String, String![]);
+  }
+
+  public class DelegatingWorkerFactory extends androidx.work.WorkerFactory {
+    ctor public DelegatingWorkerFactory();
+    method public final void addFactory(androidx.work.WorkerFactory);
+    method public final androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public enum ExistingPeriodicWorkPolicy {
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingPeriodicWorkPolicy REPLACE;
+  }
+
+  public enum ExistingWorkPolicy {
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND;
+    enum_constant public static final androidx.work.ExistingWorkPolicy APPEND_OR_REPLACE;
+    enum_constant public static final androidx.work.ExistingWorkPolicy KEEP;
+    enum_constant public static final androidx.work.ExistingWorkPolicy REPLACE;
+  }
+
+  public final class ForegroundInfo {
+    ctor public ForegroundInfo(int, android.app.Notification);
+    ctor public ForegroundInfo(int, android.app.Notification, int);
+    method public int getForegroundServiceType();
+    method public android.app.Notification getNotification();
+    method public int getNotificationId();
+  }
+
+  public interface ForegroundUpdater {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(android.content.Context, java.util.UUID, androidx.work.ForegroundInfo);
+  }
+
+  public abstract class InputMerger {
+    ctor public InputMerger();
+    method public abstract androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public abstract class InputMergerFactory {
+    ctor public InputMergerFactory();
+    method public abstract androidx.work.InputMerger? createInputMerger(String);
+  }
+
+  public abstract class ListenableWorker {
+    ctor @Keep public ListenableWorker(android.content.Context, androidx.work.WorkerParameters);
+    method public final android.content.Context getApplicationContext();
+    method public final java.util.UUID getId();
+    method public final androidx.work.Data getInputData();
+    method @RequiresApi(28) public final android.net.Network? getNetwork();
+    method @IntRange(from=0) public final int getRunAttemptCount();
+    method public final java.util.Set<java.lang.String!> getTags();
+    method @RequiresApi(24) public final java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public final java.util.List<android.net.Uri!> getTriggeredContentUris();
+    method public final boolean isStopped();
+    method public void onStopped();
+    method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setForegroundAsync(androidx.work.ForegroundInfo);
+    method public final com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setProgressAsync(androidx.work.Data);
+    method @MainThread public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+  public abstract static class ListenableWorker.Result {
+    method public static androidx.work.ListenableWorker.Result failure();
+    method public static androidx.work.ListenableWorker.Result failure(androidx.work.Data);
+    method public static androidx.work.ListenableWorker.Result retry();
+    method public static androidx.work.ListenableWorker.Result success();
+    method public static androidx.work.ListenableWorker.Result success(androidx.work.Data);
+  }
+
+  public enum NetworkType {
+    enum_constant public static final androidx.work.NetworkType CONNECTED;
+    enum_constant public static final androidx.work.NetworkType METERED;
+    enum_constant public static final androidx.work.NetworkType NOT_REQUIRED;
+    enum_constant public static final androidx.work.NetworkType NOT_ROAMING;
+    enum_constant public static final androidx.work.NetworkType UNMETERED;
+  }
+
+  public final class OneTimeWorkRequest extends androidx.work.WorkRequest {
+    method public static androidx.work.OneTimeWorkRequest from(Class<? extends androidx.work.ListenableWorker>);
+    method public static java.util.List<androidx.work.OneTimeWorkRequest!> from(java.util.List<java.lang.Class<? extends androidx.work.ListenableWorker>!>);
+  }
+
+  public static final class OneTimeWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.OneTimeWorkRequest.Builder,androidx.work.OneTimeWorkRequest> {
+    ctor public OneTimeWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>);
+    method public androidx.work.OneTimeWorkRequest.Builder setInputMerger(Class<? extends androidx.work.InputMerger>);
+  }
+
+  public interface Operation {
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.work.Operation.State.SUCCESS!> getResult();
+    method public androidx.lifecycle.LiveData<androidx.work.Operation.State!> getState();
+  }
+
+  public abstract static class Operation.State {
+  }
+
+  public static final class Operation.State.FAILURE extends androidx.work.Operation.State {
+    ctor public Operation.State.FAILURE(Throwable);
+    method public Throwable getThrowable();
+  }
+
+  public static final class Operation.State.IN_PROGRESS extends androidx.work.Operation.State {
+  }
+
+  public static final class Operation.State.SUCCESS extends androidx.work.Operation.State {
+  }
+
+  public final class OverwritingInputMerger extends androidx.work.InputMerger {
+    ctor public OverwritingInputMerger();
+    method public androidx.work.Data merge(java.util.List<androidx.work.Data!>);
+  }
+
+  public final class PeriodicWorkRequest extends androidx.work.WorkRequest {
+    field public static final long MIN_PERIODIC_FLEX_MILLIS = 300000L; // 0x493e0L
+    field public static final long MIN_PERIODIC_INTERVAL_MILLIS = 900000L; // 0xdbba0L
+  }
+
+  public static final class PeriodicWorkRequest.Builder extends androidx.work.WorkRequest.Builder<androidx.work.PeriodicWorkRequest.Builder,androidx.work.PeriodicWorkRequest> {
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration);
+    ctor public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, long, java.util.concurrent.TimeUnit, long, java.util.concurrent.TimeUnit);
+    ctor @RequiresApi(26) public PeriodicWorkRequest.Builder(Class<? extends androidx.work.ListenableWorker>, java.time.Duration, java.time.Duration);
+  }
+
+  public interface ProgressUpdater {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> updateProgress(android.content.Context, java.util.UUID, androidx.work.Data);
+  }
+
+  public interface RunnableScheduler {
+    method public void cancel(Runnable);
+    method public void scheduleWithDelay(@IntRange(from=0) long, Runnable);
+  }
+
+  public abstract class WorkContinuation {
+    ctor public WorkContinuation();
+    method public static androidx.work.WorkContinuation combine(java.util.List<androidx.work.WorkContinuation!>);
+    method public abstract androidx.work.Operation enqueue();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos();
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData();
+    method public final androidx.work.WorkContinuation then(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation then(java.util.List<androidx.work.OneTimeWorkRequest!>);
+  }
+
+  public final class WorkInfo {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getOutputData();
+    method public androidx.work.Data getProgress();
+    method @IntRange(from=0) public int getRunAttemptCount();
+    method public androidx.work.WorkInfo.State getState();
+    method public java.util.Set<java.lang.String!> getTags();
+  }
+
+  public enum WorkInfo.State {
+    method public boolean isFinished();
+    enum_constant public static final androidx.work.WorkInfo.State BLOCKED;
+    enum_constant public static final androidx.work.WorkInfo.State CANCELLED;
+    enum_constant public static final androidx.work.WorkInfo.State ENQUEUED;
+    enum_constant public static final androidx.work.WorkInfo.State FAILED;
+    enum_constant public static final androidx.work.WorkInfo.State RUNNING;
+    enum_constant public static final androidx.work.WorkInfo.State SUCCEEDED;
+  }
+
+  public abstract class WorkManager {
+    method public final androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method public final androidx.work.WorkContinuation beginWith(androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.WorkContinuation beginWith(java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method public abstract androidx.work.Operation cancelAllWork();
+    method public abstract androidx.work.Operation cancelAllWorkByTag(String);
+    method public abstract androidx.work.Operation cancelUniqueWork(String);
+    method public abstract androidx.work.Operation cancelWorkById(java.util.UUID);
+    method public abstract android.app.PendingIntent createCancelPendingIntent(java.util.UUID);
+    method public final androidx.work.Operation enqueue(androidx.work.WorkRequest);
+    method public abstract androidx.work.Operation enqueue(java.util.List<? extends androidx.work.WorkRequest>);
+    method public abstract androidx.work.Operation enqueueUniquePeriodicWork(String, androidx.work.ExistingPeriodicWorkPolicy, androidx.work.PeriodicWorkRequest);
+    method public androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, androidx.work.OneTimeWorkRequest);
+    method public abstract androidx.work.Operation enqueueUniqueWork(String, androidx.work.ExistingWorkPolicy, java.util.List<androidx.work.OneTimeWorkRequest!>);
+    method @Deprecated public static androidx.work.WorkManager getInstance();
+    method public static androidx.work.WorkManager getInstance(android.content.Context);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Long!> getLastCancelAllTimeMillis();
+    method public abstract androidx.lifecycle.LiveData<java.lang.Long!> getLastCancelAllTimeMillisLiveData();
+    method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.work.WorkInfo!> getWorkInfoById(java.util.UUID);
+    method public abstract androidx.lifecycle.LiveData<androidx.work.WorkInfo!> getWorkInfoByIdLiveData(java.util.UUID);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfos(androidx.work.WorkQuery);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTag(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosByTagLiveData(String);
+    method public abstract com.google.common.util.concurrent.ListenableFuture<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWork(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosForUniqueWorkLiveData(String);
+    method public abstract androidx.lifecycle.LiveData<java.util.List<androidx.work.WorkInfo!>!> getWorkInfosLiveData(androidx.work.WorkQuery);
+    method public static void initialize(android.content.Context, androidx.work.Configuration);
+    method public abstract androidx.work.Operation pruneWork();
+  }
+
+  public final class WorkQuery {
+    method public java.util.List<androidx.work.WorkInfo.State!> getStates();
+    method public java.util.List<java.lang.String!> getTags();
+    method public java.util.List<java.lang.String!> getUniqueWorkNames();
+  }
+
+  public static final class WorkQuery.Builder {
+    method public androidx.work.WorkQuery.Builder addStates(java.util.List<androidx.work.WorkInfo.State!>);
+    method public androidx.work.WorkQuery.Builder addTags(java.util.List<java.lang.String!>);
+    method public androidx.work.WorkQuery.Builder addUniqueWorkNames(java.util.List<java.lang.String!>);
+    method public androidx.work.WorkQuery build();
+    method public static androidx.work.WorkQuery.Builder fromStates(java.util.List<androidx.work.WorkInfo.State!>);
+    method public static androidx.work.WorkQuery.Builder fromTags(java.util.List<java.lang.String!>);
+    method public static androidx.work.WorkQuery.Builder fromUniqueWorkNames(java.util.List<java.lang.String!>);
+  }
+
+  public abstract class WorkRequest {
+    method public java.util.UUID getId();
+    field public static final long DEFAULT_BACKOFF_DELAY_MILLIS = 30000L; // 0x7530L
+    field public static final long MAX_BACKOFF_MILLIS = 18000000L; // 0x112a880L
+    field public static final long MIN_BACKOFF_MILLIS = 10000L; // 0x2710L
+  }
+
+  public abstract static class WorkRequest.Builder<B extends androidx.work.WorkRequest.Builder<?, ?>, W extends androidx.work.WorkRequest> {
+    method public final B addTag(String);
+    method public final W build();
+    method public final B keepResultsForAtLeast(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B keepResultsForAtLeast(java.time.Duration);
+    method public final B setBackoffCriteria(androidx.work.BackoffPolicy, long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public final B setBackoffCriteria(androidx.work.BackoffPolicy, java.time.Duration);
+    method public final B setConstraints(androidx.work.Constraints);
+    method public B setInitialDelay(long, java.util.concurrent.TimeUnit);
+    method @RequiresApi(26) public B setInitialDelay(java.time.Duration);
+    method public final B setInputData(androidx.work.Data);
+  }
+
+  public abstract class Worker extends androidx.work.ListenableWorker {
+    ctor @Keep public Worker(android.content.Context, androidx.work.WorkerParameters);
+    method @WorkerThread public abstract androidx.work.ListenableWorker.Result doWork();
+    method public final com.google.common.util.concurrent.ListenableFuture<androidx.work.ListenableWorker.Result!> startWork();
+  }
+
+  public abstract class WorkerFactory {
+    ctor public WorkerFactory();
+    method public abstract androidx.work.ListenableWorker? createWorker(android.content.Context, String, androidx.work.WorkerParameters);
+  }
+
+  public final class WorkerParameters {
+    method public java.util.UUID getId();
+    method public androidx.work.Data getInputData();
+    method @RequiresApi(28) public android.net.Network? getNetwork();
+    method @IntRange(from=0) public int getRunAttemptCount();
+    method public java.util.Set<java.lang.String!> getTags();
+    method @RequiresApi(24) public java.util.List<java.lang.String!> getTriggeredContentAuthorities();
+    method @RequiresApi(24) public java.util.List<android.net.Uri!> getTriggeredContentUris();
+  }
+
+}
+
