diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
index 507259a..7b98812 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
@@ -19,7 +19,7 @@
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.benchmark.junit4.measureRepeated
 import androidx.test.filters.LargeTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.integration.test.RandomTextGenerator
 import androidx.ui.integration.test.TextBenchmarkTestRule
 import androidx.ui.integration.test.TextType
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/autofill/AndroidAutofillBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/autofill/AndroidAutofillBenchmark.kt
index ec407be..96f1acc 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/autofill/AndroidAutofillBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/autofill/AndroidAutofillBenchmark.kt
@@ -29,7 +29,7 @@
 import androidx.ui.autofill.AutofillType
 import androidx.ui.core.AutofillTreeAmbient
 import androidx.ui.core.ViewAmbient
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.test.createComposeRule
 import org.junit.Before
 import org.junit.Rule
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 1eb21df..7e2e6a0 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
@@ -20,7 +20,7 @@
 import android.graphics.Picture
 import android.graphics.RenderNode
 import android.os.Build
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt
index f4cf4b2..1fa5536 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt
@@ -23,9 +23,9 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.drawBorder
 import androidx.compose.foundation.shape.corner.CircleShape
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.shift
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.shift
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
diff --git a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt
index 055e179..2b3c8c7 100644
--- a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt
+++ b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.ScrollableRow
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
diff --git a/ui/ui-animation/api/0.1.0-dev16.txt b/ui/ui-animation/api/0.1.0-dev16.txt
index 4424440..7700298 100644
--- a/ui/ui-animation/api/0.1.0-dev16.txt
+++ b/ui/ui-animation/api/0.1.0-dev16.txt
@@ -62,12 +62,12 @@
     method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
-  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
+  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
     ctor public OffsetPropKey(String label);
     ctor public OffsetPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
   }
 
   public final class PropertyKeysKt {
@@ -76,11 +76,11 @@
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
 
   public final class PxPropKey implements androidx.compose.animation.core.PropKey<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> {
@@ -91,12 +91,12 @@
     property public androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
-  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
+  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
     ctor public RectPropKey(String label);
     ctor public RectPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
   }
 
   public final class SingleValueAnimationKt {
@@ -104,9 +104,9 @@
     method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.geometry.Offset animate(androidx.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Offset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
@@ -128,15 +128,15 @@
     method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
     return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-BkRcQCA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Size> animSpec = remember({ 
-    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Size,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-Xol1pig(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
 
   public final class TransitionKt {
diff --git a/ui/ui-animation/api/current.txt b/ui/ui-animation/api/current.txt
index 4424440..7700298 100644
--- a/ui/ui-animation/api/current.txt
+++ b/ui/ui-animation/api/current.txt
@@ -62,12 +62,12 @@
     method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
-  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
+  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
     ctor public OffsetPropKey(String label);
     ctor public OffsetPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
   }
 
   public final class PropertyKeysKt {
@@ -76,11 +76,11 @@
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
 
   public final class PxPropKey implements androidx.compose.animation.core.PropKey<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> {
@@ -91,12 +91,12 @@
     property public androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
-  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
+  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
     ctor public RectPropKey(String label);
     ctor public RectPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
   }
 
   public final class SingleValueAnimationKt {
@@ -104,9 +104,9 @@
     method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.geometry.Offset animate(androidx.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Offset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
@@ -128,15 +128,15 @@
     method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
     return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-BkRcQCA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Size> animSpec = remember({ 
-    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Size,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-Xol1pig(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
 
   public final class TransitionKt {
diff --git a/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
index 4424440..7700298 100644
--- a/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
@@ -62,12 +62,12 @@
     method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
-  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
+  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
     ctor public OffsetPropKey(String label);
     ctor public OffsetPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
   }
 
   public final class PropertyKeysKt {
@@ -76,11 +76,11 @@
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
 
   public final class PxPropKey implements androidx.compose.animation.core.PropKey<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> {
@@ -91,12 +91,12 @@
     property public androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
-  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
+  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
     ctor public RectPropKey(String label);
     ctor public RectPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
   }
 
   public final class SingleValueAnimationKt {
@@ -104,9 +104,9 @@
     method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.geometry.Offset animate(androidx.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Offset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
@@ -128,15 +128,15 @@
     method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
     return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-BkRcQCA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Size> animSpec = remember({ 
-    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Size,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-Xol1pig(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
 
   public final class TransitionKt {
diff --git a/ui/ui-animation/api/public_plus_experimental_current.txt b/ui/ui-animation/api/public_plus_experimental_current.txt
index 4424440..7700298 100644
--- a/ui/ui-animation/api/public_plus_experimental_current.txt
+++ b/ui/ui-animation/api/public_plus_experimental_current.txt
@@ -62,12 +62,12 @@
     method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
-  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
+  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
     ctor public OffsetPropKey(String label);
     ctor public OffsetPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
   }
 
   public final class PropertyKeysKt {
@@ -76,11 +76,11 @@
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
 
   public final class PxPropKey implements androidx.compose.animation.core.PropKey<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> {
@@ -91,12 +91,12 @@
     property public androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
-  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
+  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
     ctor public RectPropKey(String label);
     ctor public RectPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
   }
 
   public final class SingleValueAnimationKt {
@@ -104,9 +104,9 @@
     method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.geometry.Offset animate(androidx.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Offset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
@@ -128,15 +128,15 @@
     method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
     return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-BkRcQCA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Size> animSpec = remember({ 
-    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Size,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-Xol1pig(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
 
   public final class TransitionKt {
diff --git a/ui/ui-animation/api/restricted_0.1.0-dev16.txt b/ui/ui-animation/api/restricted_0.1.0-dev16.txt
index 4424440..7700298 100644
--- a/ui/ui-animation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-animation/api/restricted_0.1.0-dev16.txt
@@ -62,12 +62,12 @@
     method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
-  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
+  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
     ctor public OffsetPropKey(String label);
     ctor public OffsetPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
   }
 
   public final class PropertyKeysKt {
@@ -76,11 +76,11 @@
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
 
   public final class PxPropKey implements androidx.compose.animation.core.PropKey<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> {
@@ -91,12 +91,12 @@
     property public androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
-  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
+  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
     ctor public RectPropKey(String label);
     ctor public RectPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
   }
 
   public final class SingleValueAnimationKt {
@@ -104,9 +104,9 @@
     method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.geometry.Offset animate(androidx.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Offset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
@@ -128,15 +128,15 @@
     method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
     return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-BkRcQCA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Size> animSpec = remember({ 
-    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Size,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-Xol1pig(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
 
   public final class TransitionKt {
diff --git a/ui/ui-animation/api/restricted_current.txt b/ui/ui-animation/api/restricted_current.txt
index 4424440..7700298 100644
--- a/ui/ui-animation/api/restricted_current.txt
+++ b/ui/ui-animation/api/restricted_current.txt
@@ -62,12 +62,12 @@
     method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
-  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
+  public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
     ctor public OffsetPropKey(String label);
     ctor public OffsetPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> typeConverter;
   }
 
   public final class PropertyKeysKt {
@@ -76,11 +76,11 @@
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
 
   public final class PxPropKey implements androidx.compose.animation.core.PropKey<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> {
@@ -91,12 +91,12 @@
     property public androidx.compose.animation.core.TwoWayConverter<java.lang.Float,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
-  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
+  public final class RectPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> {
     ctor public RectPropKey(String label);
     ctor public RectPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> typeConverter;
   }
 
   public final class SingleValueAnimationKt {
@@ -104,9 +104,9 @@
     method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.geometry.Offset animate(androidx.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Offset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
@@ -128,15 +128,15 @@
     method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
     return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-BkRcQCA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.geometry.Size> animSpec = remember({ 
-    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Size,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
 }), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-Xol1pig(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.ui.graphics.Color,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
 
   public final class TransitionKt {
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt
index ec055cf..b69dca6 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt
@@ -35,8 +35,8 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxWidth
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt
index 82163e2..9d6b141 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt
@@ -28,8 +28,8 @@
 import androidx.ui.core.gesture.rawDragGestureFilter
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt
index 60e3a93..06f26f9 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt
@@ -26,8 +26,8 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.compose.foundation.Canvas
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt
index 0d557c3..a7164dc 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt
@@ -29,9 +29,9 @@
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.clickable
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt
index b81848d..36fc460 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt
@@ -27,8 +27,8 @@
 import androidx.ui.core.gesture.rawDragGestureFilter
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt
index c096fac..4890071 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt
@@ -33,8 +33,8 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.background
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt
index 0510244..b830035 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt
@@ -33,7 +33,7 @@
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Canvas
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt
index 090fc69..d8acf67 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt
@@ -32,8 +32,8 @@
 import androidx.ui.core.onPositioned
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
index 22d6514..90a7a3b 100644
--- a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
+++ b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
@@ -29,7 +29,7 @@
 import androidx.compose.setValue
 import androidx.test.filters.MediumTest
 import androidx.compose.foundation.Box
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.lerp
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
index 0994d50..1ddb8bc 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
@@ -22,8 +22,8 @@
 import androidx.compose.animation.core.FloatToVectorConverter
 import androidx.compose.animation.core.PropKey
 import androidx.compose.animation.core.TwoWayConverter
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.colorspace.ColorSpace
 import androidx.ui.graphics.colorspace.ColorSpaces
@@ -33,7 +33,7 @@
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.Position
 import androidx.ui.unit.PxBounds
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
index 2908609..3c74dcb 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
@@ -27,8 +27,8 @@
 import androidx.compose.onCommit
 import androidx.compose.remember
 import androidx.ui.core.AnimationClockAmbient
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.unit.Bounds
 import androidx.ui.unit.Dp
diff --git a/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt b/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
index 3678306..f8235d1 100644
--- a/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
+++ b/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
@@ -19,10 +19,10 @@
 import androidx.compose.animation.core.AnimationVector1D
 import androidx.compose.animation.core.AnimationVector2D
 import androidx.compose.animation.core.AnimationVector4D
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.colorspace.ColorSpaces
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 import junit.framework.TestCase.assertEquals
 import org.junit.Test
diff --git a/ui/ui-animation/src/test/kotlin/androidx/compose/animation/PropertyKeyTest.kt b/ui/ui-animation/src/test/kotlin/androidx/compose/animation/PropertyKeyTest.kt
index 0980193..b22da35 100644
--- a/ui/ui-animation/src/test/kotlin/androidx/compose/animation/PropertyKeyTest.kt
+++ b/ui/ui-animation/src/test/kotlin/androidx/compose/animation/PropertyKeyTest.kt
@@ -21,7 +21,7 @@
 import androidx.compose.animation.core.createAnimation
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import junit.framework.TestCase.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/api/0.1.0-dev16.txt b/ui/ui-core/api/0.1.0-dev16.txt
index ee6afc2..b2ae251 100644
--- a/ui/ui-core/api/0.1.0-dev16.txt
+++ b/ui/ui-core/api/0.1.0-dev16.txt
@@ -26,16 +26,16 @@
   }
 
   public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> component1();
-    method public androidx.ui.geometry.Rect? component2();
+    method public androidx.compose.ui.geometry.Rect? component2();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? component3();
-    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> getAutofillTypes();
-    method public androidx.ui.geometry.Rect? getBoundingBox();
+    method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
-    method public void setBoundingBox(androidx.ui.geometry.Rect? p);
+    method public void setBoundingBox(androidx.compose.ui.geometry.Rect? p);
     property public final int id;
   }
 
@@ -272,13 +272,13 @@
   }
 
   @androidx.compose.Immutable public final class ConsumedData {
-    ctor public ConsumedData(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
-    method public androidx.ui.geometry.Offset component1();
+    method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
-    method public androidx.ui.geometry.Offset getPositionChange();
+    method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
 
   public abstract class ContentDrawScope extends androidx.ui.graphics.drawscope.DrawScope {
@@ -287,7 +287,7 @@
   }
 
   @androidx.compose.Stable public interface ContentScale {
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
 
@@ -386,7 +386,7 @@
     method public float component1();
     method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
 
   public final class HorizontalAlignmentLine extends androidx.ui.core.AlignmentLine {
@@ -429,15 +429,15 @@
 
   public interface LayoutCoordinates {
     method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
-    method public androidx.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.ui.geometry.Offset childLocal);
+    method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.geometry.Offset globalToLocal(androidx.ui.geometry.Offset global);
+    method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
-    method public androidx.ui.geometry.Offset localToGlobal(androidx.ui.geometry.Offset local);
-    method public androidx.ui.geometry.Offset localToRoot(androidx.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToRoot(androidx.compose.ui.geometry.Offset local);
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
@@ -448,9 +448,9 @@
     method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
   }
 
   public final class LayoutIdKt {
@@ -508,7 +508,7 @@
     method public androidx.ui.core.LayoutNode? getParent();
     method public Object? getParentData();
     method public int getWidth();
-    method public void hitTest(androidx.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
+    method public void hitTest(androidx.compose.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
@@ -774,9 +774,9 @@
     method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
     method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
     property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
@@ -821,14 +821,14 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     method public androidx.ui.unit.Uptime? component1();
-    method public androidx.ui.geometry.Offset? component2();
+    method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
-    method public androidx.ui.geometry.Offset? getPosition();
+    method public androidx.compose.ui.geometry.Offset? getPosition();
     method public androidx.ui.unit.Uptime? getUptime();
   }
 
@@ -842,8 +842,8 @@
     method public static androidx.ui.core.PointerInputChange consumeAllChanges(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumeDownChange(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumePositionChange(androidx.ui.core.PointerInputChange, float consumedDx, float consumedDy);
-    method public static androidx.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
-    method public static androidx.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
     method public static boolean positionChanged(androidx.ui.core.PointerInputChange);
     method public static boolean positionChangedIgnoreConsumed(androidx.ui.core.PointerInputChange);
   }
@@ -1072,7 +1072,7 @@
   }
 
   public final class DoubleTapGestureFilterKt {
-    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
+    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
   }
 
   public final class DragGestureFilterKt {
@@ -1081,9 +1081,9 @@
 
   public interface DragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class DragSlopExceededGestureFilterKt {
@@ -1103,18 +1103,18 @@
 
   public interface LongPressDragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
     method public default void onDragStart();
-    method public default void onLongPress(androidx.ui.geometry.Offset pxPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default void onLongPress(androidx.compose.ui.geometry.Offset pxPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class LongPressGestureFilterKt {
-    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onLongPress);
+    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onLongPress);
   }
 
   public final class PressIndicatorGestureFilterKt {
-    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
+    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
   }
 
   public final class RawDragGestureFilterKt {
@@ -1122,7 +1122,7 @@
   }
 
   public final class RawPressStartGestureFilterKt {
-    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
+    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
   }
 
   public final class RawScaleGestureFilterKt {
@@ -1157,7 +1157,7 @@
   public interface ScrollCallback {
     method public default void onCancel();
     method public default float onScroll(float scrollDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
     method public default void onStop(float velocity);
   }
 
@@ -1166,7 +1166,7 @@
   }
 
   public final class TapGestureFilterKt {
-    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onTap);
+    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTap);
   }
 
 }
@@ -1225,7 +1225,7 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.ui.geometry.Offset position);
+    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
     method public androidx.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
@@ -1924,10 +1924,10 @@
 package androidx.ui.core.selection {
 
   public interface Selectable {
-    method public androidx.ui.geometry.Rect getBoundingBox(int offset);
-    method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
+    method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.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.core.selection.Selection? getSelection(androidx.compose.ui.geometry.Offset startPosition, androidx.compose.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
@@ -2020,11 +2020,11 @@
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
     method public androidx.ui.unit.PxBounds getGlobalBounds();
-    method public androidx.ui.geometry.Offset getGlobalPosition();
+    method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
-    method public androidx.ui.geometry.Offset getPositionInRoot();
+    method public androidx.compose.ui.geometry.Offset getPositionInRoot();
     method public androidx.ui.unit.IntSize getSize();
     method public boolean isRoot();
     property public final androidx.ui.unit.PxBounds boundsInRoot;
@@ -2032,11 +2032,11 @@
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
     property public final androidx.ui.unit.PxBounds globalBounds;
-    property public final androidx.ui.geometry.Offset globalPosition;
+    property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
-    property public final androidx.ui.geometry.Offset positionInRoot;
+    property public final androidx.compose.ui.geometry.Offset positionInRoot;
     property public final androidx.ui.unit.IntSize size;
   }
 
@@ -2064,7 +2064,7 @@
   public interface TextToolbar {
     method public androidx.ui.core.texttoolbar.TextToolbarStatus getStatus();
     method public void hide();
-    method public void showMenu(androidx.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
+    method public void showMenu(androidx.compose.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
     property public abstract androidx.ui.core.texttoolbar.TextToolbarStatus status;
   }
 
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index ee6afc2..b2ae251 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -26,16 +26,16 @@
   }
 
   public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> component1();
-    method public androidx.ui.geometry.Rect? component2();
+    method public androidx.compose.ui.geometry.Rect? component2();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? component3();
-    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> getAutofillTypes();
-    method public androidx.ui.geometry.Rect? getBoundingBox();
+    method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
-    method public void setBoundingBox(androidx.ui.geometry.Rect? p);
+    method public void setBoundingBox(androidx.compose.ui.geometry.Rect? p);
     property public final int id;
   }
 
@@ -272,13 +272,13 @@
   }
 
   @androidx.compose.Immutable public final class ConsumedData {
-    ctor public ConsumedData(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
-    method public androidx.ui.geometry.Offset component1();
+    method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
-    method public androidx.ui.geometry.Offset getPositionChange();
+    method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
 
   public abstract class ContentDrawScope extends androidx.ui.graphics.drawscope.DrawScope {
@@ -287,7 +287,7 @@
   }
 
   @androidx.compose.Stable public interface ContentScale {
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
 
@@ -386,7 +386,7 @@
     method public float component1();
     method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
 
   public final class HorizontalAlignmentLine extends androidx.ui.core.AlignmentLine {
@@ -429,15 +429,15 @@
 
   public interface LayoutCoordinates {
     method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
-    method public androidx.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.ui.geometry.Offset childLocal);
+    method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.geometry.Offset globalToLocal(androidx.ui.geometry.Offset global);
+    method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
-    method public androidx.ui.geometry.Offset localToGlobal(androidx.ui.geometry.Offset local);
-    method public androidx.ui.geometry.Offset localToRoot(androidx.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToRoot(androidx.compose.ui.geometry.Offset local);
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
@@ -448,9 +448,9 @@
     method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
   }
 
   public final class LayoutIdKt {
@@ -508,7 +508,7 @@
     method public androidx.ui.core.LayoutNode? getParent();
     method public Object? getParentData();
     method public int getWidth();
-    method public void hitTest(androidx.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
+    method public void hitTest(androidx.compose.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
@@ -774,9 +774,9 @@
     method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
     method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
     property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
@@ -821,14 +821,14 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     method public androidx.ui.unit.Uptime? component1();
-    method public androidx.ui.geometry.Offset? component2();
+    method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
-    method public androidx.ui.geometry.Offset? getPosition();
+    method public androidx.compose.ui.geometry.Offset? getPosition();
     method public androidx.ui.unit.Uptime? getUptime();
   }
 
@@ -842,8 +842,8 @@
     method public static androidx.ui.core.PointerInputChange consumeAllChanges(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumeDownChange(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumePositionChange(androidx.ui.core.PointerInputChange, float consumedDx, float consumedDy);
-    method public static androidx.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
-    method public static androidx.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
     method public static boolean positionChanged(androidx.ui.core.PointerInputChange);
     method public static boolean positionChangedIgnoreConsumed(androidx.ui.core.PointerInputChange);
   }
@@ -1072,7 +1072,7 @@
   }
 
   public final class DoubleTapGestureFilterKt {
-    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
+    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
   }
 
   public final class DragGestureFilterKt {
@@ -1081,9 +1081,9 @@
 
   public interface DragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class DragSlopExceededGestureFilterKt {
@@ -1103,18 +1103,18 @@
 
   public interface LongPressDragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
     method public default void onDragStart();
-    method public default void onLongPress(androidx.ui.geometry.Offset pxPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default void onLongPress(androidx.compose.ui.geometry.Offset pxPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class LongPressGestureFilterKt {
-    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onLongPress);
+    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onLongPress);
   }
 
   public final class PressIndicatorGestureFilterKt {
-    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
+    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
   }
 
   public final class RawDragGestureFilterKt {
@@ -1122,7 +1122,7 @@
   }
 
   public final class RawPressStartGestureFilterKt {
-    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
+    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
   }
 
   public final class RawScaleGestureFilterKt {
@@ -1157,7 +1157,7 @@
   public interface ScrollCallback {
     method public default void onCancel();
     method public default float onScroll(float scrollDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
     method public default void onStop(float velocity);
   }
 
@@ -1166,7 +1166,7 @@
   }
 
   public final class TapGestureFilterKt {
-    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onTap);
+    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTap);
   }
 
 }
@@ -1225,7 +1225,7 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.ui.geometry.Offset position);
+    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
     method public androidx.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
@@ -1924,10 +1924,10 @@
 package androidx.ui.core.selection {
 
   public interface Selectable {
-    method public androidx.ui.geometry.Rect getBoundingBox(int offset);
-    method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
+    method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.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.core.selection.Selection? getSelection(androidx.compose.ui.geometry.Offset startPosition, androidx.compose.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
@@ -2020,11 +2020,11 @@
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
     method public androidx.ui.unit.PxBounds getGlobalBounds();
-    method public androidx.ui.geometry.Offset getGlobalPosition();
+    method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
-    method public androidx.ui.geometry.Offset getPositionInRoot();
+    method public androidx.compose.ui.geometry.Offset getPositionInRoot();
     method public androidx.ui.unit.IntSize getSize();
     method public boolean isRoot();
     property public final androidx.ui.unit.PxBounds boundsInRoot;
@@ -2032,11 +2032,11 @@
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
     property public final androidx.ui.unit.PxBounds globalBounds;
-    property public final androidx.ui.geometry.Offset globalPosition;
+    property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
-    property public final androidx.ui.geometry.Offset positionInRoot;
+    property public final androidx.compose.ui.geometry.Offset positionInRoot;
     property public final androidx.ui.unit.IntSize size;
   }
 
@@ -2064,7 +2064,7 @@
   public interface TextToolbar {
     method public androidx.ui.core.texttoolbar.TextToolbarStatus getStatus();
     method public void hide();
-    method public void showMenu(androidx.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
+    method public void showMenu(androidx.compose.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
     property public abstract androidx.ui.core.texttoolbar.TextToolbarStatus status;
   }
 
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 ee6afc2..b2ae251 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
@@ -26,16 +26,16 @@
   }
 
   public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> component1();
-    method public androidx.ui.geometry.Rect? component2();
+    method public androidx.compose.ui.geometry.Rect? component2();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? component3();
-    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> getAutofillTypes();
-    method public androidx.ui.geometry.Rect? getBoundingBox();
+    method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
-    method public void setBoundingBox(androidx.ui.geometry.Rect? p);
+    method public void setBoundingBox(androidx.compose.ui.geometry.Rect? p);
     property public final int id;
   }
 
@@ -272,13 +272,13 @@
   }
 
   @androidx.compose.Immutable public final class ConsumedData {
-    ctor public ConsumedData(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
-    method public androidx.ui.geometry.Offset component1();
+    method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
-    method public androidx.ui.geometry.Offset getPositionChange();
+    method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
 
   public abstract class ContentDrawScope extends androidx.ui.graphics.drawscope.DrawScope {
@@ -287,7 +287,7 @@
   }
 
   @androidx.compose.Stable public interface ContentScale {
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
 
@@ -386,7 +386,7 @@
     method public float component1();
     method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
 
   public final class HorizontalAlignmentLine extends androidx.ui.core.AlignmentLine {
@@ -429,15 +429,15 @@
 
   public interface LayoutCoordinates {
     method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
-    method public androidx.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.ui.geometry.Offset childLocal);
+    method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.geometry.Offset globalToLocal(androidx.ui.geometry.Offset global);
+    method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
-    method public androidx.ui.geometry.Offset localToGlobal(androidx.ui.geometry.Offset local);
-    method public androidx.ui.geometry.Offset localToRoot(androidx.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToRoot(androidx.compose.ui.geometry.Offset local);
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
@@ -448,9 +448,9 @@
     method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
   }
 
   public final class LayoutIdKt {
@@ -508,7 +508,7 @@
     method public androidx.ui.core.LayoutNode? getParent();
     method public Object? getParentData();
     method public int getWidth();
-    method public void hitTest(androidx.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
+    method public void hitTest(androidx.compose.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
@@ -774,9 +774,9 @@
     method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
     method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
     property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
@@ -821,14 +821,14 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     method public androidx.ui.unit.Uptime? component1();
-    method public androidx.ui.geometry.Offset? component2();
+    method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
-    method public androidx.ui.geometry.Offset? getPosition();
+    method public androidx.compose.ui.geometry.Offset? getPosition();
     method public androidx.ui.unit.Uptime? getUptime();
   }
 
@@ -842,8 +842,8 @@
     method public static androidx.ui.core.PointerInputChange consumeAllChanges(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumeDownChange(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumePositionChange(androidx.ui.core.PointerInputChange, float consumedDx, float consumedDy);
-    method public static androidx.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
-    method public static androidx.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
     method public static boolean positionChanged(androidx.ui.core.PointerInputChange);
     method public static boolean positionChangedIgnoreConsumed(androidx.ui.core.PointerInputChange);
   }
@@ -1072,7 +1072,7 @@
   }
 
   public final class DoubleTapGestureFilterKt {
-    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
+    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
   }
 
   public final class DragGestureFilterKt {
@@ -1081,9 +1081,9 @@
 
   public interface DragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class DragSlopExceededGestureFilterKt {
@@ -1103,18 +1103,18 @@
 
   public interface LongPressDragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
     method public default void onDragStart();
-    method public default void onLongPress(androidx.ui.geometry.Offset pxPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default void onLongPress(androidx.compose.ui.geometry.Offset pxPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class LongPressGestureFilterKt {
-    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onLongPress);
+    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onLongPress);
   }
 
   public final class PressIndicatorGestureFilterKt {
-    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
+    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
   }
 
   public final class RawDragGestureFilterKt {
@@ -1122,7 +1122,7 @@
   }
 
   public final class RawPressStartGestureFilterKt {
-    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
+    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
   }
 
   public final class RawScaleGestureFilterKt {
@@ -1157,7 +1157,7 @@
   public interface ScrollCallback {
     method public default void onCancel();
     method public default float onScroll(float scrollDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
     method public default void onStop(float velocity);
   }
 
@@ -1166,7 +1166,7 @@
   }
 
   public final class TapGestureFilterKt {
-    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onTap);
+    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTap);
   }
 
 }
@@ -1225,7 +1225,7 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.ui.geometry.Offset position);
+    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
     method public androidx.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
@@ -1924,10 +1924,10 @@
 package androidx.ui.core.selection {
 
   public interface Selectable {
-    method public androidx.ui.geometry.Rect getBoundingBox(int offset);
-    method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
+    method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.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.core.selection.Selection? getSelection(androidx.compose.ui.geometry.Offset startPosition, androidx.compose.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
@@ -2020,11 +2020,11 @@
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
     method public androidx.ui.unit.PxBounds getGlobalBounds();
-    method public androidx.ui.geometry.Offset getGlobalPosition();
+    method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
-    method public androidx.ui.geometry.Offset getPositionInRoot();
+    method public androidx.compose.ui.geometry.Offset getPositionInRoot();
     method public androidx.ui.unit.IntSize getSize();
     method public boolean isRoot();
     property public final androidx.ui.unit.PxBounds boundsInRoot;
@@ -2032,11 +2032,11 @@
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
     property public final androidx.ui.unit.PxBounds globalBounds;
-    property public final androidx.ui.geometry.Offset globalPosition;
+    property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
-    property public final androidx.ui.geometry.Offset positionInRoot;
+    property public final androidx.compose.ui.geometry.Offset positionInRoot;
     property public final androidx.ui.unit.IntSize size;
   }
 
@@ -2064,7 +2064,7 @@
   public interface TextToolbar {
     method public androidx.ui.core.texttoolbar.TextToolbarStatus getStatus();
     method public void hide();
-    method public void showMenu(androidx.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
+    method public void showMenu(androidx.compose.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
     property public abstract androidx.ui.core.texttoolbar.TextToolbarStatus status;
   }
 
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index ee6afc2..b2ae251 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -26,16 +26,16 @@
   }
 
   public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> component1();
-    method public androidx.ui.geometry.Rect? component2();
+    method public androidx.compose.ui.geometry.Rect? component2();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? component3();
-    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> getAutofillTypes();
-    method public androidx.ui.geometry.Rect? getBoundingBox();
+    method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
-    method public void setBoundingBox(androidx.ui.geometry.Rect? p);
+    method public void setBoundingBox(androidx.compose.ui.geometry.Rect? p);
     property public final int id;
   }
 
@@ -272,13 +272,13 @@
   }
 
   @androidx.compose.Immutable public final class ConsumedData {
-    ctor public ConsumedData(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
-    method public androidx.ui.geometry.Offset component1();
+    method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
-    method public androidx.ui.geometry.Offset getPositionChange();
+    method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
 
   public abstract class ContentDrawScope extends androidx.ui.graphics.drawscope.DrawScope {
@@ -287,7 +287,7 @@
   }
 
   @androidx.compose.Stable public interface ContentScale {
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
 
@@ -386,7 +386,7 @@
     method public float component1();
     method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
 
   public final class HorizontalAlignmentLine extends androidx.ui.core.AlignmentLine {
@@ -429,15 +429,15 @@
 
   public interface LayoutCoordinates {
     method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
-    method public androidx.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.ui.geometry.Offset childLocal);
+    method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.geometry.Offset globalToLocal(androidx.ui.geometry.Offset global);
+    method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
-    method public androidx.ui.geometry.Offset localToGlobal(androidx.ui.geometry.Offset local);
-    method public androidx.ui.geometry.Offset localToRoot(androidx.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToRoot(androidx.compose.ui.geometry.Offset local);
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
@@ -448,9 +448,9 @@
     method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
   }
 
   public final class LayoutIdKt {
@@ -508,7 +508,7 @@
     method public androidx.ui.core.LayoutNode? getParent();
     method public Object? getParentData();
     method public int getWidth();
-    method public void hitTest(androidx.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
+    method public void hitTest(androidx.compose.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
@@ -774,9 +774,9 @@
     method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
     method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
     property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
@@ -821,14 +821,14 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     method public androidx.ui.unit.Uptime? component1();
-    method public androidx.ui.geometry.Offset? component2();
+    method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
-    method public androidx.ui.geometry.Offset? getPosition();
+    method public androidx.compose.ui.geometry.Offset? getPosition();
     method public androidx.ui.unit.Uptime? getUptime();
   }
 
@@ -842,8 +842,8 @@
     method public static androidx.ui.core.PointerInputChange consumeAllChanges(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumeDownChange(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumePositionChange(androidx.ui.core.PointerInputChange, float consumedDx, float consumedDy);
-    method public static androidx.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
-    method public static androidx.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
     method public static boolean positionChanged(androidx.ui.core.PointerInputChange);
     method public static boolean positionChangedIgnoreConsumed(androidx.ui.core.PointerInputChange);
   }
@@ -1072,7 +1072,7 @@
   }
 
   public final class DoubleTapGestureFilterKt {
-    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
+    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
   }
 
   public final class DragGestureFilterKt {
@@ -1081,9 +1081,9 @@
 
   public interface DragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class DragSlopExceededGestureFilterKt {
@@ -1103,18 +1103,18 @@
 
   public interface LongPressDragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
     method public default void onDragStart();
-    method public default void onLongPress(androidx.ui.geometry.Offset pxPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default void onLongPress(androidx.compose.ui.geometry.Offset pxPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class LongPressGestureFilterKt {
-    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onLongPress);
+    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onLongPress);
   }
 
   public final class PressIndicatorGestureFilterKt {
-    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
+    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
   }
 
   public final class RawDragGestureFilterKt {
@@ -1122,7 +1122,7 @@
   }
 
   public final class RawPressStartGestureFilterKt {
-    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
+    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
   }
 
   public final class RawScaleGestureFilterKt {
@@ -1157,7 +1157,7 @@
   public interface ScrollCallback {
     method public default void onCancel();
     method public default float onScroll(float scrollDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
     method public default void onStop(float velocity);
   }
 
@@ -1166,7 +1166,7 @@
   }
 
   public final class TapGestureFilterKt {
-    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onTap);
+    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTap);
   }
 
 }
@@ -1225,7 +1225,7 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.ui.geometry.Offset position);
+    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
     method public androidx.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
@@ -1924,10 +1924,10 @@
 package androidx.ui.core.selection {
 
   public interface Selectable {
-    method public androidx.ui.geometry.Rect getBoundingBox(int offset);
-    method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
+    method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.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.core.selection.Selection? getSelection(androidx.compose.ui.geometry.Offset startPosition, androidx.compose.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
@@ -2020,11 +2020,11 @@
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
     method public androidx.ui.unit.PxBounds getGlobalBounds();
-    method public androidx.ui.geometry.Offset getGlobalPosition();
+    method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
-    method public androidx.ui.geometry.Offset getPositionInRoot();
+    method public androidx.compose.ui.geometry.Offset getPositionInRoot();
     method public androidx.ui.unit.IntSize getSize();
     method public boolean isRoot();
     property public final androidx.ui.unit.PxBounds boundsInRoot;
@@ -2032,11 +2032,11 @@
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
     property public final androidx.ui.unit.PxBounds globalBounds;
-    property public final androidx.ui.geometry.Offset globalPosition;
+    property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
-    property public final androidx.ui.geometry.Offset positionInRoot;
+    property public final androidx.compose.ui.geometry.Offset positionInRoot;
     property public final androidx.ui.unit.IntSize size;
   }
 
@@ -2064,7 +2064,7 @@
   public interface TextToolbar {
     method public androidx.ui.core.texttoolbar.TextToolbarStatus getStatus();
     method public void hide();
-    method public void showMenu(androidx.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
+    method public void showMenu(androidx.compose.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
     property public abstract androidx.ui.core.texttoolbar.TextToolbarStatus status;
   }
 
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 9faef54..6404bbc 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev16.txt
@@ -26,16 +26,16 @@
   }
 
   public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> component1();
-    method public androidx.ui.geometry.Rect? component2();
+    method public androidx.compose.ui.geometry.Rect? component2();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? component3();
-    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> getAutofillTypes();
-    method public androidx.ui.geometry.Rect? getBoundingBox();
+    method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
-    method public void setBoundingBox(androidx.ui.geometry.Rect? p);
+    method public void setBoundingBox(androidx.compose.ui.geometry.Rect? p);
     property public final int id;
   }
 
@@ -278,13 +278,13 @@
   }
 
   @androidx.compose.Immutable public final class ConsumedData {
-    ctor public ConsumedData(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
-    method public androidx.ui.geometry.Offset component1();
+    method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
-    method public androidx.ui.geometry.Offset getPositionChange();
+    method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
 
   public abstract class ContentDrawScope extends androidx.ui.graphics.drawscope.DrawScope {
@@ -293,7 +293,7 @@
   }
 
   @androidx.compose.Stable public interface ContentScale {
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
 
@@ -406,7 +406,7 @@
     method public float component1();
     method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
 
   public final class HorizontalAlignmentLine extends androidx.ui.core.AlignmentLine {
@@ -473,7 +473,7 @@
     method @androidx.compose.Stable public int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public long toSp(float);
     method @androidx.compose.Stable public long toSp(int);
     method @androidx.compose.Stable public long toSp-ipo6vVg(float);
@@ -481,15 +481,15 @@
 
   public interface LayoutCoordinates {
     method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
-    method public androidx.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.ui.geometry.Offset childLocal);
+    method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.geometry.Offset globalToLocal(androidx.ui.geometry.Offset global);
+    method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
-    method public androidx.ui.geometry.Offset localToGlobal(androidx.ui.geometry.Offset local);
-    method public androidx.ui.geometry.Offset localToRoot(androidx.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToRoot(androidx.compose.ui.geometry.Offset local);
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
@@ -500,9 +500,9 @@
     method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
   }
 
   @kotlin.PublishedApi internal final class LayoutEmitHelper {
@@ -571,7 +571,7 @@
     method public androidx.ui.core.LayoutNode? getParent();
     method public Object? getParentData();
     method public int getWidth();
-    method public void hitTest(androidx.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
+    method public void hitTest(androidx.compose.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
@@ -837,9 +837,9 @@
     method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
     method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
     property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
@@ -884,14 +884,14 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     method public androidx.ui.unit.Uptime? component1();
-    method public androidx.ui.geometry.Offset? component2();
+    method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
-    method public androidx.ui.geometry.Offset? getPosition();
+    method public androidx.compose.ui.geometry.Offset? getPosition();
     method public androidx.ui.unit.Uptime? getUptime();
   }
 
@@ -905,8 +905,8 @@
     method public static androidx.ui.core.PointerInputChange consumeAllChanges(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumeDownChange(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumePositionChange(androidx.ui.core.PointerInputChange, float consumedDx, float consumedDy);
-    method public static androidx.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
-    method public static androidx.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
     method public static boolean positionChanged(androidx.ui.core.PointerInputChange);
     method public static boolean positionChangedIgnoreConsumed(androidx.ui.core.PointerInputChange);
   }
@@ -1135,7 +1135,7 @@
   }
 
   public final class DoubleTapGestureFilterKt {
-    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
+    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
   }
 
   public final class DragGestureFilterKt {
@@ -1144,9 +1144,9 @@
 
   public interface DragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class DragSlopExceededGestureFilterKt {
@@ -1166,18 +1166,18 @@
 
   public interface LongPressDragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
     method public default void onDragStart();
-    method public default void onLongPress(androidx.ui.geometry.Offset pxPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default void onLongPress(androidx.compose.ui.geometry.Offset pxPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class LongPressGestureFilterKt {
-    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onLongPress);
+    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onLongPress);
   }
 
   public final class PressIndicatorGestureFilterKt {
-    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
+    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
   }
 
   public final class RawDragGestureFilterKt {
@@ -1185,7 +1185,7 @@
   }
 
   public final class RawPressStartGestureFilterKt {
-    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
+    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
   }
 
   public final class RawScaleGestureFilterKt {
@@ -1220,7 +1220,7 @@
   public interface ScrollCallback {
     method public default void onCancel();
     method public default float onScroll(float scrollDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
     method public default void onStop(float velocity);
   }
 
@@ -1229,7 +1229,7 @@
   }
 
   public final class TapGestureFilterKt {
-    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onTap);
+    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTap);
   }
 
 }
@@ -1288,7 +1288,7 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.ui.geometry.Offset position);
+    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
     method public androidx.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
@@ -1987,10 +1987,10 @@
 package androidx.ui.core.selection {
 
   public interface Selectable {
-    method public androidx.ui.geometry.Rect getBoundingBox(int offset);
-    method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
+    method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.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.core.selection.Selection? getSelection(androidx.compose.ui.geometry.Offset startPosition, androidx.compose.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
@@ -2083,11 +2083,11 @@
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
     method public androidx.ui.unit.PxBounds getGlobalBounds();
-    method public androidx.ui.geometry.Offset getGlobalPosition();
+    method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
-    method public androidx.ui.geometry.Offset getPositionInRoot();
+    method public androidx.compose.ui.geometry.Offset getPositionInRoot();
     method public androidx.ui.unit.IntSize getSize();
     method public boolean isRoot();
     property public final androidx.ui.unit.PxBounds boundsInRoot;
@@ -2095,11 +2095,11 @@
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
     property public final androidx.ui.unit.PxBounds globalBounds;
-    property public final androidx.ui.geometry.Offset globalPosition;
+    property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
-    property public final androidx.ui.geometry.Offset positionInRoot;
+    property public final androidx.compose.ui.geometry.Offset positionInRoot;
     property public final androidx.ui.unit.IntSize size;
   }
 
@@ -2127,7 +2127,7 @@
   public interface TextToolbar {
     method public androidx.ui.core.texttoolbar.TextToolbarStatus getStatus();
     method public void hide();
-    method public void showMenu(androidx.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
+    method public void showMenu(androidx.compose.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
     property public abstract androidx.ui.core.texttoolbar.TextToolbarStatus status;
   }
 
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index 9faef54..6404bbc 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -26,16 +26,16 @@
   }
 
   public final class AutofillNode {
-    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    ctor public AutofillNode(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> component1();
-    method public androidx.ui.geometry.Rect? component2();
+    method public androidx.compose.ui.geometry.Rect? component2();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? component3();
-    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
+    method public androidx.ui.autofill.AutofillNode copy(java.util.List<? extends androidx.ui.autofill.AutofillType> autofillTypes, androidx.compose.ui.geometry.Rect? boundingBox, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit>? onFill);
     method public java.util.List<androidx.ui.autofill.AutofillType> getAutofillTypes();
-    method public androidx.ui.geometry.Rect? getBoundingBox();
+    method public androidx.compose.ui.geometry.Rect? getBoundingBox();
     method public int getId();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit>? getOnFill();
-    method public void setBoundingBox(androidx.ui.geometry.Rect? p);
+    method public void setBoundingBox(androidx.compose.ui.geometry.Rect? p);
     property public final int id;
   }
 
@@ -278,13 +278,13 @@
   }
 
   @androidx.compose.Immutable public final class ConsumedData {
-    ctor public ConsumedData(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
-    method public androidx.ui.geometry.Offset component1();
+    method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
-    method public androidx.ui.geometry.Offset getPositionChange();
+    method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
 
   public abstract class ContentDrawScope extends androidx.ui.graphics.drawscope.DrawScope {
@@ -293,7 +293,7 @@
   }
 
   @androidx.compose.Stable public interface ContentScale {
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
 
@@ -406,7 +406,7 @@
     method public float component1();
     method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
-    method public float scale-8JNMT64(long srcSize, long dstSize);
+    method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
 
   public final class HorizontalAlignmentLine extends androidx.ui.core.AlignmentLine {
@@ -473,7 +473,7 @@
     method @androidx.compose.Stable public int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public long toSp(float);
     method @androidx.compose.Stable public long toSp(int);
     method @androidx.compose.Stable public long toSp-ipo6vVg(float);
@@ -481,15 +481,15 @@
 
   public interface LayoutCoordinates {
     method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
-    method public androidx.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.ui.geometry.Offset childLocal);
+    method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
     method public androidx.ui.unit.IntSize getSize();
-    method public androidx.ui.geometry.Offset globalToLocal(androidx.ui.geometry.Offset global);
+    method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
-    method public androidx.ui.geometry.Offset localToGlobal(androidx.ui.geometry.Offset local);
-    method public androidx.ui.geometry.Offset localToRoot(androidx.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
+    method public androidx.compose.ui.geometry.Offset localToRoot(androidx.compose.ui.geometry.Offset local);
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
@@ -500,9 +500,9 @@
     method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
     method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
-    method public static inline androidx.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
+    method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
   }
 
   @kotlin.PublishedApi internal final class LayoutEmitHelper {
@@ -571,7 +571,7 @@
     method public androidx.ui.core.LayoutNode? getParent();
     method public Object? getParentData();
     method public int getWidth();
-    method public void hitTest(androidx.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
+    method public void hitTest(androidx.compose.ui.geometry.Offset pointerPositionRelativeToScreen, java.util.List<androidx.ui.core.pointerinput.PointerInputFilter> hitPointerInputFilters);
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
@@ -837,9 +837,9 @@
     method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
     method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.geometry.Offset position);
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
     property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
@@ -884,14 +884,14 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     method public androidx.ui.unit.Uptime? component1();
-    method public androidx.ui.geometry.Offset? component2();
+    method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
-    method public androidx.ui.geometry.Offset? getPosition();
+    method public androidx.compose.ui.geometry.Offset? getPosition();
     method public androidx.ui.unit.Uptime? getUptime();
   }
 
@@ -905,8 +905,8 @@
     method public static androidx.ui.core.PointerInputChange consumeAllChanges(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumeDownChange(androidx.ui.core.PointerInputChange);
     method public static androidx.ui.core.PointerInputChange consumePositionChange(androidx.ui.core.PointerInputChange, float consumedDx, float consumedDy);
-    method public static androidx.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
-    method public static androidx.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChange(androidx.ui.core.PointerInputChange);
+    method public static androidx.compose.ui.geometry.Offset positionChangeIgnoreConsumed(androidx.ui.core.PointerInputChange);
     method public static boolean positionChanged(androidx.ui.core.PointerInputChange);
     method public static boolean positionChangedIgnoreConsumed(androidx.ui.core.PointerInputChange);
   }
@@ -1135,7 +1135,7 @@
   }
 
   public final class DoubleTapGestureFilterKt {
-    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
+    method public static androidx.ui.core.Modifier doubleTapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDoubleTap);
   }
 
   public final class DragGestureFilterKt {
@@ -1144,9 +1144,9 @@
 
   public interface DragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class DragSlopExceededGestureFilterKt {
@@ -1166,18 +1166,18 @@
 
   public interface LongPressDragObserver {
     method public default void onCancel();
-    method public default androidx.ui.geometry.Offset onDrag(androidx.ui.geometry.Offset dragDistance);
+    method public default androidx.compose.ui.geometry.Offset onDrag(androidx.compose.ui.geometry.Offset dragDistance);
     method public default void onDragStart();
-    method public default void onLongPress(androidx.ui.geometry.Offset pxPosition);
-    method public default void onStop(androidx.ui.geometry.Offset velocity);
+    method public default void onLongPress(androidx.compose.ui.geometry.Offset pxPosition);
+    method public default void onStop(androidx.compose.ui.geometry.Offset velocity);
   }
 
   public final class LongPressGestureFilterKt {
-    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onLongPress);
+    method public static androidx.ui.core.Modifier longPressGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onLongPress);
   }
 
   public final class PressIndicatorGestureFilterKt {
-    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
+    method public static androidx.ui.core.Modifier pressIndicatorGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? onStart = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onStop = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCancel = null, boolean enabled = true);
   }
 
   public final class RawDragGestureFilterKt {
@@ -1185,7 +1185,7 @@
   }
 
   public final class RawPressStartGestureFilterKt {
-    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
+    method public static androidx.ui.core.Modifier rawPressStartGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onPressStart, boolean enabled = false, androidx.ui.core.PointerEventPass executionPass = androidx.ui.core.PointerEventPass.PostUp);
   }
 
   public final class RawScaleGestureFilterKt {
@@ -1220,7 +1220,7 @@
   public interface ScrollCallback {
     method public default void onCancel();
     method public default float onScroll(float scrollDistance);
-    method public default void onStart(androidx.ui.geometry.Offset downPosition);
+    method public default void onStart(androidx.compose.ui.geometry.Offset downPosition);
     method public default void onStop(float velocity);
   }
 
@@ -1229,7 +1229,7 @@
   }
 
   public final class TapGestureFilterKt {
-    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onTap);
+    method public static androidx.ui.core.Modifier tapGestureFilter(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onTap);
   }
 
 }
@@ -1288,7 +1288,7 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.ui.geometry.Offset position);
+    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
     method public androidx.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
@@ -1987,10 +1987,10 @@
 package androidx.ui.core.selection {
 
   public interface Selectable {
-    method public androidx.ui.geometry.Rect getBoundingBox(int offset);
-    method public androidx.ui.geometry.Offset getHandlePosition(androidx.ui.core.selection.Selection selection, boolean isStartHandle);
+    method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.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.core.selection.Selection? getSelection(androidx.compose.ui.geometry.Offset startPosition, androidx.compose.ui.geometry.Offset endPosition, androidx.ui.core.LayoutCoordinates containerLayoutCoordinates, boolean longPress, androidx.ui.core.selection.Selection? previousSelection = null, boolean isStartHandle = true);
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
@@ -2083,11 +2083,11 @@
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
     method public androidx.ui.unit.PxBounds getGlobalBounds();
-    method public androidx.ui.geometry.Offset getGlobalPosition();
+    method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
-    method public androidx.ui.geometry.Offset getPositionInRoot();
+    method public androidx.compose.ui.geometry.Offset getPositionInRoot();
     method public androidx.ui.unit.IntSize getSize();
     method public boolean isRoot();
     property public final androidx.ui.unit.PxBounds boundsInRoot;
@@ -2095,11 +2095,11 @@
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
     property public final androidx.ui.unit.PxBounds globalBounds;
-    property public final androidx.ui.geometry.Offset globalPosition;
+    property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
-    property public final androidx.ui.geometry.Offset positionInRoot;
+    property public final androidx.compose.ui.geometry.Offset positionInRoot;
     property public final androidx.ui.unit.IntSize size;
   }
 
@@ -2127,7 +2127,7 @@
   public interface TextToolbar {
     method public androidx.ui.core.texttoolbar.TextToolbarStatus getStatus();
     method public void hide();
-    method public void showMenu(androidx.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
+    method public void showMenu(androidx.compose.ui.geometry.Rect rect, kotlin.jvm.functions.Function0<kotlin.Unit>? onCopyRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onPasteRequested = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onCutRequested = null);
     property public abstract androidx.ui.core.texttoolbar.TextToolbarStatus status;
   }
 
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 1e959f9..9192b5e 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
@@ -31,7 +31,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.text.input.ImeAction
 import androidx.compose.ui.text.input.KeyboardType
 import androidx.compose.ui.text.input.TextFieldValue
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt
index c371aca..57f91a0 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt
index 699b8b8..12d38fb 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
 import androidx.compose.foundation.drawBorder
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.RectangleShape
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt
index 21aff13..e29af96 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt
@@ -33,7 +33,7 @@
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
index 96a40d5..6fcae2f 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
@@ -35,7 +35,7 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
 import androidx.compose.foundation.drawBorder
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.clipRect
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt
index 6665c10..9b3f771 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt
index cad5ad1..204a48d 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt
index 06acc7a..cf7536a 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt
index 8c538af..d4210716 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt
index 6daad6c..db3785a 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt
@@ -35,7 +35,7 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
 import androidx.compose.foundation.drawBorder
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxWidth
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 1d1519c..865771e 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
@@ -33,7 +33,7 @@
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 import androidx.ui.unit.round
 
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt
index 3baa2bc..0444a3d 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt
index 8ea27ee..6443343 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt
index f27f317..453b7ae 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt
index 259973f..e32237e 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt
index 07a283c..4d808b8 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
index c815242..df3312e 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
@@ -37,7 +37,7 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
 import androidx.compose.foundation.drawBorder
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.clipRect
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt
index 16ba0cf..5e1dcc4 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt
@@ -22,7 +22,7 @@
 import androidx.ui.core.paint
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.painter.Painter
 import androidx.ui.graphics.drawscope.DrawScope
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidAutoFillTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidAutoFillTest.kt
index 4ab15c5..abdf688 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidAutoFillTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidAutoFillTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.autofill.AutofillNode
 import androidx.ui.autofill.AutofillTree
 import androidx.ui.autofill.AutofillType
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.test.android.fake.FakeViewStructure
 import androidx.ui.test.createComposeRule
 import com.google.common.truth.Truth.assertThat
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 b90cb86..57f20cd 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,7 +33,7 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.down
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.milliseconds
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt
index cc4219b..8565c7a 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.test.assertColorsEqual
 import androidx.ui.core.test.background
 import androidx.compose.foundation.Box
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
index a24c272..b0af704 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
 import androidx.compose.foundation.layout.Stack
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.inOrder
 import com.nhaarman.mockitokotlin2.spy
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt
index 86f9296..4461967 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/TouchSlopDragGestureFilterTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.setContent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.framework.test.TestActivity
 import androidx.compose.foundation.layout.Stack
 import com.nhaarman.mockitokotlin2.any
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
index 460f820..d5db86b 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.consumePositionChange
 import androidx.ui.core.positionChange
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.down
 import androidx.ui.testutils.moveTo
 import androidx.ui.unit.IntSize
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
index 428c3e2..0143456 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
@@ -33,7 +33,7 @@
 import androidx.ui.core.PointerInputData
 import androidx.ui.core.PointerInputHandler
 import androidx.ui.core.consumePositionChange
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntOffset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.Uptime
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt
index a29b1e2..2636d8c 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt
@@ -22,7 +22,7 @@
 import androidx.ui.core.PointerInputChange
 import androidx.ui.core.PointerInputData
 import androidx.ui.core.PointerInputHandler
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.Uptime
 
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt
index eaed5db..fa2ac76 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt
@@ -74,8 +74,8 @@
 import androidx.ui.core.zIndex
 import androidx.compose.foundation.drawBackground
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
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 188896d..9af4ab4 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
@@ -73,7 +73,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.drawBackground
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt
index 114f276..5cb2114 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt
@@ -28,12 +28,12 @@
 import androidx.ui.core.drawBehind
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Radius
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
index 2d73414..135d555 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
@@ -35,7 +35,7 @@
 import androidx.ui.core.pointerinput.PointerInputModifier
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.offset
 import androidx.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt
index 141dd8f..8c0ae81 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.unit.PxBounds
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.height
 import androidx.ui.unit.width
 import org.junit.Assert.assertEquals
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt
index 0163ff7..6afc78c 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt
@@ -29,8 +29,8 @@
 import androidx.ui.core.drawShadow
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Shape
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt
index c8ba473..6ddcfd9 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt
@@ -41,7 +41,7 @@
 import androidx.ui.test.performPartialGesture
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.down
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 import org.junit.Assert
 import org.junit.Rule
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt
index 6e37a8e..249e75b 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt
@@ -38,7 +38,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.unit.PxBounds
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt
index 13f283d..e45931d 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt
@@ -34,7 +34,7 @@
 import androidx.ui.core.offset
 import androidx.ui.core.onPositioned
 import androidx.ui.core.setContent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.ltr
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt
index 08c78e3..cf558a5 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt
@@ -47,7 +47,7 @@
 import androidx.ui.core.paint
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.vector.VectorPainter
 import androidx.compose.foundation.layout.Constraints
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt
index dd9d72a..af13f7b 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt
@@ -20,7 +20,7 @@
 import android.view.View
 import androidx.test.filters.SmallTest
 import androidx.ui.core.PointerEvent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.down
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
index 172194a..567a924 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/text/input/TextInputServiceAndroid.kt
@@ -23,7 +23,7 @@
 import android.view.inputmethod.EditorInfo
 import android.view.inputmethod.InputConnection
 import android.view.inputmethod.InputMethodManager
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.text.TextRange
 import kotlin.math.roundToInt
 
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 0eefb9d..3acf05a 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
@@ -43,7 +43,7 @@
 import androidx.ui.core.semantics.findChildById
 import androidx.ui.core.semantics.getAllSemanticsNodesToMap
 import androidx.ui.core.semantics.getOrNull
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.semantics.CustomAccessibilityAction
 import androidx.ui.semantics.SemanticsActions
 import androidx.ui.semantics.SemanticsActions.CustomActions
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
index 3947f6d..33e44a7 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
@@ -37,7 +37,7 @@
 import androidx.lifecycle.ViewTreeLifecycleOwner
 import androidx.lifecycle.ViewTreeViewModelStoreOwner
 import androidx.ui.core.semantics.semantics
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.semantics.popup
 import androidx.ui.unit.IntBounds
 import androidx.ui.unit.round
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt
index 672aab9..a4a3a0b 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt
@@ -18,10 +18,10 @@
 
 import android.graphics.Outline as AndroidOutline
 import android.os.Build
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.isSimple
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.isSimple
 import androidx.ui.graphics.asAndroidPath
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt
index eedf3ec..c088ee8 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt
@@ -19,7 +19,7 @@
 import android.annotation.TargetApi
 import android.graphics.Matrix
 import android.graphics.RenderNode
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.CanvasHolder
 import androidx.ui.graphics.RectangleShape
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt
index a158617..45024a8 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt
@@ -19,7 +19,7 @@
 import android.os.Build
 import android.view.View
 import android.view.ViewOutlineProvider
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.CanvasHolder
 import androidx.ui.graphics.Path
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt
index 81a376c..d6af224 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.PointerId
 import androidx.ui.core.PointerInputData
 import androidx.ui.unit.NanosecondsPerMillisecond
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Uptime
 
 /**
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/AndroidTextToolbar.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/AndroidTextToolbar.kt
index 6aa6c1a..ad4f2fc 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/AndroidTextToolbar.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/AndroidTextToolbar.kt
@@ -22,7 +22,7 @@
 import androidx.ui.core.texttoolbar.actionmodecallback.FloatingTextActionModeCallback
 import androidx.ui.core.texttoolbar.actionmodecallback.PrimaryTextActionModeCallback
 import androidx.ui.core.texttoolbar.actionmodecallback.TextActionModeCallback
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 
 /**
  * Android implementation for [TextToolbar].
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/actionmodecallback/FloatingTextActionModeCallback.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/actionmodecallback/FloatingTextActionModeCallback.kt
index f981e42..358c115 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/actionmodecallback/FloatingTextActionModeCallback.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/texttoolbar/actionmodecallback/FloatingTextActionModeCallback.kt
@@ -29,7 +29,7 @@
 internal class FloatingTextActionModeCallback(
     private val callback: ActionMode.Callback
 ) : ActionMode.Callback2() {
-    private var rect: androidx.ui.geometry.Rect = androidx.ui.geometry.Rect.zero
+    private var rect: androidx.compose.ui.geometry.Rect = androidx.compose.ui.geometry.Rect.zero
 
     override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
         return callback.onActionItemClicked(mode, item)
@@ -60,7 +60,7 @@
         )
     }
 
-    internal fun setRect(regionOfInterest: androidx.ui.geometry.Rect) {
+    internal fun setRect(regionOfInterest: androidx.compose.ui.geometry.Rect) {
         this.rect = regionOfInterest
     }
 }
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt
index 616aa31..2971edd 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.consumeAllChanges
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.milliseconds
 import androidx.ui.util.fastAny
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt
index a71b846..24b0fd5 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt
@@ -21,7 +21,7 @@
 import android.view.MotionEvent
 import android.view.MotionEvent.ACTION_CANCEL
 import androidx.ui.core.PointerEvent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Duration
 import androidx.ui.unit.NanosecondsPerMillisecond
 import androidx.ui.unit.milliseconds
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/autofill/Autofill.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/autofill/Autofill.kt
index 74edecc..ac9f416 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/autofill/Autofill.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/autofill/Autofill.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.autofill
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.util.annotation.GuardedBy
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt
index 4e6b22a..dba02b7 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import kotlin.math.max
 import kotlin.math.min
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt
index c615623..6d1d8cf 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt
@@ -22,7 +22,7 @@
 import androidx.ui.core.focus.ModifiedFocusNode2
 import androidx.ui.core.keyinput.ModifiedKeyInputNode
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
 import androidx.ui.unit.IntOffset
 import androidx.ui.util.nativeClass
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt
index 5c8a0bf..026fe05 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt
@@ -24,7 +24,7 @@
     fun compareAndSet(expected: Int, new: Int): Boolean
 }
 
-// TODO(b/160140398): rewrite depending code using androidx.ui.geometry.Rect and androidx.ui.vectormath64.Matrix3.
+// TODO(b/160140398): rewrite depending code using androidx.compose.ui.geometry.Rect and androidx.ui.vectormath64.Matrix3.
 expect class NativeRectF() {
     var left: Float
     var right: Float
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt
index c1f63d4..01a60f2 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.focus.ModifiedFocusNode2
 import androidx.ui.core.keyinput.ModifiedKeyInputNode
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt
index 568dfcc..e2686eb 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt
@@ -17,8 +17,8 @@
 package androidx.ui.core
 
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
 import androidx.ui.unit.IntOffset
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt
index b8e76fd..de05978 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.PxBounds
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt
index 8c5f22b..0ea1cb2e 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt
@@ -39,8 +39,8 @@
 import androidx.ui.core.semantics.SemanticsModifier
 import androidx.ui.core.semantics.SemanticsWrapper
 import androidx.ui.core.semantics.outerSemantics
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.ui.graphics.drawscope.drawCanvas
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt
index a561e65..87ab1ce 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt
@@ -24,8 +24,8 @@
 import androidx.ui.core.focus.ModifiedFocusNode2
 import androidx.ui.core.keyinput.ModifiedKeyInputNode
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Paint
 import androidx.ui.unit.IntOffset
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedDrawNode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedDrawNode.kt
index d8f9ee8..007ac88 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedDrawNode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedDrawNode.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 
 @OptIn(ExperimentalLayoutNodeApi::class)
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt
index 5afd41e..0834aba 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.DefaultAlpha
 import androidx.ui.graphics.drawscope.translate
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt
index fa05585..432f29b 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntOffset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.round
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt
index 25d1a58..ab8157c 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt
@@ -19,7 +19,7 @@
 import androidx.compose.Immutable
 import androidx.compose.Stable
 import androidx.ui.core.pointerinput.PointerInputEvent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.Uptime
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInputDelegatingWrapper.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInputDelegatingWrapper.kt
index 8346ece..3e8bc68 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInputDelegatingWrapper.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInputDelegatingWrapper.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 internal class PointerInputDelegatingWrapper(
     wrapped: LayoutNodeWrapper,
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt
index ada72f8..2deb288 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt
@@ -31,7 +31,7 @@
 import androidx.ui.core.gesture.customevents.DelayUpEvent
 import androidx.ui.core.gesture.customevents.DelayUpMessage
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.util.fastAny
 import kotlinx.coroutines.Job
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt
index 895ff60..cec0a6c 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.composed
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 // TODO(b/146133703): Likely rename to PanGestureDetector as per b/146133703
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt
index 9dce22d..8e7053e 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt
@@ -32,7 +32,7 @@
 import androidx.ui.core.gesture.scrollorientationlocking.ScrollOrientationLocker
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.positionChange
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import kotlin.math.abs
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt
index 6a8f94e..9197204 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt
@@ -24,7 +24,7 @@
 import androidx.ui.core.changedToUpIgnoreConsumed
 import androidx.ui.core.composed
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 
 interface LongPressDragObserver {
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt
index 4bc9c56..0fa97c8 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt
@@ -32,7 +32,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.gesture.customevents.LongPressFiredEvent
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.util.fastAny
 import kotlinx.coroutines.Job
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt
index 047e274..2751984 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.composed
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.util.fastAny
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt
index 08a9cee..5a0e133 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt
@@ -38,7 +38,7 @@
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.positionChange
 import androidx.ui.unit.IntSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.util.fastAny
 import androidx.ui.util.fastForEach
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt
index b706ecc..2b59015 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.composed
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt
index 7a7b055..7d79838 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.composed
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.ui.core.gesture.scrollorientationlocking.ScrollOrientationLocker
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 /**
  * Defines the callbacks associated with scrolling.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt
index 5197bdb..80107ff 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt
@@ -31,7 +31,7 @@
 import androidx.ui.core.gesture.customevents.DelayUpEvent
 import androidx.ui.core.gesture.customevents.DelayUpMessage
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.util.fastAny
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt
index b8b2e5c..29f6498 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core.gesture.util
 
 import androidx.ui.unit.Duration
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Uptime
 import androidx.ui.unit.Velocity
 import androidx.ui.unit.inMilliseconds
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt
index b998cf3..157ca25 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.PointerInputChange
 import androidx.ui.core.PointerEvent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntOffset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.round
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 98bbf1c1..67c8c68 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
@@ -17,9 +17,9 @@
 package androidx.ui.core.selection
 
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.text.AnnotatedString
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 /**
  * Provides [Selection] information for a composable to SelectionContainer. Composables who can
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 fe1b48f..ef4c55f 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
@@ -22,7 +22,7 @@
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.drawscope.DrawScope
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 16058a1..5324640 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
@@ -30,7 +30,7 @@
 import androidx.ui.core.enforce
 import androidx.ui.core.hasFixedHeight
 import androidx.ui.core.hasFixedWidth
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.text.InternalTextApi
 import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.ui.unit.Dp
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 7d54b9f..6d22be3 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
@@ -29,11 +29,11 @@
 import androidx.ui.core.hapticfeedback.HapticFeedbackType
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.core.texttoolbar.TextToolbarStatus
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 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.compose.ui.geometry.Offset
 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/core/selection/SelectionRegistrarImpl.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionRegistrarImpl.kt
index fb56822..71d781a 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionRegistrarImpl.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionRegistrarImpl.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core.selection
 
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 internal class SelectionRegistrarImpl : SelectionRegistrar {
     /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
index f39b11b..3205204 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.globalBounds
 import androidx.ui.core.globalPosition
 import androidx.ui.core.positionInRoot
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.PxBounds
 import androidx.ui.util.fastForEach
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/texttoolbar/TextToolbar.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/texttoolbar/TextToolbar.kt
index aefab92..974885b 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/texttoolbar/TextToolbar.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/texttoolbar/TextToolbar.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.texttoolbar
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 
 internal typealias ActionCallback = () -> Unit
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/DrawCache.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/DrawCache.kt
index 6640b09..618f6d6 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/DrawCache.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/DrawCache.kt
@@ -17,8 +17,8 @@
 package androidx.ui.graphics.vector
 
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/Vector.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/Vector.kt
index 659dbf7..596af48 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/Vector.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/Vector.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics.vector
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.Color
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/VectorPainter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/VectorPainter.kt
index f392275..3d5f776 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/VectorPainter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/graphics/vector/VectorPainter.kt
@@ -26,7 +26,7 @@
 import androidx.compose.remember
 import androidx.compose.setValue
 import androidx.ui.core.DensityAmbient
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.painter.Painter
 import androidx.ui.graphics.drawscope.DrawScope
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt
index 4bf0f98..347bd48 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.PointerInputChange
 import androidx.ui.core.PointerInputData
 import androidx.ui.core.PointerInputHandler
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Duration
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.Uptime
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/ComposeUiRobolectricTestRunner.kt b/ui/ui-core/src/test/kotlin/androidx/ui/ComposeUiRobolectricTestRunner.kt
index f4cda6b..afad360 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/ComposeUiRobolectricTestRunner.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/ComposeUiRobolectricTestRunner.kt
@@ -21,22 +21,25 @@
 import org.robolectric.internal.bytecode.InstrumentationConfiguration
 
 /**
- * A [RobolectricTestRunner] for [androidx.ui].
+ * A [RobolectricTestRunner] for [androidx.compose].
  *
- * It has instrumentation turned off for the [androidx.ui] package.
+ * It has instrumentation turned off for the [androidx.compose] package.
  *
  * Robolectric tries to instrument Kotlin classes, and it throws errors when it encounters
  * companion objects and constructors with default values for parameters. We don't need
  * shadowing of our classes because we want to use the actual objects in our tests.
  *
- * We can also make the argument that no external developer should shadow any of androidx.ui, as
- * they shouldn't be testing library code. This concern is being tracked by b/139828620 which will
- * make a change to Robolectric code to prevent instrumentation of all classes under [androidx.ui].
+ * We can also make the argument that no external developer should shadow any of
+ * androidx.compose, as they shouldn't be testing library code. This concern is being tracked by
+ * b/139828620 which will make a change to Robolectric code to prevent instrumentation of all
+ * classes under [androidx.compose].
  */
 class ComposeUiRobolectricTestRunner(testClass: Class<*>) : RobolectricTestRunner(testClass) {
     override fun createClassLoaderConfig(method: FrameworkMethod?): InstrumentationConfiguration {
         val builder = InstrumentationConfiguration.Builder(super.createClassLoaderConfig(method))
+        // TODO: b/160233169 remove 'androidx.ui' when everything is migrated to androidx.compose
         builder.doNotInstrumentPackage("androidx.ui")
+        builder.doNotInstrumentPackage("androidx.compose")
         return builder.build()
     }
 }
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidAutofillTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidAutofillTest.kt
index 5baa9ce..26c0414 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidAutofillTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidAutofillTest.kt
@@ -23,7 +23,7 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.ComposeUiRobolectricTestRunner
 import androidx.ui.core.toComposeRect
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Rule
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPerformAutofillTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPerformAutofillTest.kt
index 337d854..783005e 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPerformAutofillTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPerformAutofillTest.kt
@@ -22,7 +22,7 @@
 import android.view.autofill.AutofillValue
 import androidx.test.filters.SmallTest
 import androidx.ui.ComposeUiRobolectricTestRunner
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import com.google.common.truth.Truth
 import org.junit.Before
 import org.junit.Test
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPopulateViewStructureTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPopulateViewStructureTest.kt
index 5fefbb3..5fbf410 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPopulateViewStructureTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/autofill/AndroidPopulateViewStructureTest.kt
@@ -22,7 +22,7 @@
 import androidx.autofill.HintConstants.AUTOFILL_HINT_PERSON_NAME
 import androidx.test.filters.SmallTest
 import androidx.ui.ComposeUiRobolectricTestRunner
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.test.android.fake.FakeViewStructure
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/ContentScaleTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/ContentScaleTest.kt
index aa66cf3..3c0eef5 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/ContentScaleTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/ContentScaleTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt
index 527ed70..79a8a94 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt
@@ -18,7 +18,7 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntOffset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt
index aa8c1e8..d9e4853 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Uptime
 import androidx.ui.unit.milliseconds
 import org.hamcrest.CoreMatchers.`is`
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt
index a1a4ea5..7b85e32 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.gesture.customevents.DelayUpEvent
 import androidx.ui.core.gesture.customevents.DelayUpMessage
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.consume
 import androidx.ui.testutils.down
 import androidx.ui.testutils.invokeOverAllPasses
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt
index 5b0a9cc..b4ebd93 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt
@@ -20,7 +20,7 @@
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.gesture.customevents.LongPressFiredEvent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.consume
 import androidx.ui.testutils.down
 import androidx.ui.testutils.invokeOverAllPasses
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt
index c490d82..35f5d14 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.consumeDownChange
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.consume
 import androidx.ui.testutils.down
 import androidx.ui.testutils.invokeOverAllPasses
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt
index 29dcf18..7fa3db4 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.gesture.scrollorientationlocking.InternalScrollOrientationLocker
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.ui.core.gesture.scrollorientationlocking.ShareScrollOrientationLockerEvent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.consume
 import androidx.ui.testutils.down
 import androidx.ui.testutils.invokeOverAllPasses
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt
index 4c115cc..cb510fa 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.consumeDownChange
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.down
 import androidx.ui.testutils.invokeOverAllPasses
 import androidx.ui.testutils.invokeOverPasses
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt
index 28c3495..640e523 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt
@@ -26,7 +26,7 @@
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt
index ab8ab50..f6a0ac1 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.gesture.customevents.DelayUpEvent
 import androidx.ui.core.gesture.customevents.DelayUpMessage
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.consume
 import androidx.ui.testutils.down
 import androidx.ui.testutils.invokeOverAllPasses
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
index 2e4b73f..628d1d4 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core.gesture.util
 
 import androidx.ui.core.PointerInputData
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Uptime
 import androidx.ui.unit.Velocity
 import androidx.ui.unit.milliseconds
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 83fedf9..24ae9f5 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
@@ -19,7 +19,7 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LayoutCoordinates
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.doReturn
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 473a7ce..f2820eb 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
@@ -19,7 +19,7 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LayoutCoordinates
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.anyOrNull
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 cf282f9..97de9ac 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
@@ -22,12 +22,12 @@
 import androidx.ui.core.hapticfeedback.HapticFeedback
 import androidx.ui.core.hapticfeedback.HapticFeedbackType
 import androidx.ui.core.texttoolbar.TextToolbar
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 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 androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.doReturn
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionRegistrarImplTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionRegistrarImplTest.kt
index fb1db38..7ca9f16 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionRegistrarImplTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/selection/SelectionRegistrarImplTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import com.nhaarman.mockitokotlin2.whenever
diff --git a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt
index 44fd4ad..8b8ec18 100644
--- a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt
+++ b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt
@@ -17,7 +17,7 @@
 
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.inset
 import androidx.ui.graphics.drawscope.rotate
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 96a839e..809b463 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
@@ -15,8 +15,8 @@
  */
 package androidx.ui.desktop
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.DesktopPath
 import androidx.ui.graphics.Path
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 73d6efb..01f58bc 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
@@ -23,7 +23,7 @@
 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 androidx.compose.ui.geometry.Rect
 
 import java.awt.event.KeyEvent
 
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt
index f6dd21f..509cba1 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt
@@ -20,7 +20,7 @@
 import androidx.ui.core.gesture.DragObserver
 import androidx.compose.Composable
 import androidx.ui.core.onPositioned
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import kotlin.math.max
 import androidx.compose.remember
 import androidx.compose.state
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt
index 9682623..b71dfe7 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.clipboard.ClipboardManager
 import androidx.ui.core.gesture.DragObserver
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.core.selection.Selection
 import androidx.ui.core.selection.Selectable
 
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionRegistrar.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionRegistrar.kt
index 7c3e79e..7407fb4 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionRegistrar.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionRegistrar.kt
@@ -17,7 +17,7 @@
 package androidx.ui.desktop
 
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.core.selection.SelectionRegistrar
 import androidx.ui.core.selection.Selectable
 
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt
index 010b8f5..f91df39 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt
@@ -17,8 +17,8 @@
 package androidx.ui.graphics
 
 import androidx.compose.InternalComposeApi
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.vectormath.Matrix4
 import androidx.ui.graphics.vectormath.isIdentity
 import androidx.ui.unit.IntOffset
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopPath.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopPath.kt
index a05fd78..fb789e4 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopPath.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopPath.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.vectormath.degrees
 import org.jetbrains.skija.Matrix33
 import org.jetbrains.skija.PathDirection
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopShader.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopShader.kt
index a5e1628..7b85fb3 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopShader.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopShader.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import org.jetbrains.skija.FilterTileMode
 import org.jetbrains.skija.GradientStyle
 
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/Rects.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/Rects.kt
index 4e7bbe8..c06e671 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/Rects.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/Rects.kt
@@ -15,7 +15,7 @@
  */
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 
 internal fun Rect.toSkija(): org.jetbrains.skija.Rect {
     return org.jetbrains.skija.Rect.makeLTRB(
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt
index 71edc91..81817f8 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.graphics
 
 import androidx.ui.TestResources.testImageAsset
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntOffset
 import androidx.ui.unit.IntSize
 import org.junit.Assert.assertEquals
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPathTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPathTest.kt
index 9d50048..56638b7 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPathTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPathTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Rect
 import org.junit.Assert.assertEquals
 import org.junit.Test
 
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasPointsTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasPointsTest.kt
index 27613de..f0da3f9 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasPointsTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasPointsTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics.canvas
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.DesktopGraphicsTest
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt
index 35f0708..f5f1c13 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt
@@ -17,8 +17,8 @@
 package androidx.ui.graphics.canvas
 
 import androidx.ui.TestResources.testImageAsset
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.ClipOp
diff --git a/ui/ui-foundation/api/0.1.0-dev16.txt b/ui/ui-foundation/api/0.1.0-dev16.txt
index ca739a2..5fed750 100644
--- a/ui/ui-foundation/api/0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/0.1.0-dev16.txt
@@ -117,10 +117,10 @@
 
   @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
-    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.ui.geometry.Offset? position = null);
+    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
     method public java.util.Set<androidx.compose.foundation.Interaction> getValue();
-    method public androidx.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
+    method public androidx.compose.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
     method public void removeInteraction(androidx.compose.foundation.Interaction interaction);
     property public java.util.Set<androidx.compose.foundation.Interaction> value;
   }
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -261,7 +261,7 @@
 
   public final class ScrollableKt {
     method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
-    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
+    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
   public final class ZoomableController {
@@ -345,9 +345,9 @@
 package androidx.compose.foundation.shape {
 
   public final class GenericShape implements androidx.ui.graphics.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public abstract androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
-    method public final androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public final androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public abstract androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,7 +367,7 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-SwJi8iY(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
@@ -380,7 +380,7 @@
   public final class CutCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public CutCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.CutCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class CutCornerShapeKt {
@@ -396,7 +396,7 @@
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public RoundedCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.RoundedCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class RoundedCornerShapeKt {
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index ca739a2..5fed750 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -117,10 +117,10 @@
 
   @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
-    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.ui.geometry.Offset? position = null);
+    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
     method public java.util.Set<androidx.compose.foundation.Interaction> getValue();
-    method public androidx.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
+    method public androidx.compose.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
     method public void removeInteraction(androidx.compose.foundation.Interaction interaction);
     property public java.util.Set<androidx.compose.foundation.Interaction> value;
   }
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -261,7 +261,7 @@
 
   public final class ScrollableKt {
     method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
-    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
+    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
   public final class ZoomableController {
@@ -345,9 +345,9 @@
 package androidx.compose.foundation.shape {
 
   public final class GenericShape implements androidx.ui.graphics.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public abstract androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
-    method public final androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public final androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public abstract androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,7 +367,7 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-SwJi8iY(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
@@ -380,7 +380,7 @@
   public final class CutCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public CutCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.CutCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class CutCornerShapeKt {
@@ -396,7 +396,7 @@
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public RoundedCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.RoundedCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class RoundedCornerShapeKt {
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 ca739a2..5fed750 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
@@ -117,10 +117,10 @@
 
   @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
-    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.ui.geometry.Offset? position = null);
+    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
     method public java.util.Set<androidx.compose.foundation.Interaction> getValue();
-    method public androidx.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
+    method public androidx.compose.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
     method public void removeInteraction(androidx.compose.foundation.Interaction interaction);
     property public java.util.Set<androidx.compose.foundation.Interaction> value;
   }
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -261,7 +261,7 @@
 
   public final class ScrollableKt {
     method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
-    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
+    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
   public final class ZoomableController {
@@ -345,9 +345,9 @@
 package androidx.compose.foundation.shape {
 
   public final class GenericShape implements androidx.ui.graphics.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public abstract androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
-    method public final androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public final androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public abstract androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,7 +367,7 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-SwJi8iY(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
@@ -380,7 +380,7 @@
   public final class CutCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public CutCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.CutCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class CutCornerShapeKt {
@@ -396,7 +396,7 @@
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public RoundedCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.RoundedCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class RoundedCornerShapeKt {
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index ca739a2..5fed750 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -117,10 +117,10 @@
 
   @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
-    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.ui.geometry.Offset? position = null);
+    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
     method public java.util.Set<androidx.compose.foundation.Interaction> getValue();
-    method public androidx.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
+    method public androidx.compose.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
     method public void removeInteraction(androidx.compose.foundation.Interaction interaction);
     property public java.util.Set<androidx.compose.foundation.Interaction> value;
   }
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -261,7 +261,7 @@
 
   public final class ScrollableKt {
     method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
-    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
+    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
   public final class ZoomableController {
@@ -345,9 +345,9 @@
 package androidx.compose.foundation.shape {
 
   public final class GenericShape implements androidx.ui.graphics.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public abstract androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
-    method public final androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public final androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public abstract androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,7 +367,7 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-SwJi8iY(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
@@ -380,7 +380,7 @@
   public final class CutCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public CutCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.CutCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class CutCornerShapeKt {
@@ -396,7 +396,7 @@
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public RoundedCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.RoundedCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class RoundedCornerShapeKt {
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 ca739a2..5fed750 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
@@ -117,10 +117,10 @@
 
   @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
-    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.ui.geometry.Offset? position = null);
+    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
     method public java.util.Set<androidx.compose.foundation.Interaction> getValue();
-    method public androidx.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
+    method public androidx.compose.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
     method public void removeInteraction(androidx.compose.foundation.Interaction interaction);
     property public java.util.Set<androidx.compose.foundation.Interaction> value;
   }
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -261,7 +261,7 @@
 
   public final class ScrollableKt {
     method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
-    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
+    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
   public final class ZoomableController {
@@ -345,9 +345,9 @@
 package androidx.compose.foundation.shape {
 
   public final class GenericShape implements androidx.ui.graphics.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public abstract androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
-    method public final androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public final androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public abstract androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,7 +367,7 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-SwJi8iY(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
@@ -380,7 +380,7 @@
   public final class CutCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public CutCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.CutCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class CutCornerShapeKt {
@@ -396,7 +396,7 @@
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public RoundedCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.RoundedCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class RoundedCornerShapeKt {
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index ca739a2..5fed750 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -117,10 +117,10 @@
 
   @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
-    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.ui.geometry.Offset? position = null);
+    method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
     method public java.util.Set<androidx.compose.foundation.Interaction> getValue();
-    method public androidx.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
+    method public androidx.compose.ui.geometry.Offset? interactionPositionFor(androidx.compose.foundation.Interaction interaction);
     method public void removeInteraction(androidx.compose.foundation.Interaction interaction);
     property public java.util.Set<androidx.compose.foundation.Interaction> value;
   }
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -261,7 +261,7 @@
 
   public final class ScrollableKt {
     method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
-    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
+    method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
   public final class ZoomableController {
@@ -345,9 +345,9 @@
 package androidx.compose.foundation.shape {
 
   public final class GenericShape implements androidx.ui.graphics.Shape {
-    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public abstract androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
-    method public final androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public final androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public abstract androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,7 +367,7 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-SwJi8iY(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
@@ -380,7 +380,7 @@
   public final class CutCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public CutCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.CutCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class CutCornerShapeKt {
@@ -396,7 +396,7 @@
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
     ctor public RoundedCornerShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public androidx.compose.foundation.shape.corner.RoundedCornerShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
-    method public androidx.ui.graphics.Outline createOutline-0bCqP4M(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public androidx.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
   }
 
   public final class RoundedCornerShapeKt {
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt
index 1edf837..ad79d4c 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt
@@ -20,7 +20,7 @@
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.inset
 import androidx.compose.foundation.layout.preferredSize
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt
index c020a41..140525e 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt
@@ -21,14 +21,14 @@
 import androidx.compose.remember
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Image
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.ImageAsset
 import androidx.ui.graphics.Paint
 import androidx.ui.core.ContentScale
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.painter.ImagePainter
 import androidx.ui.graphics.painter.Painter
 import androidx.ui.graphics.drawscope.DrawScope
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt
index af8a45f..0d47d4e 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt
@@ -40,7 +40,7 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Density
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt
index 6c655d1..5edf4ca 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.shape.corner.CircleShape
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
 import androidx.ui.graphics.toArgb
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt
index 7ea10dd..76be75d 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.ui.core.testTag
 import androidx.compose.foundation.gestures.draggable
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.test.center
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
index 1b69974..d318ceb 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.test.R
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
index 03682e5..36f0f02 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.down
 import androidx.ui.test.up
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Ignore
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
index 0dfbea3..daaec91 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
@@ -41,7 +41,7 @@
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.swipe
 import androidx.ui.test.swipeWithVelocity
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 import androidx.ui.unit.milliseconds
 import com.google.common.truth.Truth
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 0487fb7..99d0336 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
@@ -20,7 +20,7 @@
 import androidx.compose.state
 import androidx.test.filters.SmallTest
 import androidx.ui.core.TextInputServiceAmbient
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.text.input.CommitTextEditOp
 import androidx.compose.ui.text.input.DeleteSurroundingTextEditOp
 import androidx.compose.ui.text.input.EditOperation
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt
index 8dc3a65..25a9314 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.testTag
 import androidx.compose.foundation.gestures.zoomable
 import androidx.compose.foundation.gestures.ZoomableController
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.test.AnimationClockTestRule
 import androidx.ui.test.center
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 d43a078..b2a41f1 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
@@ -25,7 +25,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.TouchSlop
 import androidx.ui.core.testTag
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.InnerPadding
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt
index d9ca7ba..bd4f009 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt
@@ -17,9 +17,9 @@
 package androidx.compose.foundation.shape.corner
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.graphics.Outline
 import androidx.ui.unit.Density
 import androidx.ui.unit.dp
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt
index d5681cd..13b92a0 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.shape.corner
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.unit.Density
 import androidx.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt
index 42dd255..60981ac 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.shape.corner
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.PathOperation
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt
index 0115c1a..9a45272 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt
@@ -17,10 +17,10 @@
 package androidx.compose.foundation.shape.corner
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Radius
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Shape
 import androidx.ui.unit.Density
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
index 9337756..cc7dfd24 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Background.kt
@@ -19,7 +19,7 @@
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.DrawModifier
 import androidx.ui.core.Modifier
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.Color
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 4e446ea..99ed911 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
@@ -34,8 +34,8 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
 import androidx.ui.core.focus.FocusModifier
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.useOrElse
 import androidx.compose.ui.text.input.ImeAction
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt
index 6e7faa2..57b5c40 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt
@@ -22,12 +22,12 @@
 import androidx.ui.core.DrawModifier
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.isSimple
-import androidx.ui.geometry.outerRect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Radius
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.isSimple
+import androidx.compose.ui.geometry.outerRect
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt
index fa77212..8a301de 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt
@@ -21,7 +21,7 @@
 import androidx.compose.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.paint
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.ImageAsset
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt
index 0dd2d89..a4b8b16 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt
@@ -21,7 +21,7 @@
 import androidx.compose.getValue
 import androidx.compose.mutableStateOf
 import androidx.compose.setValue
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 /**
  * InteractionState represents a [Set] of [Interaction]s present on a given component. This
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
index fcd95d9..85f79df 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.compose.foundation.Interaction
 import androidx.compose.foundation.InteractionState
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Density
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
index 1206864..5e6e069 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
@@ -38,7 +38,7 @@
 import androidx.compose.foundation.animation.FlingConfig
 import androidx.compose.foundation.animation.defaultFlingConfig
 import androidx.compose.foundation.animation.fling
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 /**
  * Create and remember [ScrollableController] for [scrollable] with default [FlingConfig] and
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt
index fb2713c..5b8a0be 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.shape
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.Shape
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt
index 250b826..e318a55 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.shape.corner
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Shape
 import androidx.ui.unit.Density
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt
index c14312e..f543ecd 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.shape.corner
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.compose.Immutable
 import androidx.compose.Stable
 import androidx.ui.unit.Density
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt
index ae026a7..32a8ef8 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.shape.corner
 
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
 import androidx.ui.unit.Dp
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt
index 844845f..29c71c4 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation.shape.corner
 
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Radius
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Shape
 import androidx.ui.unit.Dp
diff --git a/ui/ui-geometry/api/0.1.0-dev16.txt b/ui/ui-geometry/api/0.1.0-dev16.txt
index 93ff203..aea918e 100644
--- a/ui/ui-geometry/api/0.1.0-dev16.txt
+++ b/ui/ui-geometry/api/0.1.0-dev16.txt
@@ -1,49 +1,49 @@
 // Signature format: 3.0
-package androidx.ui.geometry {
+package androidx.compose.ui.geometry {
 
   @androidx.compose.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
-    method public androidx.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset div(float operand);
+    method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
     method @androidx.compose.Stable public float getDistance();
     method @androidx.compose.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
     method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
-    field public static final androidx.ui.geometry.Offset.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
   }
 
   public static final class Offset.Companion {
-    method public androidx.ui.geometry.Offset getInfinite();
-    method public androidx.ui.geometry.Offset getZero();
-    property public final androidx.ui.geometry.Offset Infinite;
-    property public final androidx.ui.geometry.Offset Zero;
+    method public androidx.compose.ui.geometry.Offset getInfinite();
+    method public androidx.compose.ui.geometry.Offset getZero();
+    property public final androidx.compose.ui.geometry.Offset Infinite;
+    property public final androidx.compose.ui.geometry.Offset Zero;
   }
 
   public interface OffsetBase {
     method public float getDx();
     method public float getDy();
     method public default boolean isFinite();
-    method public default boolean isGreaterOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isGreaterThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterThan(androidx.compose.ui.geometry.OffsetBase other);
     method public default boolean isInfinite();
-    method public default boolean isLessOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isLessThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isLessOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isLessThan(androidx.compose.ui.geometry.OffsetBase other);
     property public abstract float dx;
     property public abstract float dy;
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset lerp(androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -60,8 +60,8 @@
     method public float component7();
     method public float component8();
     method public float component9();
-    method public boolean contains(androidx.ui.geometry.Offset point);
-    method public androidx.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method public boolean contains(androidx.compose.ui.geometry.Offset point);
+    method public androidx.compose.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
     method public float getBottom();
     method public float getBottomLeftRadiusX();
     method public float getBottomLeftRadiusY();
@@ -76,48 +76,48 @@
     method public float getTopRightRadiusX();
     method public float getTopRightRadiusY();
     method public float getWidth();
-    method public static androidx.ui.geometry.RRect getZero();
+    method public static androidx.compose.ui.geometry.RRect getZero();
     property public final float height;
     property public final float width;
-    field public static final androidx.ui.geometry.RRect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.RRect.Companion Companion;
   }
 
   public static final class RRect.Companion {
-    method public androidx.ui.geometry.RRect getZero();
-    property public final androidx.ui.geometry.RRect Zero;
+    method public androidx.compose.ui.geometry.RRect getZero();
+    property public final androidx.compose.ui.geometry.RRect Zero;
   }
 
   public final class RRectKt {
-    method public static androidx.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect(androidx.ui.geometry.Rect rect, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect-SonKKtE(androidx.ui.geometry.Rect rect, long radius);
-    method public static androidx.ui.geometry.RRect RRect-a8KmX9Q(androidx.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static androidx.ui.geometry.RRect RRect-iLOfVQs(float left, float top, float right, float bottom, long radius);
-    method public static androidx.ui.geometry.RRect RRect-kGjprzs(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static long bottomLeftRadius(androidx.ui.geometry.RRect);
-    method public static long bottomRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Offset center(androidx.ui.geometry.RRect);
-    method public static float getLongestSide(androidx.ui.geometry.RRect);
-    method public static float getShortestSide(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect grow(androidx.ui.geometry.RRect, float delta);
-    method public static boolean isCircle(androidx.ui.geometry.RRect);
-    method public static boolean isEllipse(androidx.ui.geometry.RRect);
-    method public static boolean isEmpty(androidx.ui.geometry.RRect);
-    method public static boolean isFinite(androidx.ui.geometry.RRect);
-    method public static boolean isRect(androidx.ui.geometry.RRect);
-    method public static boolean isSimple(androidx.ui.geometry.RRect);
-    method public static boolean isStadium(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect lerp(androidx.ui.geometry.RRect start, androidx.ui.geometry.RRect stop, float fraction);
-    method public static androidx.ui.geometry.Rect middleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect outerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect safeInnerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect shift(androidx.ui.geometry.RRect, androidx.ui.geometry.Offset offset);
-    method public static androidx.ui.geometry.RRect shrink(androidx.ui.geometry.RRect, float delta);
-    method public static androidx.ui.geometry.Rect tallMiddleRect(androidx.ui.geometry.RRect);
-    method public static long topLeftRadius(androidx.ui.geometry.RRect);
-    method public static long topRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect wideMiddleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect withRadius-ql9n_fM(androidx.ui.geometry.RRect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect-9kgzNNk(androidx.compose.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-FXlJaX8(androidx.compose.ui.geometry.Rect rect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect-HepwI24(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-TZLOQlQ(float left, float top, float right, float bottom, long radius);
+    method public static long bottomLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long bottomRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Offset center(androidx.compose.ui.geometry.RRect);
+    method public static float getLongestSide(androidx.compose.ui.geometry.RRect);
+    method public static float getShortestSide(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect grow(androidx.compose.ui.geometry.RRect, float delta);
+    method public static boolean isCircle(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEllipse(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEmpty(androidx.compose.ui.geometry.RRect);
+    method public static boolean isFinite(androidx.compose.ui.geometry.RRect);
+    method public static boolean isRect(androidx.compose.ui.geometry.RRect);
+    method public static boolean isSimple(androidx.compose.ui.geometry.RRect);
+    method public static boolean isStadium(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect lerp(androidx.compose.ui.geometry.RRect start, androidx.compose.ui.geometry.RRect stop, float fraction);
+    method public static androidx.compose.ui.geometry.Rect middleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect outerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect safeInnerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect shift(androidx.compose.ui.geometry.RRect, androidx.compose.ui.geometry.Offset offset);
+    method public static androidx.compose.ui.geometry.RRect shrink(androidx.compose.ui.geometry.RRect, float delta);
+    method public static androidx.compose.ui.geometry.Rect tallMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static long topLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long topRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect wideMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
   @androidx.compose.Immutable public final inline class Radius {
@@ -130,14 +130,14 @@
     method public static float getX-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static operator long minus-ASmZJvU(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-ASmZJvU(long $this, long other);
+    method @androidx.compose.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.geometry.Radius.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
   public static final class Radius.Companion {
@@ -147,7 +147,7 @@
 
   public final class RadiusKt {
     method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-LIZBhPY(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Rect {
@@ -156,17 +156,17 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method public boolean contains(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect deflate(float delta);
-    method public androidx.ui.geometry.Rect expandToInclude(androidx.ui.geometry.Rect other);
+    method public boolean contains(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
-    method public androidx.ui.geometry.Offset getBottomCenter();
-    method public androidx.ui.geometry.Offset getBottomLeft();
-    method public androidx.ui.geometry.Offset getBottomRight();
-    method public androidx.ui.geometry.Offset getCenter();
-    method public androidx.ui.geometry.Offset getCenterLeft();
-    method public androidx.ui.geometry.Offset getCenterRight();
+    method public androidx.compose.ui.geometry.Offset getBottomCenter();
+    method public androidx.compose.ui.geometry.Offset getBottomLeft();
+    method public androidx.compose.ui.geometry.Offset getBottomRight();
+    method public androidx.compose.ui.geometry.Offset getCenter();
+    method public androidx.compose.ui.geometry.Offset getCenterLeft();
+    method public androidx.compose.ui.geometry.Offset getCenterRight();
     method public float getHeight();
     method public float getLeft();
     method public float getMaxDimension();
@@ -174,53 +174,53 @@
     method public float getRight();
     method public long getSize();
     method public float getTop();
-    method public androidx.ui.geometry.Offset getTopCenter();
-    method public androidx.ui.geometry.Offset getTopLeft();
-    method public androidx.ui.geometry.Offset getTopRight();
+    method public androidx.compose.ui.geometry.Offset getTopCenter();
+    method public androidx.compose.ui.geometry.Offset getTopLeft();
+    method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect intersect(androidx.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
     method @androidx.compose.Stable public boolean isEmpty();
     method @androidx.compose.Stable public boolean isFinite();
     method @androidx.compose.Stable public boolean isInfinite();
-    method public androidx.ui.geometry.Rect join(androidx.ui.geometry.Rect other);
-    method public boolean overlaps(androidx.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect shift(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect translate(float translateX, float translateY);
+    method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
+    method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
     property public final float width;
-    field public static final androidx.ui.geometry.Rect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromCircle(androidx.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromPoints(androidx.ui.geometry.Offset a, androidx.ui.geometry.Offset b);
-    method public androidx.ui.geometry.Rect getLargest();
-    method public androidx.ui.geometry.Rect getZero();
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method public androidx.compose.ui.geometry.Rect getLargest();
+    method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
     property public final float _giantScalar;
-    property public final androidx.ui.geometry.Rect largest;
-    property public final androidx.ui.geometry.Rect zero;
+    property public final androidx.compose.ui.geometry.Rect largest;
+    property public final androidx.compose.ui.geometry.Rect zero;
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect lerp(androidx.ui.geometry.Rect start, androidx.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
   @androidx.compose.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomRight-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-impl(long $this, androidx.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
     method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
@@ -232,21 +232,21 @@
     method public static float getWidth-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus-b2zCL34(long $this, long other);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
-    field public static final androidx.ui.geometry.Size.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
   public static final class Size.Companion {
-    method @Deprecated public long copy-b2zCL34(long source);
+    method @Deprecated public long copy-uvyYCjk(long source);
     method public long fromHeight(float height);
     method public long fromRadius(float radius);
     method public long fromWidth(float width);
@@ -259,11 +259,11 @@
 
   public final class SizeKt {
     method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Size? lerp-T-c3OIQ(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times--RLAD3A(int, long size);
-    method @androidx.compose.Stable public static inline operator long times-EVxmo3I(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-W1X_JKQ(double, long size);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/api_lint.ignore b/ui/ui-geometry/api/api_lint.ignore
index db1ca8b..e7de166 100644
--- a/ui/ui-geometry/api/api_lint.ignore
+++ b/ui/ui-geometry/api/api_lint.ignore
@@ -1,13 +1,13 @@
 // Baseline format: 1.0
-AcronymName: androidx.ui.geometry.Rect.Companion#fromLTRB(float, float, float, float):
+AcronymName: androidx.compose.ui.geometry.Rect.Companion#fromLTRB(float, float, float, float):
     Acronyms should not be capitalized in method names: was `fromLTRB`, should this be `fromLtrb`?
-AcronymName: androidx.ui.geometry.Rect.Companion#fromLTWH(float, float, float, float):
+AcronymName: androidx.compose.ui.geometry.Rect.Companion#fromLTWH(float, float, float, float):
     Acronyms should not be capitalized in method names: was `fromLTWH`, should this be `fromLtwh`?
 
 
-KotlinOperator: androidx.ui.geometry.RRect#contains(androidx.ui.geometry.Offset):
+KotlinOperator: androidx.compose.ui.geometry.RRect#contains(androidx.compose.ui.geometry.Offset):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.ui.geometry.Rect#contains(androidx.ui.geometry.Offset):
+KotlinOperator: androidx.compose.ui.geometry.Rect#contains(androidx.compose.ui.geometry.Offset):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.ui.geometry.Size#contains(androidx.ui.geometry.Offset):
+KotlinOperator: androidx.compose.ui.geometry.Size#contains(androidx.compose.ui.geometry.Offset):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
diff --git a/ui/ui-geometry/api/current.txt b/ui/ui-geometry/api/current.txt
index 93ff203..aea918e 100644
--- a/ui/ui-geometry/api/current.txt
+++ b/ui/ui-geometry/api/current.txt
@@ -1,49 +1,49 @@
 // Signature format: 3.0
-package androidx.ui.geometry {
+package androidx.compose.ui.geometry {
 
   @androidx.compose.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
-    method public androidx.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset div(float operand);
+    method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
     method @androidx.compose.Stable public float getDistance();
     method @androidx.compose.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
     method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
-    field public static final androidx.ui.geometry.Offset.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
   }
 
   public static final class Offset.Companion {
-    method public androidx.ui.geometry.Offset getInfinite();
-    method public androidx.ui.geometry.Offset getZero();
-    property public final androidx.ui.geometry.Offset Infinite;
-    property public final androidx.ui.geometry.Offset Zero;
+    method public androidx.compose.ui.geometry.Offset getInfinite();
+    method public androidx.compose.ui.geometry.Offset getZero();
+    property public final androidx.compose.ui.geometry.Offset Infinite;
+    property public final androidx.compose.ui.geometry.Offset Zero;
   }
 
   public interface OffsetBase {
     method public float getDx();
     method public float getDy();
     method public default boolean isFinite();
-    method public default boolean isGreaterOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isGreaterThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterThan(androidx.compose.ui.geometry.OffsetBase other);
     method public default boolean isInfinite();
-    method public default boolean isLessOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isLessThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isLessOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isLessThan(androidx.compose.ui.geometry.OffsetBase other);
     property public abstract float dx;
     property public abstract float dy;
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset lerp(androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -60,8 +60,8 @@
     method public float component7();
     method public float component8();
     method public float component9();
-    method public boolean contains(androidx.ui.geometry.Offset point);
-    method public androidx.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method public boolean contains(androidx.compose.ui.geometry.Offset point);
+    method public androidx.compose.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
     method public float getBottom();
     method public float getBottomLeftRadiusX();
     method public float getBottomLeftRadiusY();
@@ -76,48 +76,48 @@
     method public float getTopRightRadiusX();
     method public float getTopRightRadiusY();
     method public float getWidth();
-    method public static androidx.ui.geometry.RRect getZero();
+    method public static androidx.compose.ui.geometry.RRect getZero();
     property public final float height;
     property public final float width;
-    field public static final androidx.ui.geometry.RRect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.RRect.Companion Companion;
   }
 
   public static final class RRect.Companion {
-    method public androidx.ui.geometry.RRect getZero();
-    property public final androidx.ui.geometry.RRect Zero;
+    method public androidx.compose.ui.geometry.RRect getZero();
+    property public final androidx.compose.ui.geometry.RRect Zero;
   }
 
   public final class RRectKt {
-    method public static androidx.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect(androidx.ui.geometry.Rect rect, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect-SonKKtE(androidx.ui.geometry.Rect rect, long radius);
-    method public static androidx.ui.geometry.RRect RRect-a8KmX9Q(androidx.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static androidx.ui.geometry.RRect RRect-iLOfVQs(float left, float top, float right, float bottom, long radius);
-    method public static androidx.ui.geometry.RRect RRect-kGjprzs(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static long bottomLeftRadius(androidx.ui.geometry.RRect);
-    method public static long bottomRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Offset center(androidx.ui.geometry.RRect);
-    method public static float getLongestSide(androidx.ui.geometry.RRect);
-    method public static float getShortestSide(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect grow(androidx.ui.geometry.RRect, float delta);
-    method public static boolean isCircle(androidx.ui.geometry.RRect);
-    method public static boolean isEllipse(androidx.ui.geometry.RRect);
-    method public static boolean isEmpty(androidx.ui.geometry.RRect);
-    method public static boolean isFinite(androidx.ui.geometry.RRect);
-    method public static boolean isRect(androidx.ui.geometry.RRect);
-    method public static boolean isSimple(androidx.ui.geometry.RRect);
-    method public static boolean isStadium(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect lerp(androidx.ui.geometry.RRect start, androidx.ui.geometry.RRect stop, float fraction);
-    method public static androidx.ui.geometry.Rect middleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect outerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect safeInnerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect shift(androidx.ui.geometry.RRect, androidx.ui.geometry.Offset offset);
-    method public static androidx.ui.geometry.RRect shrink(androidx.ui.geometry.RRect, float delta);
-    method public static androidx.ui.geometry.Rect tallMiddleRect(androidx.ui.geometry.RRect);
-    method public static long topLeftRadius(androidx.ui.geometry.RRect);
-    method public static long topRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect wideMiddleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect withRadius-ql9n_fM(androidx.ui.geometry.RRect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect-9kgzNNk(androidx.compose.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-FXlJaX8(androidx.compose.ui.geometry.Rect rect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect-HepwI24(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-TZLOQlQ(float left, float top, float right, float bottom, long radius);
+    method public static long bottomLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long bottomRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Offset center(androidx.compose.ui.geometry.RRect);
+    method public static float getLongestSide(androidx.compose.ui.geometry.RRect);
+    method public static float getShortestSide(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect grow(androidx.compose.ui.geometry.RRect, float delta);
+    method public static boolean isCircle(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEllipse(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEmpty(androidx.compose.ui.geometry.RRect);
+    method public static boolean isFinite(androidx.compose.ui.geometry.RRect);
+    method public static boolean isRect(androidx.compose.ui.geometry.RRect);
+    method public static boolean isSimple(androidx.compose.ui.geometry.RRect);
+    method public static boolean isStadium(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect lerp(androidx.compose.ui.geometry.RRect start, androidx.compose.ui.geometry.RRect stop, float fraction);
+    method public static androidx.compose.ui.geometry.Rect middleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect outerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect safeInnerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect shift(androidx.compose.ui.geometry.RRect, androidx.compose.ui.geometry.Offset offset);
+    method public static androidx.compose.ui.geometry.RRect shrink(androidx.compose.ui.geometry.RRect, float delta);
+    method public static androidx.compose.ui.geometry.Rect tallMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static long topLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long topRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect wideMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
   @androidx.compose.Immutable public final inline class Radius {
@@ -130,14 +130,14 @@
     method public static float getX-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static operator long minus-ASmZJvU(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-ASmZJvU(long $this, long other);
+    method @androidx.compose.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.geometry.Radius.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
   public static final class Radius.Companion {
@@ -147,7 +147,7 @@
 
   public final class RadiusKt {
     method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-LIZBhPY(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Rect {
@@ -156,17 +156,17 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method public boolean contains(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect deflate(float delta);
-    method public androidx.ui.geometry.Rect expandToInclude(androidx.ui.geometry.Rect other);
+    method public boolean contains(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
-    method public androidx.ui.geometry.Offset getBottomCenter();
-    method public androidx.ui.geometry.Offset getBottomLeft();
-    method public androidx.ui.geometry.Offset getBottomRight();
-    method public androidx.ui.geometry.Offset getCenter();
-    method public androidx.ui.geometry.Offset getCenterLeft();
-    method public androidx.ui.geometry.Offset getCenterRight();
+    method public androidx.compose.ui.geometry.Offset getBottomCenter();
+    method public androidx.compose.ui.geometry.Offset getBottomLeft();
+    method public androidx.compose.ui.geometry.Offset getBottomRight();
+    method public androidx.compose.ui.geometry.Offset getCenter();
+    method public androidx.compose.ui.geometry.Offset getCenterLeft();
+    method public androidx.compose.ui.geometry.Offset getCenterRight();
     method public float getHeight();
     method public float getLeft();
     method public float getMaxDimension();
@@ -174,53 +174,53 @@
     method public float getRight();
     method public long getSize();
     method public float getTop();
-    method public androidx.ui.geometry.Offset getTopCenter();
-    method public androidx.ui.geometry.Offset getTopLeft();
-    method public androidx.ui.geometry.Offset getTopRight();
+    method public androidx.compose.ui.geometry.Offset getTopCenter();
+    method public androidx.compose.ui.geometry.Offset getTopLeft();
+    method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect intersect(androidx.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
     method @androidx.compose.Stable public boolean isEmpty();
     method @androidx.compose.Stable public boolean isFinite();
     method @androidx.compose.Stable public boolean isInfinite();
-    method public androidx.ui.geometry.Rect join(androidx.ui.geometry.Rect other);
-    method public boolean overlaps(androidx.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect shift(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect translate(float translateX, float translateY);
+    method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
+    method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
     property public final float width;
-    field public static final androidx.ui.geometry.Rect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromCircle(androidx.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromPoints(androidx.ui.geometry.Offset a, androidx.ui.geometry.Offset b);
-    method public androidx.ui.geometry.Rect getLargest();
-    method public androidx.ui.geometry.Rect getZero();
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method public androidx.compose.ui.geometry.Rect getLargest();
+    method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
     property public final float _giantScalar;
-    property public final androidx.ui.geometry.Rect largest;
-    property public final androidx.ui.geometry.Rect zero;
+    property public final androidx.compose.ui.geometry.Rect largest;
+    property public final androidx.compose.ui.geometry.Rect zero;
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect lerp(androidx.ui.geometry.Rect start, androidx.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
   @androidx.compose.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomRight-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-impl(long $this, androidx.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
     method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
@@ -232,21 +232,21 @@
     method public static float getWidth-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus-b2zCL34(long $this, long other);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
-    field public static final androidx.ui.geometry.Size.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
   public static final class Size.Companion {
-    method @Deprecated public long copy-b2zCL34(long source);
+    method @Deprecated public long copy-uvyYCjk(long source);
     method public long fromHeight(float height);
     method public long fromRadius(float radius);
     method public long fromWidth(float width);
@@ -259,11 +259,11 @@
 
   public final class SizeKt {
     method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Size? lerp-T-c3OIQ(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times--RLAD3A(int, long size);
-    method @androidx.compose.Stable public static inline operator long times-EVxmo3I(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-W1X_JKQ(double, long size);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt
index 93ff203..aea918e 100644
--- a/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,49 +1,49 @@
 // Signature format: 3.0
-package androidx.ui.geometry {
+package androidx.compose.ui.geometry {
 
   @androidx.compose.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
-    method public androidx.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset div(float operand);
+    method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
     method @androidx.compose.Stable public float getDistance();
     method @androidx.compose.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
     method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
-    field public static final androidx.ui.geometry.Offset.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
   }
 
   public static final class Offset.Companion {
-    method public androidx.ui.geometry.Offset getInfinite();
-    method public androidx.ui.geometry.Offset getZero();
-    property public final androidx.ui.geometry.Offset Infinite;
-    property public final androidx.ui.geometry.Offset Zero;
+    method public androidx.compose.ui.geometry.Offset getInfinite();
+    method public androidx.compose.ui.geometry.Offset getZero();
+    property public final androidx.compose.ui.geometry.Offset Infinite;
+    property public final androidx.compose.ui.geometry.Offset Zero;
   }
 
   public interface OffsetBase {
     method public float getDx();
     method public float getDy();
     method public default boolean isFinite();
-    method public default boolean isGreaterOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isGreaterThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterThan(androidx.compose.ui.geometry.OffsetBase other);
     method public default boolean isInfinite();
-    method public default boolean isLessOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isLessThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isLessOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isLessThan(androidx.compose.ui.geometry.OffsetBase other);
     property public abstract float dx;
     property public abstract float dy;
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset lerp(androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -60,8 +60,8 @@
     method public float component7();
     method public float component8();
     method public float component9();
-    method public boolean contains(androidx.ui.geometry.Offset point);
-    method public androidx.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method public boolean contains(androidx.compose.ui.geometry.Offset point);
+    method public androidx.compose.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
     method public float getBottom();
     method public float getBottomLeftRadiusX();
     method public float getBottomLeftRadiusY();
@@ -76,48 +76,48 @@
     method public float getTopRightRadiusX();
     method public float getTopRightRadiusY();
     method public float getWidth();
-    method public static androidx.ui.geometry.RRect getZero();
+    method public static androidx.compose.ui.geometry.RRect getZero();
     property public final float height;
     property public final float width;
-    field public static final androidx.ui.geometry.RRect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.RRect.Companion Companion;
   }
 
   public static final class RRect.Companion {
-    method public androidx.ui.geometry.RRect getZero();
-    property public final androidx.ui.geometry.RRect Zero;
+    method public androidx.compose.ui.geometry.RRect getZero();
+    property public final androidx.compose.ui.geometry.RRect Zero;
   }
 
   public final class RRectKt {
-    method public static androidx.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect(androidx.ui.geometry.Rect rect, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect-SonKKtE(androidx.ui.geometry.Rect rect, long radius);
-    method public static androidx.ui.geometry.RRect RRect-a8KmX9Q(androidx.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static androidx.ui.geometry.RRect RRect-iLOfVQs(float left, float top, float right, float bottom, long radius);
-    method public static androidx.ui.geometry.RRect RRect-kGjprzs(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static long bottomLeftRadius(androidx.ui.geometry.RRect);
-    method public static long bottomRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Offset center(androidx.ui.geometry.RRect);
-    method public static float getLongestSide(androidx.ui.geometry.RRect);
-    method public static float getShortestSide(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect grow(androidx.ui.geometry.RRect, float delta);
-    method public static boolean isCircle(androidx.ui.geometry.RRect);
-    method public static boolean isEllipse(androidx.ui.geometry.RRect);
-    method public static boolean isEmpty(androidx.ui.geometry.RRect);
-    method public static boolean isFinite(androidx.ui.geometry.RRect);
-    method public static boolean isRect(androidx.ui.geometry.RRect);
-    method public static boolean isSimple(androidx.ui.geometry.RRect);
-    method public static boolean isStadium(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect lerp(androidx.ui.geometry.RRect start, androidx.ui.geometry.RRect stop, float fraction);
-    method public static androidx.ui.geometry.Rect middleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect outerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect safeInnerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect shift(androidx.ui.geometry.RRect, androidx.ui.geometry.Offset offset);
-    method public static androidx.ui.geometry.RRect shrink(androidx.ui.geometry.RRect, float delta);
-    method public static androidx.ui.geometry.Rect tallMiddleRect(androidx.ui.geometry.RRect);
-    method public static long topLeftRadius(androidx.ui.geometry.RRect);
-    method public static long topRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect wideMiddleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect withRadius-ql9n_fM(androidx.ui.geometry.RRect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect-9kgzNNk(androidx.compose.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-FXlJaX8(androidx.compose.ui.geometry.Rect rect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect-HepwI24(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-TZLOQlQ(float left, float top, float right, float bottom, long radius);
+    method public static long bottomLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long bottomRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Offset center(androidx.compose.ui.geometry.RRect);
+    method public static float getLongestSide(androidx.compose.ui.geometry.RRect);
+    method public static float getShortestSide(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect grow(androidx.compose.ui.geometry.RRect, float delta);
+    method public static boolean isCircle(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEllipse(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEmpty(androidx.compose.ui.geometry.RRect);
+    method public static boolean isFinite(androidx.compose.ui.geometry.RRect);
+    method public static boolean isRect(androidx.compose.ui.geometry.RRect);
+    method public static boolean isSimple(androidx.compose.ui.geometry.RRect);
+    method public static boolean isStadium(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect lerp(androidx.compose.ui.geometry.RRect start, androidx.compose.ui.geometry.RRect stop, float fraction);
+    method public static androidx.compose.ui.geometry.Rect middleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect outerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect safeInnerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect shift(androidx.compose.ui.geometry.RRect, androidx.compose.ui.geometry.Offset offset);
+    method public static androidx.compose.ui.geometry.RRect shrink(androidx.compose.ui.geometry.RRect, float delta);
+    method public static androidx.compose.ui.geometry.Rect tallMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static long topLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long topRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect wideMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
   @androidx.compose.Immutable public final inline class Radius {
@@ -130,14 +130,14 @@
     method public static float getX-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static operator long minus-ASmZJvU(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-ASmZJvU(long $this, long other);
+    method @androidx.compose.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.geometry.Radius.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
   public static final class Radius.Companion {
@@ -147,7 +147,7 @@
 
   public final class RadiusKt {
     method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-LIZBhPY(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Rect {
@@ -156,17 +156,17 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method public boolean contains(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect deflate(float delta);
-    method public androidx.ui.geometry.Rect expandToInclude(androidx.ui.geometry.Rect other);
+    method public boolean contains(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
-    method public androidx.ui.geometry.Offset getBottomCenter();
-    method public androidx.ui.geometry.Offset getBottomLeft();
-    method public androidx.ui.geometry.Offset getBottomRight();
-    method public androidx.ui.geometry.Offset getCenter();
-    method public androidx.ui.geometry.Offset getCenterLeft();
-    method public androidx.ui.geometry.Offset getCenterRight();
+    method public androidx.compose.ui.geometry.Offset getBottomCenter();
+    method public androidx.compose.ui.geometry.Offset getBottomLeft();
+    method public androidx.compose.ui.geometry.Offset getBottomRight();
+    method public androidx.compose.ui.geometry.Offset getCenter();
+    method public androidx.compose.ui.geometry.Offset getCenterLeft();
+    method public androidx.compose.ui.geometry.Offset getCenterRight();
     method public float getHeight();
     method public float getLeft();
     method public float getMaxDimension();
@@ -174,53 +174,53 @@
     method public float getRight();
     method public long getSize();
     method public float getTop();
-    method public androidx.ui.geometry.Offset getTopCenter();
-    method public androidx.ui.geometry.Offset getTopLeft();
-    method public androidx.ui.geometry.Offset getTopRight();
+    method public androidx.compose.ui.geometry.Offset getTopCenter();
+    method public androidx.compose.ui.geometry.Offset getTopLeft();
+    method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect intersect(androidx.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
     method @androidx.compose.Stable public boolean isEmpty();
     method @androidx.compose.Stable public boolean isFinite();
     method @androidx.compose.Stable public boolean isInfinite();
-    method public androidx.ui.geometry.Rect join(androidx.ui.geometry.Rect other);
-    method public boolean overlaps(androidx.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect shift(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect translate(float translateX, float translateY);
+    method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
+    method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
     property public final float width;
-    field public static final androidx.ui.geometry.Rect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromCircle(androidx.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromPoints(androidx.ui.geometry.Offset a, androidx.ui.geometry.Offset b);
-    method public androidx.ui.geometry.Rect getLargest();
-    method public androidx.ui.geometry.Rect getZero();
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method public androidx.compose.ui.geometry.Rect getLargest();
+    method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
     property public final float _giantScalar;
-    property public final androidx.ui.geometry.Rect largest;
-    property public final androidx.ui.geometry.Rect zero;
+    property public final androidx.compose.ui.geometry.Rect largest;
+    property public final androidx.compose.ui.geometry.Rect zero;
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect lerp(androidx.ui.geometry.Rect start, androidx.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
   @androidx.compose.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomRight-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-impl(long $this, androidx.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
     method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
@@ -232,21 +232,21 @@
     method public static float getWidth-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus-b2zCL34(long $this, long other);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
-    field public static final androidx.ui.geometry.Size.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
   public static final class Size.Companion {
-    method @Deprecated public long copy-b2zCL34(long source);
+    method @Deprecated public long copy-uvyYCjk(long source);
     method public long fromHeight(float height);
     method public long fromRadius(float radius);
     method public long fromWidth(float width);
@@ -259,11 +259,11 @@
 
   public final class SizeKt {
     method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Size? lerp-T-c3OIQ(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times--RLAD3A(int, long size);
-    method @androidx.compose.Stable public static inline operator long times-EVxmo3I(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-W1X_JKQ(double, long size);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/public_plus_experimental_current.txt b/ui/ui-geometry/api/public_plus_experimental_current.txt
index 93ff203..aea918e 100644
--- a/ui/ui-geometry/api/public_plus_experimental_current.txt
+++ b/ui/ui-geometry/api/public_plus_experimental_current.txt
@@ -1,49 +1,49 @@
 // Signature format: 3.0
-package androidx.ui.geometry {
+package androidx.compose.ui.geometry {
 
   @androidx.compose.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
-    method public androidx.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset div(float operand);
+    method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
     method @androidx.compose.Stable public float getDistance();
     method @androidx.compose.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
     method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
-    field public static final androidx.ui.geometry.Offset.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
   }
 
   public static final class Offset.Companion {
-    method public androidx.ui.geometry.Offset getInfinite();
-    method public androidx.ui.geometry.Offset getZero();
-    property public final androidx.ui.geometry.Offset Infinite;
-    property public final androidx.ui.geometry.Offset Zero;
+    method public androidx.compose.ui.geometry.Offset getInfinite();
+    method public androidx.compose.ui.geometry.Offset getZero();
+    property public final androidx.compose.ui.geometry.Offset Infinite;
+    property public final androidx.compose.ui.geometry.Offset Zero;
   }
 
   public interface OffsetBase {
     method public float getDx();
     method public float getDy();
     method public default boolean isFinite();
-    method public default boolean isGreaterOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isGreaterThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterThan(androidx.compose.ui.geometry.OffsetBase other);
     method public default boolean isInfinite();
-    method public default boolean isLessOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isLessThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isLessOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isLessThan(androidx.compose.ui.geometry.OffsetBase other);
     property public abstract float dx;
     property public abstract float dy;
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset lerp(androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -60,8 +60,8 @@
     method public float component7();
     method public float component8();
     method public float component9();
-    method public boolean contains(androidx.ui.geometry.Offset point);
-    method public androidx.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method public boolean contains(androidx.compose.ui.geometry.Offset point);
+    method public androidx.compose.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
     method public float getBottom();
     method public float getBottomLeftRadiusX();
     method public float getBottomLeftRadiusY();
@@ -76,48 +76,48 @@
     method public float getTopRightRadiusX();
     method public float getTopRightRadiusY();
     method public float getWidth();
-    method public static androidx.ui.geometry.RRect getZero();
+    method public static androidx.compose.ui.geometry.RRect getZero();
     property public final float height;
     property public final float width;
-    field public static final androidx.ui.geometry.RRect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.RRect.Companion Companion;
   }
 
   public static final class RRect.Companion {
-    method public androidx.ui.geometry.RRect getZero();
-    property public final androidx.ui.geometry.RRect Zero;
+    method public androidx.compose.ui.geometry.RRect getZero();
+    property public final androidx.compose.ui.geometry.RRect Zero;
   }
 
   public final class RRectKt {
-    method public static androidx.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect(androidx.ui.geometry.Rect rect, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect-SonKKtE(androidx.ui.geometry.Rect rect, long radius);
-    method public static androidx.ui.geometry.RRect RRect-a8KmX9Q(androidx.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static androidx.ui.geometry.RRect RRect-iLOfVQs(float left, float top, float right, float bottom, long radius);
-    method public static androidx.ui.geometry.RRect RRect-kGjprzs(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static long bottomLeftRadius(androidx.ui.geometry.RRect);
-    method public static long bottomRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Offset center(androidx.ui.geometry.RRect);
-    method public static float getLongestSide(androidx.ui.geometry.RRect);
-    method public static float getShortestSide(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect grow(androidx.ui.geometry.RRect, float delta);
-    method public static boolean isCircle(androidx.ui.geometry.RRect);
-    method public static boolean isEllipse(androidx.ui.geometry.RRect);
-    method public static boolean isEmpty(androidx.ui.geometry.RRect);
-    method public static boolean isFinite(androidx.ui.geometry.RRect);
-    method public static boolean isRect(androidx.ui.geometry.RRect);
-    method public static boolean isSimple(androidx.ui.geometry.RRect);
-    method public static boolean isStadium(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect lerp(androidx.ui.geometry.RRect start, androidx.ui.geometry.RRect stop, float fraction);
-    method public static androidx.ui.geometry.Rect middleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect outerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect safeInnerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect shift(androidx.ui.geometry.RRect, androidx.ui.geometry.Offset offset);
-    method public static androidx.ui.geometry.RRect shrink(androidx.ui.geometry.RRect, float delta);
-    method public static androidx.ui.geometry.Rect tallMiddleRect(androidx.ui.geometry.RRect);
-    method public static long topLeftRadius(androidx.ui.geometry.RRect);
-    method public static long topRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect wideMiddleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect withRadius-ql9n_fM(androidx.ui.geometry.RRect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect-9kgzNNk(androidx.compose.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-FXlJaX8(androidx.compose.ui.geometry.Rect rect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect-HepwI24(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-TZLOQlQ(float left, float top, float right, float bottom, long radius);
+    method public static long bottomLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long bottomRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Offset center(androidx.compose.ui.geometry.RRect);
+    method public static float getLongestSide(androidx.compose.ui.geometry.RRect);
+    method public static float getShortestSide(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect grow(androidx.compose.ui.geometry.RRect, float delta);
+    method public static boolean isCircle(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEllipse(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEmpty(androidx.compose.ui.geometry.RRect);
+    method public static boolean isFinite(androidx.compose.ui.geometry.RRect);
+    method public static boolean isRect(androidx.compose.ui.geometry.RRect);
+    method public static boolean isSimple(androidx.compose.ui.geometry.RRect);
+    method public static boolean isStadium(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect lerp(androidx.compose.ui.geometry.RRect start, androidx.compose.ui.geometry.RRect stop, float fraction);
+    method public static androidx.compose.ui.geometry.Rect middleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect outerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect safeInnerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect shift(androidx.compose.ui.geometry.RRect, androidx.compose.ui.geometry.Offset offset);
+    method public static androidx.compose.ui.geometry.RRect shrink(androidx.compose.ui.geometry.RRect, float delta);
+    method public static androidx.compose.ui.geometry.Rect tallMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static long topLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long topRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect wideMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
   @androidx.compose.Immutable public final inline class Radius {
@@ -130,14 +130,14 @@
     method public static float getX-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static operator long minus-ASmZJvU(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-ASmZJvU(long $this, long other);
+    method @androidx.compose.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.geometry.Radius.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
   public static final class Radius.Companion {
@@ -147,7 +147,7 @@
 
   public final class RadiusKt {
     method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-LIZBhPY(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Rect {
@@ -156,17 +156,17 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method public boolean contains(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect deflate(float delta);
-    method public androidx.ui.geometry.Rect expandToInclude(androidx.ui.geometry.Rect other);
+    method public boolean contains(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
-    method public androidx.ui.geometry.Offset getBottomCenter();
-    method public androidx.ui.geometry.Offset getBottomLeft();
-    method public androidx.ui.geometry.Offset getBottomRight();
-    method public androidx.ui.geometry.Offset getCenter();
-    method public androidx.ui.geometry.Offset getCenterLeft();
-    method public androidx.ui.geometry.Offset getCenterRight();
+    method public androidx.compose.ui.geometry.Offset getBottomCenter();
+    method public androidx.compose.ui.geometry.Offset getBottomLeft();
+    method public androidx.compose.ui.geometry.Offset getBottomRight();
+    method public androidx.compose.ui.geometry.Offset getCenter();
+    method public androidx.compose.ui.geometry.Offset getCenterLeft();
+    method public androidx.compose.ui.geometry.Offset getCenterRight();
     method public float getHeight();
     method public float getLeft();
     method public float getMaxDimension();
@@ -174,53 +174,53 @@
     method public float getRight();
     method public long getSize();
     method public float getTop();
-    method public androidx.ui.geometry.Offset getTopCenter();
-    method public androidx.ui.geometry.Offset getTopLeft();
-    method public androidx.ui.geometry.Offset getTopRight();
+    method public androidx.compose.ui.geometry.Offset getTopCenter();
+    method public androidx.compose.ui.geometry.Offset getTopLeft();
+    method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect intersect(androidx.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
     method @androidx.compose.Stable public boolean isEmpty();
     method @androidx.compose.Stable public boolean isFinite();
     method @androidx.compose.Stable public boolean isInfinite();
-    method public androidx.ui.geometry.Rect join(androidx.ui.geometry.Rect other);
-    method public boolean overlaps(androidx.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect shift(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect translate(float translateX, float translateY);
+    method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
+    method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
     property public final float width;
-    field public static final androidx.ui.geometry.Rect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromCircle(androidx.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromPoints(androidx.ui.geometry.Offset a, androidx.ui.geometry.Offset b);
-    method public androidx.ui.geometry.Rect getLargest();
-    method public androidx.ui.geometry.Rect getZero();
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method public androidx.compose.ui.geometry.Rect getLargest();
+    method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
     property public final float _giantScalar;
-    property public final androidx.ui.geometry.Rect largest;
-    property public final androidx.ui.geometry.Rect zero;
+    property public final androidx.compose.ui.geometry.Rect largest;
+    property public final androidx.compose.ui.geometry.Rect zero;
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect lerp(androidx.ui.geometry.Rect start, androidx.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
   @androidx.compose.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomRight-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-impl(long $this, androidx.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
     method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
@@ -232,21 +232,21 @@
     method public static float getWidth-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus-b2zCL34(long $this, long other);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
-    field public static final androidx.ui.geometry.Size.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
   public static final class Size.Companion {
-    method @Deprecated public long copy-b2zCL34(long source);
+    method @Deprecated public long copy-uvyYCjk(long source);
     method public long fromHeight(float height);
     method public long fromRadius(float radius);
     method public long fromWidth(float width);
@@ -259,11 +259,11 @@
 
   public final class SizeKt {
     method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Size? lerp-T-c3OIQ(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times--RLAD3A(int, long size);
-    method @androidx.compose.Stable public static inline operator long times-EVxmo3I(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-W1X_JKQ(double, long size);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/restricted_0.1.0-dev16.txt b/ui/ui-geometry/api/restricted_0.1.0-dev16.txt
index 93ff203..aea918e 100644
--- a/ui/ui-geometry/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-geometry/api/restricted_0.1.0-dev16.txt
@@ -1,49 +1,49 @@
 // Signature format: 3.0
-package androidx.ui.geometry {
+package androidx.compose.ui.geometry {
 
   @androidx.compose.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
-    method public androidx.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset div(float operand);
+    method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
     method @androidx.compose.Stable public float getDistance();
     method @androidx.compose.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
     method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
-    field public static final androidx.ui.geometry.Offset.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
   }
 
   public static final class Offset.Companion {
-    method public androidx.ui.geometry.Offset getInfinite();
-    method public androidx.ui.geometry.Offset getZero();
-    property public final androidx.ui.geometry.Offset Infinite;
-    property public final androidx.ui.geometry.Offset Zero;
+    method public androidx.compose.ui.geometry.Offset getInfinite();
+    method public androidx.compose.ui.geometry.Offset getZero();
+    property public final androidx.compose.ui.geometry.Offset Infinite;
+    property public final androidx.compose.ui.geometry.Offset Zero;
   }
 
   public interface OffsetBase {
     method public float getDx();
     method public float getDy();
     method public default boolean isFinite();
-    method public default boolean isGreaterOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isGreaterThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterThan(androidx.compose.ui.geometry.OffsetBase other);
     method public default boolean isInfinite();
-    method public default boolean isLessOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isLessThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isLessOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isLessThan(androidx.compose.ui.geometry.OffsetBase other);
     property public abstract float dx;
     property public abstract float dy;
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset lerp(androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -60,8 +60,8 @@
     method public float component7();
     method public float component8();
     method public float component9();
-    method public boolean contains(androidx.ui.geometry.Offset point);
-    method public androidx.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method public boolean contains(androidx.compose.ui.geometry.Offset point);
+    method public androidx.compose.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
     method public float getBottom();
     method public float getBottomLeftRadiusX();
     method public float getBottomLeftRadiusY();
@@ -76,48 +76,48 @@
     method public float getTopRightRadiusX();
     method public float getTopRightRadiusY();
     method public float getWidth();
-    method public static androidx.ui.geometry.RRect getZero();
+    method public static androidx.compose.ui.geometry.RRect getZero();
     property public final float height;
     property public final float width;
-    field public static final androidx.ui.geometry.RRect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.RRect.Companion Companion;
   }
 
   public static final class RRect.Companion {
-    method public androidx.ui.geometry.RRect getZero();
-    property public final androidx.ui.geometry.RRect Zero;
+    method public androidx.compose.ui.geometry.RRect getZero();
+    property public final androidx.compose.ui.geometry.RRect Zero;
   }
 
   public final class RRectKt {
-    method public static androidx.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect(androidx.ui.geometry.Rect rect, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect-SonKKtE(androidx.ui.geometry.Rect rect, long radius);
-    method public static androidx.ui.geometry.RRect RRect-a8KmX9Q(androidx.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static androidx.ui.geometry.RRect RRect-iLOfVQs(float left, float top, float right, float bottom, long radius);
-    method public static androidx.ui.geometry.RRect RRect-kGjprzs(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static long bottomLeftRadius(androidx.ui.geometry.RRect);
-    method public static long bottomRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Offset center(androidx.ui.geometry.RRect);
-    method public static float getLongestSide(androidx.ui.geometry.RRect);
-    method public static float getShortestSide(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect grow(androidx.ui.geometry.RRect, float delta);
-    method public static boolean isCircle(androidx.ui.geometry.RRect);
-    method public static boolean isEllipse(androidx.ui.geometry.RRect);
-    method public static boolean isEmpty(androidx.ui.geometry.RRect);
-    method public static boolean isFinite(androidx.ui.geometry.RRect);
-    method public static boolean isRect(androidx.ui.geometry.RRect);
-    method public static boolean isSimple(androidx.ui.geometry.RRect);
-    method public static boolean isStadium(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect lerp(androidx.ui.geometry.RRect start, androidx.ui.geometry.RRect stop, float fraction);
-    method public static androidx.ui.geometry.Rect middleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect outerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect safeInnerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect shift(androidx.ui.geometry.RRect, androidx.ui.geometry.Offset offset);
-    method public static androidx.ui.geometry.RRect shrink(androidx.ui.geometry.RRect, float delta);
-    method public static androidx.ui.geometry.Rect tallMiddleRect(androidx.ui.geometry.RRect);
-    method public static long topLeftRadius(androidx.ui.geometry.RRect);
-    method public static long topRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect wideMiddleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect withRadius-ql9n_fM(androidx.ui.geometry.RRect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect-9kgzNNk(androidx.compose.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-FXlJaX8(androidx.compose.ui.geometry.Rect rect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect-HepwI24(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-TZLOQlQ(float left, float top, float right, float bottom, long radius);
+    method public static long bottomLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long bottomRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Offset center(androidx.compose.ui.geometry.RRect);
+    method public static float getLongestSide(androidx.compose.ui.geometry.RRect);
+    method public static float getShortestSide(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect grow(androidx.compose.ui.geometry.RRect, float delta);
+    method public static boolean isCircle(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEllipse(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEmpty(androidx.compose.ui.geometry.RRect);
+    method public static boolean isFinite(androidx.compose.ui.geometry.RRect);
+    method public static boolean isRect(androidx.compose.ui.geometry.RRect);
+    method public static boolean isSimple(androidx.compose.ui.geometry.RRect);
+    method public static boolean isStadium(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect lerp(androidx.compose.ui.geometry.RRect start, androidx.compose.ui.geometry.RRect stop, float fraction);
+    method public static androidx.compose.ui.geometry.Rect middleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect outerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect safeInnerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect shift(androidx.compose.ui.geometry.RRect, androidx.compose.ui.geometry.Offset offset);
+    method public static androidx.compose.ui.geometry.RRect shrink(androidx.compose.ui.geometry.RRect, float delta);
+    method public static androidx.compose.ui.geometry.Rect tallMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static long topLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long topRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect wideMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
   @androidx.compose.Immutable public final inline class Radius {
@@ -130,14 +130,14 @@
     method public static float getX-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static operator long minus-ASmZJvU(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-ASmZJvU(long $this, long other);
+    method @androidx.compose.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.geometry.Radius.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
   public static final class Radius.Companion {
@@ -147,7 +147,7 @@
 
   public final class RadiusKt {
     method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-LIZBhPY(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Rect {
@@ -156,17 +156,17 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method public boolean contains(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect deflate(float delta);
-    method public androidx.ui.geometry.Rect expandToInclude(androidx.ui.geometry.Rect other);
+    method public boolean contains(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
-    method public androidx.ui.geometry.Offset getBottomCenter();
-    method public androidx.ui.geometry.Offset getBottomLeft();
-    method public androidx.ui.geometry.Offset getBottomRight();
-    method public androidx.ui.geometry.Offset getCenter();
-    method public androidx.ui.geometry.Offset getCenterLeft();
-    method public androidx.ui.geometry.Offset getCenterRight();
+    method public androidx.compose.ui.geometry.Offset getBottomCenter();
+    method public androidx.compose.ui.geometry.Offset getBottomLeft();
+    method public androidx.compose.ui.geometry.Offset getBottomRight();
+    method public androidx.compose.ui.geometry.Offset getCenter();
+    method public androidx.compose.ui.geometry.Offset getCenterLeft();
+    method public androidx.compose.ui.geometry.Offset getCenterRight();
     method public float getHeight();
     method public float getLeft();
     method public float getMaxDimension();
@@ -174,53 +174,53 @@
     method public float getRight();
     method public long getSize();
     method public float getTop();
-    method public androidx.ui.geometry.Offset getTopCenter();
-    method public androidx.ui.geometry.Offset getTopLeft();
-    method public androidx.ui.geometry.Offset getTopRight();
+    method public androidx.compose.ui.geometry.Offset getTopCenter();
+    method public androidx.compose.ui.geometry.Offset getTopLeft();
+    method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect intersect(androidx.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
     method @androidx.compose.Stable public boolean isEmpty();
     method @androidx.compose.Stable public boolean isFinite();
     method @androidx.compose.Stable public boolean isInfinite();
-    method public androidx.ui.geometry.Rect join(androidx.ui.geometry.Rect other);
-    method public boolean overlaps(androidx.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect shift(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect translate(float translateX, float translateY);
+    method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
+    method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
     property public final float width;
-    field public static final androidx.ui.geometry.Rect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromCircle(androidx.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromPoints(androidx.ui.geometry.Offset a, androidx.ui.geometry.Offset b);
-    method public androidx.ui.geometry.Rect getLargest();
-    method public androidx.ui.geometry.Rect getZero();
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method public androidx.compose.ui.geometry.Rect getLargest();
+    method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
     property public final float _giantScalar;
-    property public final androidx.ui.geometry.Rect largest;
-    property public final androidx.ui.geometry.Rect zero;
+    property public final androidx.compose.ui.geometry.Rect largest;
+    property public final androidx.compose.ui.geometry.Rect zero;
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect lerp(androidx.ui.geometry.Rect start, androidx.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
   @androidx.compose.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomRight-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-impl(long $this, androidx.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
     method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
@@ -232,21 +232,21 @@
     method public static float getWidth-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus-b2zCL34(long $this, long other);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
-    field public static final androidx.ui.geometry.Size.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
   public static final class Size.Companion {
-    method @Deprecated public long copy-b2zCL34(long source);
+    method @Deprecated public long copy-uvyYCjk(long source);
     method public long fromHeight(float height);
     method public long fromRadius(float radius);
     method public long fromWidth(float width);
@@ -259,11 +259,11 @@
 
   public final class SizeKt {
     method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Size? lerp-T-c3OIQ(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times--RLAD3A(int, long size);
-    method @androidx.compose.Stable public static inline operator long times-EVxmo3I(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-W1X_JKQ(double, long size);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/restricted_current.txt b/ui/ui-geometry/api/restricted_current.txt
index 93ff203..aea918e 100644
--- a/ui/ui-geometry/api/restricted_current.txt
+++ b/ui/ui-geometry/api/restricted_current.txt
@@ -1,49 +1,49 @@
 // Signature format: 3.0
-package androidx.ui.geometry {
+package androidx.compose.ui.geometry {
 
   @androidx.compose.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
-    method public androidx.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset div(float operand);
+    method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
     method @androidx.compose.Stable public float getDistance();
     method @androidx.compose.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
     method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
-    field public static final androidx.ui.geometry.Offset.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
   }
 
   public static final class Offset.Companion {
-    method public androidx.ui.geometry.Offset getInfinite();
-    method public androidx.ui.geometry.Offset getZero();
-    property public final androidx.ui.geometry.Offset Infinite;
-    property public final androidx.ui.geometry.Offset Zero;
+    method public androidx.compose.ui.geometry.Offset getInfinite();
+    method public androidx.compose.ui.geometry.Offset getZero();
+    property public final androidx.compose.ui.geometry.Offset Infinite;
+    property public final androidx.compose.ui.geometry.Offset Zero;
   }
 
   public interface OffsetBase {
     method public float getDx();
     method public float getDy();
     method public default boolean isFinite();
-    method public default boolean isGreaterOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isGreaterThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isGreaterThan(androidx.compose.ui.geometry.OffsetBase other);
     method public default boolean isInfinite();
-    method public default boolean isLessOrEqThan(androidx.ui.geometry.OffsetBase other);
-    method public default boolean isLessThan(androidx.ui.geometry.OffsetBase other);
+    method public default boolean isLessOrEqThan(androidx.compose.ui.geometry.OffsetBase other);
+    method public default boolean isLessThan(androidx.compose.ui.geometry.OffsetBase other);
     property public abstract float dx;
     property public abstract float dy;
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset lerp(androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -60,8 +60,8 @@
     method public float component7();
     method public float component8();
     method public float component9();
-    method public boolean contains(androidx.ui.geometry.Offset point);
-    method public androidx.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
+    method public boolean contains(androidx.compose.ui.geometry.Offset point);
+    method public androidx.compose.ui.geometry.RRect copy(float left, float top, float right, float bottom, float topLeftRadiusX, float topLeftRadiusY, float topRightRadiusX, float topRightRadiusY, float bottomRightRadiusX, float bottomRightRadiusY, float bottomLeftRadiusX, float bottomLeftRadiusY);
     method public float getBottom();
     method public float getBottomLeftRadiusX();
     method public float getBottomLeftRadiusY();
@@ -76,48 +76,48 @@
     method public float getTopRightRadiusX();
     method public float getTopRightRadiusY();
     method public float getWidth();
-    method public static androidx.ui.geometry.RRect getZero();
+    method public static androidx.compose.ui.geometry.RRect getZero();
     property public final float height;
     property public final float width;
-    field public static final androidx.ui.geometry.RRect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.RRect.Companion Companion;
   }
 
   public static final class RRect.Companion {
-    method public androidx.ui.geometry.RRect getZero();
-    property public final androidx.ui.geometry.RRect Zero;
+    method public androidx.compose.ui.geometry.RRect getZero();
+    property public final androidx.compose.ui.geometry.RRect Zero;
   }
 
   public final class RRectKt {
-    method public static androidx.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect(androidx.ui.geometry.Rect rect, float radiusX, float radiusY);
-    method public static androidx.ui.geometry.RRect RRect-SonKKtE(androidx.ui.geometry.Rect rect, long radius);
-    method public static androidx.ui.geometry.RRect RRect-a8KmX9Q(androidx.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static androidx.ui.geometry.RRect RRect-iLOfVQs(float left, float top, float right, float bottom, long radius);
-    method public static androidx.ui.geometry.RRect RRect-kGjprzs(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
-    method public static long bottomLeftRadius(androidx.ui.geometry.RRect);
-    method public static long bottomRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Offset center(androidx.ui.geometry.RRect);
-    method public static float getLongestSide(androidx.ui.geometry.RRect);
-    method public static float getShortestSide(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect grow(androidx.ui.geometry.RRect, float delta);
-    method public static boolean isCircle(androidx.ui.geometry.RRect);
-    method public static boolean isEllipse(androidx.ui.geometry.RRect);
-    method public static boolean isEmpty(androidx.ui.geometry.RRect);
-    method public static boolean isFinite(androidx.ui.geometry.RRect);
-    method public static boolean isRect(androidx.ui.geometry.RRect);
-    method public static boolean isSimple(androidx.ui.geometry.RRect);
-    method public static boolean isStadium(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect lerp(androidx.ui.geometry.RRect start, androidx.ui.geometry.RRect stop, float fraction);
-    method public static androidx.ui.geometry.Rect middleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect outerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect safeInnerRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect shift(androidx.ui.geometry.RRect, androidx.ui.geometry.Offset offset);
-    method public static androidx.ui.geometry.RRect shrink(androidx.ui.geometry.RRect, float delta);
-    method public static androidx.ui.geometry.Rect tallMiddleRect(androidx.ui.geometry.RRect);
-    method public static long topLeftRadius(androidx.ui.geometry.RRect);
-    method public static long topRightRadius(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.Rect wideMiddleRect(androidx.ui.geometry.RRect);
-    method public static androidx.ui.geometry.RRect withRadius-ql9n_fM(androidx.ui.geometry.RRect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect(float left, float top, float right, float bottom, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect(androidx.compose.ui.geometry.Rect rect, float radiusX, float radiusY);
+    method public static androidx.compose.ui.geometry.RRect RRect-9kgzNNk(androidx.compose.ui.geometry.Rect rect, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-FXlJaX8(androidx.compose.ui.geometry.Rect rect, long radius);
+    method public static androidx.compose.ui.geometry.RRect RRect-HepwI24(float left, float top, float right, float bottom, long topLeft = Radius.Zero, long topRight = Radius.Zero, long bottomRight = Radius.Zero, long bottomLeft = Radius.Zero);
+    method public static androidx.compose.ui.geometry.RRect RRect-TZLOQlQ(float left, float top, float right, float bottom, long radius);
+    method public static long bottomLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long bottomRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Offset center(androidx.compose.ui.geometry.RRect);
+    method public static float getLongestSide(androidx.compose.ui.geometry.RRect);
+    method public static float getShortestSide(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect grow(androidx.compose.ui.geometry.RRect, float delta);
+    method public static boolean isCircle(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEllipse(androidx.compose.ui.geometry.RRect);
+    method public static boolean isEmpty(androidx.compose.ui.geometry.RRect);
+    method public static boolean isFinite(androidx.compose.ui.geometry.RRect);
+    method public static boolean isRect(androidx.compose.ui.geometry.RRect);
+    method public static boolean isSimple(androidx.compose.ui.geometry.RRect);
+    method public static boolean isStadium(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect lerp(androidx.compose.ui.geometry.RRect start, androidx.compose.ui.geometry.RRect stop, float fraction);
+    method public static androidx.compose.ui.geometry.Rect middleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect outerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect safeInnerRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect shift(androidx.compose.ui.geometry.RRect, androidx.compose.ui.geometry.Offset offset);
+    method public static androidx.compose.ui.geometry.RRect shrink(androidx.compose.ui.geometry.RRect, float delta);
+    method public static androidx.compose.ui.geometry.Rect tallMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static long topLeftRadius(androidx.compose.ui.geometry.RRect);
+    method public static long topRightRadius(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.Rect wideMiddleRect(androidx.compose.ui.geometry.RRect);
+    method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
   @androidx.compose.Immutable public final inline class Radius {
@@ -130,14 +130,14 @@
     method public static float getX-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static operator long minus-ASmZJvU(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-ASmZJvU(long $this, long other);
+    method @androidx.compose.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.geometry.Radius.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
   public static final class Radius.Companion {
@@ -147,7 +147,7 @@
 
   public final class RadiusKt {
     method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-LIZBhPY(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
   @androidx.compose.Immutable public final class Rect {
@@ -156,17 +156,17 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method public boolean contains(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect deflate(float delta);
-    method public androidx.ui.geometry.Rect expandToInclude(androidx.ui.geometry.Rect other);
+    method public boolean contains(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
-    method public androidx.ui.geometry.Offset getBottomCenter();
-    method public androidx.ui.geometry.Offset getBottomLeft();
-    method public androidx.ui.geometry.Offset getBottomRight();
-    method public androidx.ui.geometry.Offset getCenter();
-    method public androidx.ui.geometry.Offset getCenterLeft();
-    method public androidx.ui.geometry.Offset getCenterRight();
+    method public androidx.compose.ui.geometry.Offset getBottomCenter();
+    method public androidx.compose.ui.geometry.Offset getBottomLeft();
+    method public androidx.compose.ui.geometry.Offset getBottomRight();
+    method public androidx.compose.ui.geometry.Offset getCenter();
+    method public androidx.compose.ui.geometry.Offset getCenterLeft();
+    method public androidx.compose.ui.geometry.Offset getCenterRight();
     method public float getHeight();
     method public float getLeft();
     method public float getMaxDimension();
@@ -174,53 +174,53 @@
     method public float getRight();
     method public long getSize();
     method public float getTop();
-    method public androidx.ui.geometry.Offset getTopCenter();
-    method public androidx.ui.geometry.Offset getTopLeft();
-    method public androidx.ui.geometry.Offset getTopRight();
+    method public androidx.compose.ui.geometry.Offset getTopCenter();
+    method public androidx.compose.ui.geometry.Offset getTopLeft();
+    method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect intersect(androidx.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
     method @androidx.compose.Stable public boolean isEmpty();
     method @androidx.compose.Stable public boolean isFinite();
     method @androidx.compose.Stable public boolean isInfinite();
-    method public androidx.ui.geometry.Rect join(androidx.ui.geometry.Rect other);
-    method public boolean overlaps(androidx.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect shift(androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect translate(float translateX, float translateY);
+    method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
+    method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
     property public final float width;
-    field public static final androidx.ui.geometry.Rect.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Rect.Companion Companion;
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromCircle(androidx.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.ui.geometry.Rect fromPoints(androidx.ui.geometry.Offset a, androidx.ui.geometry.Offset b);
-    method public androidx.ui.geometry.Rect getLargest();
-    method public androidx.ui.geometry.Rect getZero();
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method public androidx.compose.ui.geometry.Rect getLargest();
+    method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
     property public final float _giantScalar;
-    property public final androidx.ui.geometry.Rect largest;
-    property public final androidx.ui.geometry.Rect zero;
+    property public final androidx.compose.ui.geometry.Rect largest;
+    property public final androidx.compose.ui.geometry.Rect zero;
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect lerp(androidx.ui.geometry.Rect start, androidx.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
   @androidx.compose.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset bottomRight-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-impl(long $this, androidx.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset centerRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
     method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
@@ -232,21 +232,21 @@
     method public static float getWidth-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus-b2zCL34(long $this, long other);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
     method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
     method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topCenter-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topLeft-impl(long $this, androidx.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset topRight-impl(long $this, androidx.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
-    field public static final androidx.ui.geometry.Size.Companion Companion;
+    field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
   public static final class Size.Companion {
-    method @Deprecated public long copy-b2zCL34(long source);
+    method @Deprecated public long copy-uvyYCjk(long source);
     method public long fromHeight(float height);
     method public long fromRadius(float radius);
     method public long fromWidth(float width);
@@ -259,11 +259,11 @@
 
   public final class SizeKt {
     method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Size? lerp-T-c3OIQ(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times--RLAD3A(int, long size);
-    method @androidx.compose.Stable public static inline operator long times-EVxmo3I(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-W1X_JKQ(double, long size);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect-b2zCL34(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/src/androidMain/AndroidManifest.xml b/ui/ui-geometry/src/androidMain/AndroidManifest.xml
index 0f74d3e..7cba91e 100644
--- a/ui/ui-geometry/src/androidMain/AndroidManifest.xml
+++ b/ui/ui-geometry/src/androidMain/AndroidManifest.xml
@@ -13,4 +13,4 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<manifest package="androidx.ui.geometry" />
+<manifest package="androidx.compose.ui.geometry" />
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Offset.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Offset.kt
similarity index 99%
rename from ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Offset.kt
rename to ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Offset.kt
index 7d22979..fd33172 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Offset.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Offset.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/OffsetBase.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/OffsetBase.kt
similarity index 98%
rename from ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/OffsetBase.kt
rename to ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/OffsetBase.kt
index ef4cab8..4666f35 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/OffsetBase.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/OffsetBase.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 /**
  * Base class for [Size] and [Offset], which are both ways to describe
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/RRect.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/RRect.kt
similarity index 99%
rename from ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/RRect.kt
rename to ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/RRect.kt
index f40fdf8..8f3379c 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/RRect.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/RRect.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import androidx.ui.util.lerp
 import androidx.ui.util.toStringAsFixed
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Radius.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Radius.kt
similarity index 99%
rename from ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Radius.kt
rename to ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Radius.kt
index c4d6cf2..2dd09ba 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Radius.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Radius.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Rect.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Rect.kt
similarity index 99%
rename from ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Rect.kt
rename to ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Rect.kt
index 2fbe835..1a45c62 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Rect.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Rect.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Size.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Size.kt
similarity index 99%
rename from ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Size.kt
rename to ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Size.kt
index 4299c06..b0cd5c5 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/ui/geometry/Size.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Size.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/OffsetTest.kt b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/OffsetTest.kt
similarity index 97%
rename from ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/OffsetTest.kt
rename to ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/OffsetTest.kt
index 44de12c..82eb717 100644
--- a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/OffsetTest.kt
+++ b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/OffsetTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import org.junit.Assert
 import org.junit.Test
diff --git a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RRectTest.kt b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RRectTest.kt
similarity index 92%
rename from ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RRectTest.kt
rename to ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RRectTest.kt
index 5a63415..f648195 100644
--- a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RRectTest.kt
+++ b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RRectTest.kt
@@ -14,12 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.ui.engine.geometry
+package androidx.compose.ui.geometry
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Rect
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RadiusTest.kt b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RadiusTest.kt
similarity index 97%
rename from ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RadiusTest.kt
rename to ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RadiusTest.kt
index 7d5b936..1f68a25 100644
--- a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RadiusTest.kt
+++ b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RadiusTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import org.junit.Assert
 import org.junit.Test
diff --git a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RectTest.kt b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RectTest.kt
similarity index 96%
rename from ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RectTest.kt
rename to ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RectTest.kt
index e5b614a..f75dd59 100644
--- a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/RectTest.kt
+++ b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/RectTest.kt
@@ -14,9 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.ui.engine.geometry
+package androidx.compose.ui.geometry
 
-import androidx.ui.geometry.Rect
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/SizeTest.kt b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/SizeTest.kt
similarity index 98%
rename from ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/SizeTest.kt
rename to ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/SizeTest.kt
index 7fe5cf2..d2e6f37 100644
--- a/ui/ui-geometry/src/test/kotlin/androidx/ui/geometry/SizeTest.kt
+++ b/ui/ui-geometry/src/test/kotlin/androidx/compose/ui/geometry/SizeTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.geometry
+package androidx.compose.ui.geometry
 
 import org.junit.Assert
 import org.junit.Test
diff --git a/ui/ui-graphics/api/0.1.0-dev16.txt b/ui/ui-graphics/api/0.1.0-dev16.txt
index 652ec98..1a9e14f 100644
--- a/ui/ui-graphics/api/0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/0.1.0-dev16.txt
@@ -2,9 +2,9 @@
 package androidx.ui.core {
 
   public final class RectHelperKt {
-    method public static android.graphics.Rect toAndroidRect(androidx.ui.geometry.Rect);
-    method public static android.graphics.RectF toAndroidRectF(androidx.ui.geometry.Rect);
-    method public static androidx.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+    method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+    method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+    method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
   }
 
 }
@@ -75,16 +75,16 @@
   public final class AndroidPath implements androidx.ui.graphics.Path {
     ctor public AndroidPath(android.graphics.Path internalPath);
     ctor public AndroidPath();
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public android.graphics.Path getInternalPath();
     method public boolean isConvex();
@@ -99,7 +99,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType value);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public androidx.ui.graphics.PathFillType fillType;
     property public boolean isConvex;
     property public boolean isEmpty;
@@ -177,23 +177,23 @@
 
   public interface Canvas {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default void clipRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
+    method public default void clipRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left, float top, float right, float bottom, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
-    method public default void drawArc(androidx.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public default void drawArcRad(androidx.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
-    method public default void drawOval(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
-    method public default void drawRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
     method public void drawVertices(androidx.ui.graphics.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
@@ -202,7 +202,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy = sx);
     method public void skew(float sx, float sy);
     method public default void skewRad(float sxRad, float syRad);
@@ -221,7 +221,7 @@
     method public static void rotateRad(androidx.ui.graphics.Canvas, float radians, float pivotX = 0.0f, float pivotY = 0.0f);
     method public static void scale(androidx.ui.graphics.Canvas, float sx, float sy = sx, float pivotX, float pivotY);
     method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
   public enum ClipOp {
@@ -407,17 +407,17 @@
   }
 
   public static final class Outline.Rectangle extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rectangle(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect component1();
-    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect getRect();
+    ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect component1();
+    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect getRect();
   }
 
   public static final class Outline.Rounded extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rounded(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect component1();
-    method public androidx.ui.graphics.Outline.Rounded copy(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect getRrect();
+    ctor public Outline.Rounded(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect component1();
+    method public androidx.ui.graphics.Outline.Rounded copy(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect getRrect();
   }
 
   public final class OutlineKt {
@@ -482,17 +482,17 @@
   }
 
   public interface Path {
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset = Offset.Zero);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public default void arcToRad(androidx.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset = Offset.Zero);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public boolean isConvex();
     method public boolean isEmpty();
@@ -506,7 +506,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType p);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public abstract androidx.ui.graphics.PathFillType fillType;
     property public abstract boolean isConvex;
     property public abstract boolean isEmpty;
@@ -575,18 +575,18 @@
 
   public final class ShaderKt {
     method public static android.graphics.Shader ImageShader(androidx.ui.graphics.ImageAsset image, androidx.ui.graphics.TileMode tileModeX = androidx.ui.graphics.TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader LinearGradientShader(androidx.ui.geometry.Offset from, androidx.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader RadialGradientShader(androidx.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader LinearGradientShader(androidx.compose.ui.geometry.Offset from, androidx.compose.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
   }
 
   @androidx.compose.Immutable public final class Shadow {
     method public long component1();
-    method public androidx.ui.geometry.Offset component2();
+    method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-hgWLwZA(long color, androidx.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-FCpisBw(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
-    method public androidx.ui.geometry.Offset getOffset();
+    method public androidx.compose.ui.geometry.Offset getOffset();
     field public static final androidx.ui.graphics.Shadow.Companion Companion;
   }
 
@@ -600,7 +600,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.ui.graphics.Brush {
@@ -643,7 +643,7 @@
   }
 
   public final class Vertices {
-    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.ui.geometry.Offset> positions, java.util.List<androidx.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
     method public int[] getColors();
     method public short[] getIndices();
     method public float[] getPositions();
@@ -844,29 +844,29 @@
 
   @androidx.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
     ctor public DrawScope();
-    method protected final void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public final void drawArc-MKXvu20(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawArc-w9iw49s(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle-UNeD5NE(long color, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method protected final void draw-swQIOhk(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+    method public final void drawArc-0Wb1Q30(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawArc-8M-MFw4(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle-tRCJLes(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine-LIcrJ00(long color, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine-8PwHTz4(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath-u5ZPEDk(androidx.ui.graphics.Path path, long color, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints-op7krm4(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-J_jAawI(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-TLscAYA(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final androidx.ui.geometry.Offset getCenter();
+    method public final void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawPoints-op7krm4(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-WpID2II(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-zFLLicA(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final androidx.compose.ui.geometry.Offset getCenter();
     method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     method public final long getSize();
-    property public final androidx.ui.geometry.Offset center;
+    property public final androidx.compose.ui.geometry.Offset center;
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.ui.graphics.drawscope.DrawScope.Companion Companion;
@@ -880,7 +880,7 @@
   public final class DrawScopeKt {
     method public static inline void clipPath(androidx.ui.graphics.drawscope.DrawScope, androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void clipRect(androidx.ui.graphics.drawscope.DrawScope, float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.ui.geometry.Size,kotlin.Unit> block);
+    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.compose.ui.geometry.Size,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float dx = 0.0f, float dy = 0.0f, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void rotate(androidx.ui.graphics.drawscope.DrawScope, float degrees, float pivotX = center.x, float pivotY = center.y, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -899,14 +899,14 @@
   @androidx.ui.graphics.drawscope.DrawScopeMarker public interface DrawTransform {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default androidx.ui.geometry.Offset getCenter();
+    method public default androidx.compose.ui.geometry.Offset getCenter();
     method public long getSize();
     method public void inset(float left, float top, float right, float bottom);
     method public void rotate(float degrees, float pivotX = center.x, float pivotY = center.y);
     method public void scale(float scaleX, float scaleY = scaleX, float pivotX = center.x, float pivotY = center.y);
     method public void transform(androidx.ui.graphics.vectormath.Matrix4 matrix);
     method public void translate(float left = 0.0f, float top = 0.0f);
-    property public default androidx.ui.geometry.Offset center;
+    property public default androidx.compose.ui.geometry.Offset center;
     property public abstract long size;
   }
 
@@ -971,7 +971,7 @@
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.ui.graphics.ColorFilter? colorFilter);
     method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
-    method public final void draw-fjVI2_8(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
+    method public final void draw-Dm4HMko(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.ui.graphics.drawscope.DrawScope);
     property public abstract long intrinsicSize;
@@ -1366,12 +1366,12 @@
 
   public final class Matrix4Kt {
     method public static Float? getAsScale(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
+    method public static androidx.compose.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.compose.ui.geometry.Rect rect);
     method public static boolean isIdentity(androidx.ui.graphics.vectormath.Matrix4);
     method public static boolean matrixEquals(androidx.ui.graphics.vectormath.Matrix4? a, androidx.ui.graphics.vectormath.Matrix4? b);
-    method public static androidx.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Offset point);
-    method public static androidx.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Offset point);
+    method public static androidx.compose.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Rect rect);
   }
 
   public enum MatrixColumn {
diff --git a/ui/ui-graphics/api/current.txt b/ui/ui-graphics/api/current.txt
index 652ec98..1a9e14f 100644
--- a/ui/ui-graphics/api/current.txt
+++ b/ui/ui-graphics/api/current.txt
@@ -2,9 +2,9 @@
 package androidx.ui.core {
 
   public final class RectHelperKt {
-    method public static android.graphics.Rect toAndroidRect(androidx.ui.geometry.Rect);
-    method public static android.graphics.RectF toAndroidRectF(androidx.ui.geometry.Rect);
-    method public static androidx.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+    method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+    method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+    method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
   }
 
 }
@@ -75,16 +75,16 @@
   public final class AndroidPath implements androidx.ui.graphics.Path {
     ctor public AndroidPath(android.graphics.Path internalPath);
     ctor public AndroidPath();
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public android.graphics.Path getInternalPath();
     method public boolean isConvex();
@@ -99,7 +99,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType value);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public androidx.ui.graphics.PathFillType fillType;
     property public boolean isConvex;
     property public boolean isEmpty;
@@ -177,23 +177,23 @@
 
   public interface Canvas {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default void clipRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
+    method public default void clipRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left, float top, float right, float bottom, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
-    method public default void drawArc(androidx.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public default void drawArcRad(androidx.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
-    method public default void drawOval(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
-    method public default void drawRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
     method public void drawVertices(androidx.ui.graphics.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
@@ -202,7 +202,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy = sx);
     method public void skew(float sx, float sy);
     method public default void skewRad(float sxRad, float syRad);
@@ -221,7 +221,7 @@
     method public static void rotateRad(androidx.ui.graphics.Canvas, float radians, float pivotX = 0.0f, float pivotY = 0.0f);
     method public static void scale(androidx.ui.graphics.Canvas, float sx, float sy = sx, float pivotX, float pivotY);
     method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
   public enum ClipOp {
@@ -407,17 +407,17 @@
   }
 
   public static final class Outline.Rectangle extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rectangle(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect component1();
-    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect getRect();
+    ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect component1();
+    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect getRect();
   }
 
   public static final class Outline.Rounded extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rounded(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect component1();
-    method public androidx.ui.graphics.Outline.Rounded copy(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect getRrect();
+    ctor public Outline.Rounded(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect component1();
+    method public androidx.ui.graphics.Outline.Rounded copy(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect getRrect();
   }
 
   public final class OutlineKt {
@@ -482,17 +482,17 @@
   }
 
   public interface Path {
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset = Offset.Zero);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public default void arcToRad(androidx.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset = Offset.Zero);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public boolean isConvex();
     method public boolean isEmpty();
@@ -506,7 +506,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType p);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public abstract androidx.ui.graphics.PathFillType fillType;
     property public abstract boolean isConvex;
     property public abstract boolean isEmpty;
@@ -575,18 +575,18 @@
 
   public final class ShaderKt {
     method public static android.graphics.Shader ImageShader(androidx.ui.graphics.ImageAsset image, androidx.ui.graphics.TileMode tileModeX = androidx.ui.graphics.TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader LinearGradientShader(androidx.ui.geometry.Offset from, androidx.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader RadialGradientShader(androidx.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader LinearGradientShader(androidx.compose.ui.geometry.Offset from, androidx.compose.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
   }
 
   @androidx.compose.Immutable public final class Shadow {
     method public long component1();
-    method public androidx.ui.geometry.Offset component2();
+    method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-hgWLwZA(long color, androidx.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-FCpisBw(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
-    method public androidx.ui.geometry.Offset getOffset();
+    method public androidx.compose.ui.geometry.Offset getOffset();
     field public static final androidx.ui.graphics.Shadow.Companion Companion;
   }
 
@@ -600,7 +600,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.ui.graphics.Brush {
@@ -643,7 +643,7 @@
   }
 
   public final class Vertices {
-    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.ui.geometry.Offset> positions, java.util.List<androidx.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
     method public int[] getColors();
     method public short[] getIndices();
     method public float[] getPositions();
@@ -844,29 +844,29 @@
 
   @androidx.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
     ctor public DrawScope();
-    method protected final void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public final void drawArc-MKXvu20(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawArc-w9iw49s(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle-UNeD5NE(long color, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method protected final void draw-swQIOhk(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+    method public final void drawArc-0Wb1Q30(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawArc-8M-MFw4(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle-tRCJLes(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine-LIcrJ00(long color, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine-8PwHTz4(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath-u5ZPEDk(androidx.ui.graphics.Path path, long color, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints-op7krm4(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-J_jAawI(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-TLscAYA(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final androidx.ui.geometry.Offset getCenter();
+    method public final void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawPoints-op7krm4(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-WpID2II(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-zFLLicA(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final androidx.compose.ui.geometry.Offset getCenter();
     method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     method public final long getSize();
-    property public final androidx.ui.geometry.Offset center;
+    property public final androidx.compose.ui.geometry.Offset center;
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.ui.graphics.drawscope.DrawScope.Companion Companion;
@@ -880,7 +880,7 @@
   public final class DrawScopeKt {
     method public static inline void clipPath(androidx.ui.graphics.drawscope.DrawScope, androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void clipRect(androidx.ui.graphics.drawscope.DrawScope, float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.ui.geometry.Size,kotlin.Unit> block);
+    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.compose.ui.geometry.Size,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float dx = 0.0f, float dy = 0.0f, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void rotate(androidx.ui.graphics.drawscope.DrawScope, float degrees, float pivotX = center.x, float pivotY = center.y, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -899,14 +899,14 @@
   @androidx.ui.graphics.drawscope.DrawScopeMarker public interface DrawTransform {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default androidx.ui.geometry.Offset getCenter();
+    method public default androidx.compose.ui.geometry.Offset getCenter();
     method public long getSize();
     method public void inset(float left, float top, float right, float bottom);
     method public void rotate(float degrees, float pivotX = center.x, float pivotY = center.y);
     method public void scale(float scaleX, float scaleY = scaleX, float pivotX = center.x, float pivotY = center.y);
     method public void transform(androidx.ui.graphics.vectormath.Matrix4 matrix);
     method public void translate(float left = 0.0f, float top = 0.0f);
-    property public default androidx.ui.geometry.Offset center;
+    property public default androidx.compose.ui.geometry.Offset center;
     property public abstract long size;
   }
 
@@ -971,7 +971,7 @@
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.ui.graphics.ColorFilter? colorFilter);
     method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
-    method public final void draw-fjVI2_8(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
+    method public final void draw-Dm4HMko(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.ui.graphics.drawscope.DrawScope);
     property public abstract long intrinsicSize;
@@ -1366,12 +1366,12 @@
 
   public final class Matrix4Kt {
     method public static Float? getAsScale(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
+    method public static androidx.compose.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.compose.ui.geometry.Rect rect);
     method public static boolean isIdentity(androidx.ui.graphics.vectormath.Matrix4);
     method public static boolean matrixEquals(androidx.ui.graphics.vectormath.Matrix4? a, androidx.ui.graphics.vectormath.Matrix4? b);
-    method public static androidx.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Offset point);
-    method public static androidx.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Offset point);
+    method public static androidx.compose.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Rect rect);
   }
 
   public enum MatrixColumn {
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 652ec98..1a9e14f 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
@@ -2,9 +2,9 @@
 package androidx.ui.core {
 
   public final class RectHelperKt {
-    method public static android.graphics.Rect toAndroidRect(androidx.ui.geometry.Rect);
-    method public static android.graphics.RectF toAndroidRectF(androidx.ui.geometry.Rect);
-    method public static androidx.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+    method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+    method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+    method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
   }
 
 }
@@ -75,16 +75,16 @@
   public final class AndroidPath implements androidx.ui.graphics.Path {
     ctor public AndroidPath(android.graphics.Path internalPath);
     ctor public AndroidPath();
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public android.graphics.Path getInternalPath();
     method public boolean isConvex();
@@ -99,7 +99,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType value);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public androidx.ui.graphics.PathFillType fillType;
     property public boolean isConvex;
     property public boolean isEmpty;
@@ -177,23 +177,23 @@
 
   public interface Canvas {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default void clipRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
+    method public default void clipRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left, float top, float right, float bottom, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
-    method public default void drawArc(androidx.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public default void drawArcRad(androidx.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
-    method public default void drawOval(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
-    method public default void drawRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
     method public void drawVertices(androidx.ui.graphics.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
@@ -202,7 +202,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy = sx);
     method public void skew(float sx, float sy);
     method public default void skewRad(float sxRad, float syRad);
@@ -221,7 +221,7 @@
     method public static void rotateRad(androidx.ui.graphics.Canvas, float radians, float pivotX = 0.0f, float pivotY = 0.0f);
     method public static void scale(androidx.ui.graphics.Canvas, float sx, float sy = sx, float pivotX, float pivotY);
     method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
   public enum ClipOp {
@@ -407,17 +407,17 @@
   }
 
   public static final class Outline.Rectangle extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rectangle(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect component1();
-    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect getRect();
+    ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect component1();
+    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect getRect();
   }
 
   public static final class Outline.Rounded extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rounded(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect component1();
-    method public androidx.ui.graphics.Outline.Rounded copy(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect getRrect();
+    ctor public Outline.Rounded(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect component1();
+    method public androidx.ui.graphics.Outline.Rounded copy(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect getRrect();
   }
 
   public final class OutlineKt {
@@ -482,17 +482,17 @@
   }
 
   public interface Path {
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset = Offset.Zero);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public default void arcToRad(androidx.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset = Offset.Zero);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public boolean isConvex();
     method public boolean isEmpty();
@@ -506,7 +506,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType p);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public abstract androidx.ui.graphics.PathFillType fillType;
     property public abstract boolean isConvex;
     property public abstract boolean isEmpty;
@@ -575,18 +575,18 @@
 
   public final class ShaderKt {
     method public static android.graphics.Shader ImageShader(androidx.ui.graphics.ImageAsset image, androidx.ui.graphics.TileMode tileModeX = androidx.ui.graphics.TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader LinearGradientShader(androidx.ui.geometry.Offset from, androidx.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader RadialGradientShader(androidx.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader LinearGradientShader(androidx.compose.ui.geometry.Offset from, androidx.compose.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
   }
 
   @androidx.compose.Immutable public final class Shadow {
     method public long component1();
-    method public androidx.ui.geometry.Offset component2();
+    method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-hgWLwZA(long color, androidx.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-FCpisBw(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
-    method public androidx.ui.geometry.Offset getOffset();
+    method public androidx.compose.ui.geometry.Offset getOffset();
     field public static final androidx.ui.graphics.Shadow.Companion Companion;
   }
 
@@ -600,7 +600,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.ui.graphics.Brush {
@@ -643,7 +643,7 @@
   }
 
   public final class Vertices {
-    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.ui.geometry.Offset> positions, java.util.List<androidx.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
     method public int[] getColors();
     method public short[] getIndices();
     method public float[] getPositions();
@@ -844,29 +844,29 @@
 
   @androidx.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
     ctor public DrawScope();
-    method protected final void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public final void drawArc-MKXvu20(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawArc-w9iw49s(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle-UNeD5NE(long color, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method protected final void draw-swQIOhk(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+    method public final void drawArc-0Wb1Q30(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawArc-8M-MFw4(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle-tRCJLes(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine-LIcrJ00(long color, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine-8PwHTz4(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath-u5ZPEDk(androidx.ui.graphics.Path path, long color, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints-op7krm4(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-J_jAawI(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-TLscAYA(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final androidx.ui.geometry.Offset getCenter();
+    method public final void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawPoints-op7krm4(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-WpID2II(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-zFLLicA(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final androidx.compose.ui.geometry.Offset getCenter();
     method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     method public final long getSize();
-    property public final androidx.ui.geometry.Offset center;
+    property public final androidx.compose.ui.geometry.Offset center;
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.ui.graphics.drawscope.DrawScope.Companion Companion;
@@ -880,7 +880,7 @@
   public final class DrawScopeKt {
     method public static inline void clipPath(androidx.ui.graphics.drawscope.DrawScope, androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void clipRect(androidx.ui.graphics.drawscope.DrawScope, float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.ui.geometry.Size,kotlin.Unit> block);
+    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.compose.ui.geometry.Size,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float dx = 0.0f, float dy = 0.0f, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void rotate(androidx.ui.graphics.drawscope.DrawScope, float degrees, float pivotX = center.x, float pivotY = center.y, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -899,14 +899,14 @@
   @androidx.ui.graphics.drawscope.DrawScopeMarker public interface DrawTransform {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default androidx.ui.geometry.Offset getCenter();
+    method public default androidx.compose.ui.geometry.Offset getCenter();
     method public long getSize();
     method public void inset(float left, float top, float right, float bottom);
     method public void rotate(float degrees, float pivotX = center.x, float pivotY = center.y);
     method public void scale(float scaleX, float scaleY = scaleX, float pivotX = center.x, float pivotY = center.y);
     method public void transform(androidx.ui.graphics.vectormath.Matrix4 matrix);
     method public void translate(float left = 0.0f, float top = 0.0f);
-    property public default androidx.ui.geometry.Offset center;
+    property public default androidx.compose.ui.geometry.Offset center;
     property public abstract long size;
   }
 
@@ -971,7 +971,7 @@
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.ui.graphics.ColorFilter? colorFilter);
     method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
-    method public final void draw-fjVI2_8(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
+    method public final void draw-Dm4HMko(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.ui.graphics.drawscope.DrawScope);
     property public abstract long intrinsicSize;
@@ -1366,12 +1366,12 @@
 
   public final class Matrix4Kt {
     method public static Float? getAsScale(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
+    method public static androidx.compose.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.compose.ui.geometry.Rect rect);
     method public static boolean isIdentity(androidx.ui.graphics.vectormath.Matrix4);
     method public static boolean matrixEquals(androidx.ui.graphics.vectormath.Matrix4? a, androidx.ui.graphics.vectormath.Matrix4? b);
-    method public static androidx.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Offset point);
-    method public static androidx.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Offset point);
+    method public static androidx.compose.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Rect rect);
   }
 
   public enum MatrixColumn {
diff --git a/ui/ui-graphics/api/public_plus_experimental_current.txt b/ui/ui-graphics/api/public_plus_experimental_current.txt
index 652ec98..1a9e14f 100644
--- a/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -2,9 +2,9 @@
 package androidx.ui.core {
 
   public final class RectHelperKt {
-    method public static android.graphics.Rect toAndroidRect(androidx.ui.geometry.Rect);
-    method public static android.graphics.RectF toAndroidRectF(androidx.ui.geometry.Rect);
-    method public static androidx.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+    method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+    method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+    method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
   }
 
 }
@@ -75,16 +75,16 @@
   public final class AndroidPath implements androidx.ui.graphics.Path {
     ctor public AndroidPath(android.graphics.Path internalPath);
     ctor public AndroidPath();
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public android.graphics.Path getInternalPath();
     method public boolean isConvex();
@@ -99,7 +99,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType value);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public androidx.ui.graphics.PathFillType fillType;
     property public boolean isConvex;
     property public boolean isEmpty;
@@ -177,23 +177,23 @@
 
   public interface Canvas {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default void clipRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
+    method public default void clipRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left, float top, float right, float bottom, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
-    method public default void drawArc(androidx.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public default void drawArcRad(androidx.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
-    method public default void drawOval(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
-    method public default void drawRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
     method public void drawVertices(androidx.ui.graphics.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
@@ -202,7 +202,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy = sx);
     method public void skew(float sx, float sy);
     method public default void skewRad(float sxRad, float syRad);
@@ -221,7 +221,7 @@
     method public static void rotateRad(androidx.ui.graphics.Canvas, float radians, float pivotX = 0.0f, float pivotY = 0.0f);
     method public static void scale(androidx.ui.graphics.Canvas, float sx, float sy = sx, float pivotX, float pivotY);
     method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
   public enum ClipOp {
@@ -407,17 +407,17 @@
   }
 
   public static final class Outline.Rectangle extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rectangle(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect component1();
-    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect getRect();
+    ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect component1();
+    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect getRect();
   }
 
   public static final class Outline.Rounded extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rounded(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect component1();
-    method public androidx.ui.graphics.Outline.Rounded copy(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect getRrect();
+    ctor public Outline.Rounded(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect component1();
+    method public androidx.ui.graphics.Outline.Rounded copy(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect getRrect();
   }
 
   public final class OutlineKt {
@@ -482,17 +482,17 @@
   }
 
   public interface Path {
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset = Offset.Zero);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public default void arcToRad(androidx.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset = Offset.Zero);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public boolean isConvex();
     method public boolean isEmpty();
@@ -506,7 +506,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType p);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public abstract androidx.ui.graphics.PathFillType fillType;
     property public abstract boolean isConvex;
     property public abstract boolean isEmpty;
@@ -575,18 +575,18 @@
 
   public final class ShaderKt {
     method public static android.graphics.Shader ImageShader(androidx.ui.graphics.ImageAsset image, androidx.ui.graphics.TileMode tileModeX = androidx.ui.graphics.TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader LinearGradientShader(androidx.ui.geometry.Offset from, androidx.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader RadialGradientShader(androidx.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader LinearGradientShader(androidx.compose.ui.geometry.Offset from, androidx.compose.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
   }
 
   @androidx.compose.Immutable public final class Shadow {
     method public long component1();
-    method public androidx.ui.geometry.Offset component2();
+    method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-hgWLwZA(long color, androidx.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-FCpisBw(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
-    method public androidx.ui.geometry.Offset getOffset();
+    method public androidx.compose.ui.geometry.Offset getOffset();
     field public static final androidx.ui.graphics.Shadow.Companion Companion;
   }
 
@@ -600,7 +600,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.ui.graphics.Brush {
@@ -643,7 +643,7 @@
   }
 
   public final class Vertices {
-    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.ui.geometry.Offset> positions, java.util.List<androidx.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
     method public int[] getColors();
     method public short[] getIndices();
     method public float[] getPositions();
@@ -844,29 +844,29 @@
 
   @androidx.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
     ctor public DrawScope();
-    method protected final void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public final void drawArc-MKXvu20(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawArc-w9iw49s(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle-UNeD5NE(long color, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method protected final void draw-swQIOhk(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+    method public final void drawArc-0Wb1Q30(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawArc-8M-MFw4(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle-tRCJLes(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine-LIcrJ00(long color, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine-8PwHTz4(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath-u5ZPEDk(androidx.ui.graphics.Path path, long color, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints-op7krm4(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-J_jAawI(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-TLscAYA(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final androidx.ui.geometry.Offset getCenter();
+    method public final void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawPoints-op7krm4(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-WpID2II(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-zFLLicA(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final androidx.compose.ui.geometry.Offset getCenter();
     method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     method public final long getSize();
-    property public final androidx.ui.geometry.Offset center;
+    property public final androidx.compose.ui.geometry.Offset center;
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.ui.graphics.drawscope.DrawScope.Companion Companion;
@@ -880,7 +880,7 @@
   public final class DrawScopeKt {
     method public static inline void clipPath(androidx.ui.graphics.drawscope.DrawScope, androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void clipRect(androidx.ui.graphics.drawscope.DrawScope, float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.ui.geometry.Size,kotlin.Unit> block);
+    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.compose.ui.geometry.Size,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float dx = 0.0f, float dy = 0.0f, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void rotate(androidx.ui.graphics.drawscope.DrawScope, float degrees, float pivotX = center.x, float pivotY = center.y, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -899,14 +899,14 @@
   @androidx.ui.graphics.drawscope.DrawScopeMarker public interface DrawTransform {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default androidx.ui.geometry.Offset getCenter();
+    method public default androidx.compose.ui.geometry.Offset getCenter();
     method public long getSize();
     method public void inset(float left, float top, float right, float bottom);
     method public void rotate(float degrees, float pivotX = center.x, float pivotY = center.y);
     method public void scale(float scaleX, float scaleY = scaleX, float pivotX = center.x, float pivotY = center.y);
     method public void transform(androidx.ui.graphics.vectormath.Matrix4 matrix);
     method public void translate(float left = 0.0f, float top = 0.0f);
-    property public default androidx.ui.geometry.Offset center;
+    property public default androidx.compose.ui.geometry.Offset center;
     property public abstract long size;
   }
 
@@ -971,7 +971,7 @@
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.ui.graphics.ColorFilter? colorFilter);
     method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
-    method public final void draw-fjVI2_8(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
+    method public final void draw-Dm4HMko(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.ui.graphics.drawscope.DrawScope);
     property public abstract long intrinsicSize;
@@ -1366,12 +1366,12 @@
 
   public final class Matrix4Kt {
     method public static Float? getAsScale(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
+    method public static androidx.compose.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.compose.ui.geometry.Rect rect);
     method public static boolean isIdentity(androidx.ui.graphics.vectormath.Matrix4);
     method public static boolean matrixEquals(androidx.ui.graphics.vectormath.Matrix4? a, androidx.ui.graphics.vectormath.Matrix4? b);
-    method public static androidx.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Offset point);
-    method public static androidx.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Offset point);
+    method public static androidx.compose.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Rect rect);
   }
 
   public enum MatrixColumn {
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 5b534f2..ad8fabe 100644
--- a/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
@@ -2,9 +2,9 @@
 package androidx.ui.core {
 
   public final class RectHelperKt {
-    method public static android.graphics.Rect toAndroidRect(androidx.ui.geometry.Rect);
-    method public static android.graphics.RectF toAndroidRectF(androidx.ui.geometry.Rect);
-    method public static androidx.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+    method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+    method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+    method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
   }
 
 }
@@ -21,13 +21,13 @@
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize, androidx.ui.unit.IntOffset dstOffset, androidx.ui.unit.IntSize dstSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
@@ -37,7 +37,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy);
     method public void skew(float sx, float sy);
     method public android.graphics.Region.Op toRegionOp(androidx.ui.graphics.ClipOp);
@@ -107,16 +107,16 @@
   public final class AndroidPath implements androidx.ui.graphics.Path {
     ctor public AndroidPath(android.graphics.Path internalPath);
     ctor public AndroidPath();
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public android.graphics.Path getInternalPath();
     method public boolean isConvex();
@@ -131,7 +131,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType value);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public androidx.ui.graphics.PathFillType fillType;
     property public boolean isConvex;
     property public boolean isEmpty;
@@ -209,23 +209,23 @@
 
   public interface Canvas {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default void clipRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
+    method public default void clipRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left, float top, float right, float bottom, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
-    method public default void drawArc(androidx.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public default void drawArcRad(androidx.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
-    method public default void drawOval(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
-    method public default void drawRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
     method public void drawVertices(androidx.ui.graphics.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
@@ -234,7 +234,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy = sx);
     method public void skew(float sx, float sy);
     method public default void skewRad(float sxRad, float syRad);
@@ -254,7 +254,7 @@
     method public static void rotateRad(androidx.ui.graphics.Canvas, float radians, float pivotX = 0.0f, float pivotY = 0.0f);
     method public static void scale(androidx.ui.graphics.Canvas, float sx, float sy = sx, float pivotX, float pivotY);
     method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
   public enum ClipOp {
@@ -440,17 +440,17 @@
   }
 
   public static final class Outline.Rectangle extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rectangle(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect component1();
-    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect getRect();
+    ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect component1();
+    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect getRect();
   }
 
   public static final class Outline.Rounded extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rounded(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect component1();
-    method public androidx.ui.graphics.Outline.Rounded copy(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect getRrect();
+    ctor public Outline.Rounded(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect component1();
+    method public androidx.ui.graphics.Outline.Rounded copy(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect getRrect();
   }
 
   public final class OutlineKt {
@@ -515,17 +515,17 @@
   }
 
   public interface Path {
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset = Offset.Zero);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public default void arcToRad(androidx.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset = Offset.Zero);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public boolean isConvex();
     method public boolean isEmpty();
@@ -539,7 +539,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType p);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public abstract androidx.ui.graphics.PathFillType fillType;
     property public abstract boolean isConvex;
     property public abstract boolean isEmpty;
@@ -608,18 +608,18 @@
 
   public final class ShaderKt {
     method public static android.graphics.Shader ImageShader(androidx.ui.graphics.ImageAsset image, androidx.ui.graphics.TileMode tileModeX = androidx.ui.graphics.TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader LinearGradientShader(androidx.ui.geometry.Offset from, androidx.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader RadialGradientShader(androidx.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader LinearGradientShader(androidx.compose.ui.geometry.Offset from, androidx.compose.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
   }
 
   @androidx.compose.Immutable public final class Shadow {
     method public long component1();
-    method public androidx.ui.geometry.Offset component2();
+    method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-hgWLwZA(long color, androidx.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-FCpisBw(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
-    method public androidx.ui.geometry.Offset getOffset();
+    method public androidx.compose.ui.geometry.Offset getOffset();
     field public static final androidx.ui.graphics.Shadow.Companion Companion;
   }
 
@@ -633,7 +633,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.ui.graphics.Brush {
@@ -676,7 +676,7 @@
   }
 
   public final class Vertices {
-    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.ui.geometry.Offset> positions, java.util.List<androidx.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
     method public int[] getColors();
     method public short[] getIndices();
     method public float[] getPositions();
@@ -877,30 +877,30 @@
 
   @androidx.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
     ctor public DrawScope();
-    method protected final void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public final void drawArc-MKXvu20(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawArc-w9iw49s(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle-UNeD5NE(long color, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method protected final void draw-swQIOhk(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+    method public final void drawArc-0Wb1Q30(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawArc-8M-MFw4(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle-tRCJLes(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine-LIcrJ00(long color, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine-8PwHTz4(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath-u5ZPEDk(androidx.ui.graphics.Path path, long color, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints-op7krm4(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-J_jAawI(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-TLscAYA(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final androidx.ui.geometry.Offset getCenter();
+    method public final void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawPoints-op7krm4(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-WpID2II(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-zFLLicA(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final androidx.compose.ui.geometry.Offset getCenter();
     method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     method public final long getSize();
-    method @kotlin.PublishedApi internal final void setSize-b2zCL34(long size);
-    property public final androidx.ui.geometry.Offset center;
+    method @kotlin.PublishedApi internal final void setSize-uvyYCjk(long size);
+    property public final androidx.compose.ui.geometry.Offset center;
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.ui.graphics.drawscope.DrawScope.Companion Companion;
@@ -916,7 +916,7 @@
   public final class DrawScopeKt {
     method public static inline void clipPath(androidx.ui.graphics.drawscope.DrawScope, androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void clipRect(androidx.ui.graphics.drawscope.DrawScope, float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.ui.geometry.Size,kotlin.Unit> block);
+    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.compose.ui.geometry.Size,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float dx = 0.0f, float dy = 0.0f, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void rotate(androidx.ui.graphics.drawscope.DrawScope, float degrees, float pivotX = center.x, float pivotY = center.y, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -935,14 +935,14 @@
   @androidx.ui.graphics.drawscope.DrawScopeMarker public interface DrawTransform {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default androidx.ui.geometry.Offset getCenter();
+    method public default androidx.compose.ui.geometry.Offset getCenter();
     method public long getSize();
     method public void inset(float left, float top, float right, float bottom);
     method public void rotate(float degrees, float pivotX = center.x, float pivotY = center.y);
     method public void scale(float scaleX, float scaleY = scaleX, float pivotX = center.x, float pivotY = center.y);
     method public void transform(androidx.ui.graphics.vectormath.Matrix4 matrix);
     method public void translate(float left = 0.0f, float top = 0.0f);
-    property public default androidx.ui.geometry.Offset center;
+    property public default androidx.compose.ui.geometry.Offset center;
     property public abstract long size;
   }
 
@@ -1007,7 +1007,7 @@
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.ui.graphics.ColorFilter? colorFilter);
     method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
-    method public final void draw-fjVI2_8(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
+    method public final void draw-Dm4HMko(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.ui.graphics.drawscope.DrawScope);
     property public abstract long intrinsicSize;
@@ -1402,12 +1402,12 @@
 
   public final class Matrix4Kt {
     method public static Float? getAsScale(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
+    method public static androidx.compose.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.compose.ui.geometry.Rect rect);
     method public static boolean isIdentity(androidx.ui.graphics.vectormath.Matrix4);
     method public static boolean matrixEquals(androidx.ui.graphics.vectormath.Matrix4? a, androidx.ui.graphics.vectormath.Matrix4? b);
-    method public static androidx.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Offset point);
-    method public static androidx.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Offset point);
+    method public static androidx.compose.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Rect rect);
   }
 
   public enum MatrixColumn {
diff --git a/ui/ui-graphics/api/restricted_current.txt b/ui/ui-graphics/api/restricted_current.txt
index 5b534f2..ad8fabe 100644
--- a/ui/ui-graphics/api/restricted_current.txt
+++ b/ui/ui-graphics/api/restricted_current.txt
@@ -2,9 +2,9 @@
 package androidx.ui.core {
 
   public final class RectHelperKt {
-    method public static android.graphics.Rect toAndroidRect(androidx.ui.geometry.Rect);
-    method public static android.graphics.RectF toAndroidRectF(androidx.ui.geometry.Rect);
-    method public static androidx.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+    method public static android.graphics.Rect toAndroidRect(androidx.compose.ui.geometry.Rect);
+    method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
+    method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
   }
 
 }
@@ -21,13 +21,13 @@
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize, androidx.ui.unit.IntOffset dstOffset, androidx.ui.unit.IntSize dstSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
@@ -37,7 +37,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy);
     method public void skew(float sx, float sy);
     method public android.graphics.Region.Op toRegionOp(androidx.ui.graphics.ClipOp);
@@ -107,16 +107,16 @@
   public final class AndroidPath implements androidx.ui.graphics.Path {
     ctor public AndroidPath(android.graphics.Path internalPath);
     ctor public AndroidPath();
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public android.graphics.Path getInternalPath();
     method public boolean isConvex();
@@ -131,7 +131,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType value);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public androidx.ui.graphics.PathFillType fillType;
     property public boolean isConvex;
     property public boolean isEmpty;
@@ -209,23 +209,23 @@
 
   public interface Canvas {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default void clipRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
+    method public default void clipRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left, float top, float right, float bottom, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void concat(androidx.ui.graphics.vectormath.Matrix4 matrix4);
     method public void disableZ();
-    method public default void drawArc(androidx.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public default void drawArc(androidx.compose.ui.geometry.Rect rect, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public default void drawArcRad(androidx.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
-    method public void drawCircle(androidx.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
-    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
+    method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.ui.graphics.Paint paint);
+    method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.ui.graphics.Paint paint);
+    method public void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.ui.graphics.Paint paint);
     method public void drawImageRect(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.ui.graphics.Paint paint);
-    method public void drawLine(androidx.ui.geometry.Offset p1, androidx.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
-    method public default void drawOval(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.ui.graphics.Paint paint);
+    method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Paint paint);
-    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
+    method public void drawPoints(androidx.ui.graphics.PointMode pointMode, java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.Paint paint);
     method public void drawRawPoints(androidx.ui.graphics.PointMode pointMode, float[] points, androidx.ui.graphics.Paint paint);
-    method public default void drawRect(androidx.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
+    method public default void drawRect(androidx.compose.ui.geometry.Rect rect, androidx.ui.graphics.Paint paint);
     method public void drawRect(float left, float top, float right, float bottom, androidx.ui.graphics.Paint paint);
     method public void drawRoundRect(float left, float top, float right, float bottom, float radiusX, float radiusY, androidx.ui.graphics.Paint paint);
     method public void drawVertices(androidx.ui.graphics.Vertices vertices, androidx.ui.graphics.BlendMode blendMode, androidx.ui.graphics.Paint paint);
@@ -234,7 +234,7 @@
     method public void restore();
     method public void rotate(float degrees);
     method public void save();
-    method public void saveLayer(androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
+    method public void saveLayer(androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint);
     method public void scale(float sx, float sy = sx);
     method public void skew(float sx, float sy);
     method public default void skewRad(float sxRad, float syRad);
@@ -254,7 +254,7 @@
     method public static void rotateRad(androidx.ui.graphics.Canvas, float radians, float pivotX = 0.0f, float pivotY = 0.0f);
     method public static void scale(androidx.ui.graphics.Canvas, float sx, float sy = sx, float pivotX, float pivotY);
     method public static inline void withSave(androidx.ui.graphics.Canvas, kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static inline void withSaveLayer(androidx.ui.graphics.Canvas, androidx.compose.ui.geometry.Rect bounds, androidx.ui.graphics.Paint paint, kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
   public enum ClipOp {
@@ -440,17 +440,17 @@
   }
 
   public static final class Outline.Rectangle extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rectangle(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect component1();
-    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.ui.geometry.Rect rect);
-    method public androidx.ui.geometry.Rect getRect();
+    ctor public Outline.Rectangle(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect component1();
+    method public androidx.ui.graphics.Outline.Rectangle copy(androidx.compose.ui.geometry.Rect rect);
+    method public androidx.compose.ui.geometry.Rect getRect();
   }
 
   public static final class Outline.Rounded extends androidx.ui.graphics.Outline {
-    ctor public Outline.Rounded(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect component1();
-    method public androidx.ui.graphics.Outline.Rounded copy(androidx.ui.geometry.RRect rrect);
-    method public androidx.ui.geometry.RRect getRrect();
+    ctor public Outline.Rounded(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect component1();
+    method public androidx.ui.graphics.Outline.Rounded copy(androidx.compose.ui.geometry.RRect rrect);
+    method public androidx.compose.ui.geometry.RRect getRrect();
   }
 
   public final class OutlineKt {
@@ -515,17 +515,17 @@
   }
 
   public interface Path {
-    method public void addArc(androidx.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
-    method public void addArcRad(androidx.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
-    method public void addOval(androidx.ui.geometry.Rect oval);
-    method public void addPath(androidx.ui.graphics.Path path, androidx.ui.geometry.Offset offset = Offset.Zero);
-    method public void addRRect(androidx.ui.geometry.RRect rrect);
-    method public void addRect(androidx.ui.geometry.Rect rect);
-    method public void arcTo(androidx.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
-    method public default void arcToRad(androidx.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
+    method public void addArc(androidx.compose.ui.geometry.Rect oval, float startAngleDegrees, float sweepAngleDegrees);
+    method public void addArcRad(androidx.compose.ui.geometry.Rect oval, float startAngleRadians, float sweepAngleRadians);
+    method public void addOval(androidx.compose.ui.geometry.Rect oval);
+    method public void addPath(androidx.ui.graphics.Path path, androidx.compose.ui.geometry.Offset offset = Offset.Zero);
+    method public void addRRect(androidx.compose.ui.geometry.RRect rrect);
+    method public void addRect(androidx.compose.ui.geometry.Rect rect);
+    method public void arcTo(androidx.compose.ui.geometry.Rect rect, float startAngleDegrees, float sweepAngleDegrees, boolean forceMoveTo);
+    method public default void arcToRad(androidx.compose.ui.geometry.Rect rect, float startAngleRadians, float sweepAngleRadians, boolean forceMoveTo);
     method public void close();
     method public void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
-    method public androidx.ui.geometry.Rect getBounds();
+    method public androidx.compose.ui.geometry.Rect getBounds();
     method public androidx.ui.graphics.PathFillType getFillType();
     method public boolean isConvex();
     method public boolean isEmpty();
@@ -539,7 +539,7 @@
     method public void relativeQuadraticBezierTo(float dx1, float dy1, float dx2, float dy2);
     method public void reset();
     method public void setFillType(androidx.ui.graphics.PathFillType p);
-    method public void shift(androidx.ui.geometry.Offset offset);
+    method public void shift(androidx.compose.ui.geometry.Offset offset);
     property public abstract androidx.ui.graphics.PathFillType fillType;
     property public abstract boolean isConvex;
     property public abstract boolean isEmpty;
@@ -608,18 +608,18 @@
 
   public final class ShaderKt {
     method public static android.graphics.Shader ImageShader(androidx.ui.graphics.ImageAsset image, androidx.ui.graphics.TileMode tileModeX = androidx.ui.graphics.TileMode.Clamp, androidx.ui.graphics.TileMode tileModeY = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader LinearGradientShader(androidx.ui.geometry.Offset from, androidx.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
-    method public static android.graphics.Shader RadialGradientShader(androidx.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader LinearGradientShader(androidx.compose.ui.geometry.Offset from, androidx.compose.ui.geometry.Offset to, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
+    method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.ui.graphics.TileMode tileMode = androidx.ui.graphics.TileMode.Clamp);
   }
 
   @androidx.compose.Immutable public final class Shadow {
     method public long component1();
-    method public androidx.ui.geometry.Offset component2();
+    method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-hgWLwZA(long color, androidx.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.Immutable public androidx.ui.graphics.Shadow copy-FCpisBw(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
-    method public androidx.ui.geometry.Offset getOffset();
+    method public androidx.compose.ui.geometry.Offset getOffset();
     field public static final androidx.ui.graphics.Shadow.Companion Companion;
   }
 
@@ -633,7 +633,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.ui.graphics.Outline createOutline-SwJi8iY(long size, androidx.ui.unit.Density density);
+    method public androidx.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.ui.graphics.Brush {
@@ -676,7 +676,7 @@
   }
 
   public final class Vertices {
-    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.ui.geometry.Offset> positions, java.util.List<androidx.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
+    ctor public Vertices(androidx.ui.graphics.VertexMode vertexMode, java.util.List<androidx.compose.ui.geometry.Offset> positions, java.util.List<androidx.compose.ui.geometry.Offset> textureCoordinates, java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Integer> indices);
     method public int[] getColors();
     method public short[] getIndices();
     method public float[] getPositions();
@@ -877,30 +877,30 @@
 
   @androidx.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
     ctor public DrawScope();
-    method protected final void draw-mEaFHtM(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public final void drawArc-MKXvu20(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawArc-w9iw49s(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawCircle-UNeD5NE(long color, float radius = size.minDimension / 2.0, androidx.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method protected final void draw-swQIOhk(androidx.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
+    method public final void drawArc-0Wb1Q30(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawArc-8M-MFw4(androidx.ui.graphics.Brush brush, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle(androidx.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawCircle-tRCJLes(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawLine-LIcrJ00(long color, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawOval-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawLine-8PwHTz4(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawOval-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath(androidx.ui.graphics.Path path, androidx.ui.graphics.Brush brush, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawPath-u5ZPEDk(androidx.ui.graphics.Path path, long color, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawPoints-op7krm4(java.util.List<androidx.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-5gW23P0(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRect-m7aN-JY(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-J_jAawI(long color, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawRoundRect-TLscAYA(androidx.ui.graphics.Brush brush, androidx.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final androidx.ui.geometry.Offset getCenter();
+    method public final void drawPoints(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, androidx.ui.graphics.Brush brush, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawPoints-op7krm4(java.util.List<androidx.compose.ui.geometry.Offset> points, androidx.ui.graphics.PointMode pointMode, long color, float strokeWidth = 0.0f, androidx.ui.graphics.StrokeCap cap = androidx.ui.graphics.StrokeCap.butt, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-OQ-tiHE(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRect-g_R7t9o(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-WpID2II(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawRoundRect-zFLLicA(androidx.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.ui.graphics.drawscope.DrawStyle style = Fill, androidx.ui.graphics.ColorFilter? colorFilter = null, androidx.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final androidx.compose.ui.geometry.Offset getCenter();
     method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
     method public final long getSize();
-    method @kotlin.PublishedApi internal final void setSize-b2zCL34(long size);
-    property public final androidx.ui.geometry.Offset center;
+    method @kotlin.PublishedApi internal final void setSize-uvyYCjk(long size);
+    property public final androidx.compose.ui.geometry.Offset center;
     property public abstract androidx.ui.core.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.ui.graphics.drawscope.DrawScope.Companion Companion;
@@ -916,7 +916,7 @@
   public final class DrawScopeKt {
     method public static inline void clipPath(androidx.ui.graphics.drawscope.DrawScope, androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void clipRect(androidx.ui.graphics.drawscope.DrawScope, float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
-    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.ui.geometry.Size,kotlin.Unit> block);
+    method public static inline void drawCanvas(androidx.ui.graphics.drawscope.DrawScope, kotlin.jvm.functions.Function2<? super androidx.ui.graphics.Canvas,? super androidx.compose.ui.geometry.Size,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float left, float top, float right, float bottom, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void inset(androidx.ui.graphics.drawscope.DrawScope, float dx = 0.0f, float dy = 0.0f, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public static inline void rotate(androidx.ui.graphics.drawscope.DrawScope, float degrees, float pivotX = center.x, float pivotY = center.y, kotlin.jvm.functions.Function1<? super androidx.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
@@ -935,14 +935,14 @@
   @androidx.ui.graphics.drawscope.DrawScopeMarker public interface DrawTransform {
     method public void clipPath(androidx.ui.graphics.Path path, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
     method public void clipRect(float left = 0.0f, float top = 0.0f, float right = size.width, float bottom = size.height, androidx.ui.graphics.ClipOp clipOp = androidx.ui.graphics.ClipOp.intersect);
-    method public default androidx.ui.geometry.Offset getCenter();
+    method public default androidx.compose.ui.geometry.Offset getCenter();
     method public long getSize();
     method public void inset(float left, float top, float right, float bottom);
     method public void rotate(float degrees, float pivotX = center.x, float pivotY = center.y);
     method public void scale(float scaleX, float scaleY = scaleX, float pivotX = center.x, float pivotY = center.y);
     method public void transform(androidx.ui.graphics.vectormath.Matrix4 matrix);
     method public void translate(float left = 0.0f, float top = 0.0f);
-    property public default androidx.ui.geometry.Offset center;
+    property public default androidx.compose.ui.geometry.Offset center;
     property public abstract long size;
   }
 
@@ -1007,7 +1007,7 @@
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.ui.graphics.ColorFilter? colorFilter);
     method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
-    method public final void draw-fjVI2_8(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
+    method public final void draw-Dm4HMko(androidx.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.ui.graphics.drawscope.DrawScope);
     property public abstract long intrinsicSize;
@@ -1402,12 +1402,12 @@
 
   public final class Matrix4Kt {
     method public static Float? getAsScale(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
-    method public static androidx.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset? getAsTranslation(androidx.ui.graphics.vectormath.Matrix4);
+    method public static androidx.compose.ui.geometry.Rect inverseTransformRect(androidx.ui.graphics.vectormath.Matrix4 transform, androidx.compose.ui.geometry.Rect rect);
     method public static boolean isIdentity(androidx.ui.graphics.vectormath.Matrix4);
     method public static boolean matrixEquals(androidx.ui.graphics.vectormath.Matrix4? a, androidx.ui.graphics.vectormath.Matrix4? b);
-    method public static androidx.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Offset point);
-    method public static androidx.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.ui.geometry.Rect rect);
+    method public static androidx.compose.ui.geometry.Offset transformPoint(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Offset point);
+    method public static androidx.compose.ui.geometry.Rect transformRect(androidx.ui.graphics.vectormath.Matrix4, androidx.compose.ui.geometry.Rect rect);
   }
 
   public enum MatrixColumn {
diff --git a/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/ImageAssetSample.kt b/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/ImageAssetSample.kt
index f5cfefd..7bea2ea 100644
--- a/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/ImageAssetSample.kt
+++ b/ui/ui-graphics/samples/src/main/java/androidx/ui/graphics/samples/ImageAssetSample.kt
@@ -17,7 +17,7 @@
 package androidx.ui.graphics.samples
 
 import androidx.annotation.Sampled
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/AndroidCanvasTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/AndroidCanvasTest.kt
index bfcd3af..b7057fd 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/AndroidCanvasTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/AndroidCanvasTest.kt
@@ -27,7 +27,7 @@
 import android.widget.FrameLayout
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.test.captureToBitmap
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotEquals
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PathTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PathTest.kt
index eb82f67..7921afd 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PathTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PathTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.painting
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PixelMapTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PixelMapTest.kt
index 5f811b0..ee208b8 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PixelMapTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/PixelMapTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.graphics
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/RectangleShapeTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/RectangleShapeTest.kt
index 204408c..867bd66 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/RectangleShapeTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/RectangleShapeTest.kt
@@ -17,8 +17,8 @@
 package androidx.ui.graphics
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.ui.unit.Density
 import org.junit.Assert.assertEquals
 import org.junit.Test
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/DrawScopeTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/DrawScopeTest.kt
index 242d345..77454ac 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/DrawScopeTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/DrawScopeTest.kt
@@ -17,9 +17,9 @@
 package androidx.ui.graphics.drawscope
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/TestDrawScope.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/TestDrawScope.kt
index 7fa3cb0..621d19f 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/TestDrawScope.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/drawscope/TestDrawScope.kt
@@ -17,7 +17,7 @@
 package androidx.ui.graphics.drawscope
 
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.painter.Painter
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/ImagePainterTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/ImagePainterTest.kt
index 7706b6d..6459cbc 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/ImagePainterTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/ImagePainterTest.kt
@@ -17,8 +17,8 @@
 package androidx.ui.graphics.painter
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/PainterTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/PainterTest.kt
index 2994e08..7e96073 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/PainterTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/ui/graphics/painter/PainterTest.kt
@@ -18,8 +18,8 @@
 
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidCanvas.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidCanvas.kt
index e0c1c67..4b36fbc 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidCanvas.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidCanvas.kt
@@ -18,8 +18,8 @@
 
 import android.graphics.Matrix
 import androidx.compose.InternalComposeApi
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.vectormath.Matrix4
 import androidx.ui.graphics.vectormath.isIdentity
 import androidx.ui.unit.IntOffset
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidPath.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidPath.kt
index 7fc3f27..0b9cbd82 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidPath.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidPath.kt
@@ -18,9 +18,9 @@
 
 import androidx.compose.InternalComposeApi
 import androidx.ui.core.toAndroidRect
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.vectormath.degrees
 
 @Suppress("DEPRECATION_ERROR")
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidShader.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidShader.kt
index a77f4cd..2d08389 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidShader.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/AndroidShader.kt
@@ -20,7 +20,7 @@
 import android.graphics.LinearGradient
 import android.graphics.RadialGradient
 import androidx.compose.InternalComposeApi
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 actual typealias Shader = android.graphics.Shader
 
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/RectHelper.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/RectHelper.kt
index 7517871..3d4c008 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/RectHelper.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/ui/graphics/RectHelper.kt
@@ -15,7 +15,7 @@
  */
 package androidx.ui.core
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 
 /**
  * Creates a new instance of [android.graphics.Rect] with the same bounds
@@ -44,11 +44,11 @@
 }
 
 /**
- * Creates a new instance of [androidx.ui.geometry.Rect] with the same bounds
+ * Creates a new instance of [androidx.compose.ui.geometry.Rect] with the same bounds
  * specified in the given [android.graphics.Rect]
  */
-fun android.graphics.Rect.toComposeRect(): androidx.ui.geometry.Rect =
-    androidx.ui.geometry.Rect(
+fun android.graphics.Rect.toComposeRect(): androidx.compose.ui.geometry.Rect =
+    androidx.compose.ui.geometry.Rect(
         this.left.toFloat(),
         this.top.toFloat(),
         this.right.toFloat(),
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Brush.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Brush.kt
index c4c5b2b..959d4d0 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Brush.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Brush.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 sealed class Brush {
     abstract fun applyTo(p: Paint, alpha: Float)
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Canvas.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Canvas.kt
index 9ba30f9..b017cc2 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Canvas.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Canvas.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.vectormath.Matrix4
 import androidx.ui.graphics.vectormath.degrees
 import androidx.ui.unit.IntOffset
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Outline.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Outline.kt
index 17090de..991514b 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Outline.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Outline.kt
@@ -17,11 +17,11 @@
 package androidx.ui.graphics
 
 import androidx.ui.util.annotation.FloatRange
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Radius
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.ui.graphics.drawscope.DrawStyle
 import androidx.ui.graphics.drawscope.Fill
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Path.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Path.kt
index 03a6827..6504808 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Path.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Path.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.vectormath.degrees
 
 expect fun Path(): Path
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/RectangleShape.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/RectangleShape.kt
index 2a51609..c4a747c 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/RectangleShape.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/RectangleShape.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.toRect
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.toRect
 import androidx.compose.Stable
 import androidx.ui.unit.Density
 
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shader.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shader.kt
index 8637c03..b2baf7d 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shader.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shader.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 /**
  * Class that represents the corresponding Shader implementation on a platform. This maps
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shadow.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shadow.kt
index 29d8aaa..9936fc0 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shadow.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shadow.kt
@@ -18,8 +18,8 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.lerp
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.lerp
 import androidx.ui.util.lerp
 
 /**
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shape.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shape.kt
index 5394551..a64b414 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shape.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Shape.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.compose.Immutable
 import androidx.ui.unit.Density
 
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Vertices.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Vertices.kt
index 68cf6f8a..33695e3 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Vertices.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/Vertices.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 /**  A set of vertex data used by [Canvas.drawVertices]. */
 class Vertices(
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawScope.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawScope.kt
index 421ed7d..327f17a 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawScope.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawScope.kt
@@ -17,9 +17,9 @@
 package androidx.ui.graphics.drawscope
 
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Radius
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.BlendMode
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.Canvas
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawTransform.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawTransform.kt
index 0524661..80ab747f 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawTransform.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/drawscope/DrawTransform.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.graphics.drawscope
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.ClipOp
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.vectormath.Matrix4
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ColorPainter.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ColorPainter.kt
index d3d51a1..e7b5c76 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ColorPainter.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ColorPainter.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics.painter
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.drawscope.DrawScope
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ImagePainter.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ImagePainter.kt
index 6064834..9d0a3ec 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ImagePainter.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/ImagePainter.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.graphics.painter
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.ImageAsset
 import androidx.ui.graphics.drawscope.DrawScope
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/Painter.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/Painter.kt
index 177e964..30791a2 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/Painter.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/painter/Painter.kt
@@ -16,8 +16,8 @@
 package androidx.ui.graphics.painter
 
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.ColorFilter
 import androidx.ui.graphics.DefaultAlpha
 import androidx.ui.graphics.Paint
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/vectormath/Matrix4.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/vectormath/Matrix4.kt
index c0fc9b9e..33b336c 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/vectormath/Matrix4.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/ui/graphics/vectormath/Matrix4.kt
@@ -17,8 +17,8 @@
 
 package androidx.ui.graphics.vectormath
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import kotlin.math.asin
 import kotlin.math.atan2
 import kotlin.math.cos
diff --git a/ui/ui-graphics/src/test/java/androidx/ui/graphics/ShadowTest.kt b/ui/ui-graphics/src/test/java/androidx/ui/graphics/ShadowTest.kt
index da7b419..79bde6f 100644
--- a/ui/ui-graphics/src/test/java/androidx/ui/graphics/ShadowTest.kt
+++ b/ui/ui-graphics/src/test/java/androidx/ui/graphics/ShadowTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.painting
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.lerp
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.lerp
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.lerp
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 cc931db..fe0d6c0 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
@@ -70,7 +70,8 @@
             "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"
+            "androidx.ui.intl" to "androidx.compose.ui.text.intl",
+            "androidx.ui.geometry" to "androidx.compose.ui.geometry"
         )
 
         val ISSUE = Issue.create(
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
index 581f9a8..c914b27 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.onPositioned
 import androidx.ui.core.positionInRoot
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
 import org.junit.Assert
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt
index 8f39c7e..12cfddd 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.onPositioned
 import androidx.ui.core.positionInParent
 import androidx.compose.foundation.Box
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
 import androidx.ui.unit.IntSize
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt
index cc05f03..11d171f 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.constrainWidth
 import androidx.ui.core.onPositioned
 import androidx.ui.core.positionInRoot
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt
index 84bf8e9..a98e394 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
 import androidx.ui.core.onPositioned
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
index f856cf9..c13c2fc 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.constrainHeight
 import androidx.ui.core.constrainWidth
 import androidx.ui.core.onChildPositioned
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt
index 898450a..1365639 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.Ref
 import androidx.ui.core.enforce
 import androidx.ui.core.onPositioned
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntOffset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt
index 49bc5fb..5b88089 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt
@@ -22,7 +22,7 @@
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
 import org.junit.Assert.assertEquals
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt
index f4822b3..481bb20 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.onChildPositioned
 import androidx.ui.core.onPositioned
 import androidx.ui.core.positionInRoot
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt
index d3483d8..2b66bf7 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.onPositioned
 import androidx.compose.foundation.Box
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
 import org.junit.Assert.assertEquals
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
index 1b5f5cf..e79d5c3 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
@@ -42,8 +42,8 @@
 import androidx.ui.core.offset
 import androidx.ui.core.onPositioned
 import androidx.ui.core.setContent
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.unit.Density
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt
index bb0a8a7..9c4f5cf 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt
@@ -33,7 +33,7 @@
 import androidx.ui.core.positionInRoot
 import androidx.ui.core.setContent
 import androidx.ui.unit.Dp
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
index 684d7ac..b40636a 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
@@ -31,7 +31,7 @@
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.positionInRoot
 import androidx.ui.core.onPositioned
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Dp
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt
index 53e924b..9d0e3ea 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt
@@ -24,7 +24,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
 import androidx.ui.core.onPositioned
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.dp
 import org.junit.Assert.assertEquals
diff --git a/ui/ui-material/api/0.1.0-dev16.txt b/ui/ui-material/api/0.1.0-dev16.txt
index 721b127..30ce783 100644
--- a/ui/ui-material/api/0.1.0-dev16.txt
+++ b/ui/ui-material/api/0.1.0-dev16.txt
@@ -235,18 +235,18 @@
   @androidx.compose.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
-    method public androidx.ui.geometry.Size? getBottomBarSize();
+    method public androidx.compose.ui.geometry.Size? getBottomBarSize();
     method public androidx.ui.material.DrawerState getDrawerState();
-    method public androidx.ui.geometry.Size? getFloatingActionButtonSize();
-    method public androidx.ui.geometry.Size? getTopBarSize();
+    method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
+    method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
     method public void setDrawerState(androidx.ui.material.DrawerState p);
-    property public final androidx.ui.geometry.Size? bottomBarSize;
+    property public final androidx.compose.ui.geometry.Size? bottomBarSize;
     property public final androidx.ui.material.DrawerState drawerState;
-    property public final androidx.ui.geometry.Size? floatingActionButtonSize;
+    property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
-    property public final androidx.ui.geometry.Size? topBarSize;
+    property public final androidx.compose.ui.geometry.Size? topBarSize;
   }
 
   public final class Shapes {
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index 721b127..30ce783 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -235,18 +235,18 @@
   @androidx.compose.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
-    method public androidx.ui.geometry.Size? getBottomBarSize();
+    method public androidx.compose.ui.geometry.Size? getBottomBarSize();
     method public androidx.ui.material.DrawerState getDrawerState();
-    method public androidx.ui.geometry.Size? getFloatingActionButtonSize();
-    method public androidx.ui.geometry.Size? getTopBarSize();
+    method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
+    method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
     method public void setDrawerState(androidx.ui.material.DrawerState p);
-    property public final androidx.ui.geometry.Size? bottomBarSize;
+    property public final androidx.compose.ui.geometry.Size? bottomBarSize;
     property public final androidx.ui.material.DrawerState drawerState;
-    property public final androidx.ui.geometry.Size? floatingActionButtonSize;
+    property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
-    property public final androidx.ui.geometry.Size? topBarSize;
+    property public final androidx.compose.ui.geometry.Size? topBarSize;
   }
 
   public final class Shapes {
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 721b127..30ce783 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
@@ -235,18 +235,18 @@
   @androidx.compose.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
-    method public androidx.ui.geometry.Size? getBottomBarSize();
+    method public androidx.compose.ui.geometry.Size? getBottomBarSize();
     method public androidx.ui.material.DrawerState getDrawerState();
-    method public androidx.ui.geometry.Size? getFloatingActionButtonSize();
-    method public androidx.ui.geometry.Size? getTopBarSize();
+    method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
+    method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
     method public void setDrawerState(androidx.ui.material.DrawerState p);
-    property public final androidx.ui.geometry.Size? bottomBarSize;
+    property public final androidx.compose.ui.geometry.Size? bottomBarSize;
     property public final androidx.ui.material.DrawerState drawerState;
-    property public final androidx.ui.geometry.Size? floatingActionButtonSize;
+    property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
-    property public final androidx.ui.geometry.Size? topBarSize;
+    property public final androidx.compose.ui.geometry.Size? topBarSize;
   }
 
   public final class Shapes {
diff --git a/ui/ui-material/api/public_plus_experimental_current.txt b/ui/ui-material/api/public_plus_experimental_current.txt
index 721b127..30ce783 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -235,18 +235,18 @@
   @androidx.compose.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
-    method public androidx.ui.geometry.Size? getBottomBarSize();
+    method public androidx.compose.ui.geometry.Size? getBottomBarSize();
     method public androidx.ui.material.DrawerState getDrawerState();
-    method public androidx.ui.geometry.Size? getFloatingActionButtonSize();
-    method public androidx.ui.geometry.Size? getTopBarSize();
+    method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
+    method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
     method public void setDrawerState(androidx.ui.material.DrawerState p);
-    property public final androidx.ui.geometry.Size? bottomBarSize;
+    property public final androidx.compose.ui.geometry.Size? bottomBarSize;
     property public final androidx.ui.material.DrawerState drawerState;
-    property public final androidx.ui.geometry.Size? floatingActionButtonSize;
+    property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
-    property public final androidx.ui.geometry.Size? topBarSize;
+    property public final androidx.compose.ui.geometry.Size? topBarSize;
   }
 
   public final class Shapes {
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 0bd6bc5..d90ebbc 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev16.txt
@@ -236,18 +236,18 @@
   @androidx.compose.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
-    method public androidx.ui.geometry.Size? getBottomBarSize();
+    method public androidx.compose.ui.geometry.Size? getBottomBarSize();
     method public androidx.ui.material.DrawerState getDrawerState();
-    method public androidx.ui.geometry.Size? getFloatingActionButtonSize();
-    method public androidx.ui.geometry.Size? getTopBarSize();
+    method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
+    method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
     method public void setDrawerState(androidx.ui.material.DrawerState p);
-    property public final androidx.ui.geometry.Size? bottomBarSize;
+    property public final androidx.compose.ui.geometry.Size? bottomBarSize;
     property public final androidx.ui.material.DrawerState drawerState;
-    property public final androidx.ui.geometry.Size? floatingActionButtonSize;
+    property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
-    property public final androidx.ui.geometry.Size? topBarSize;
+    property public final androidx.compose.ui.geometry.Size? topBarSize;
   }
 
   public final class Shapes {
diff --git a/ui/ui-material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
index 0bd6bc5..d90ebbc 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -236,18 +236,18 @@
   @androidx.compose.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
-    method public androidx.ui.geometry.Size? getBottomBarSize();
+    method public androidx.compose.ui.geometry.Size? getBottomBarSize();
     method public androidx.ui.material.DrawerState getDrawerState();
-    method public androidx.ui.geometry.Size? getFloatingActionButtonSize();
-    method public androidx.ui.geometry.Size? getTopBarSize();
+    method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
+    method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
     method public void setDrawerState(androidx.ui.material.DrawerState p);
-    property public final androidx.ui.geometry.Size? bottomBarSize;
+    property public final androidx.compose.ui.geometry.Size? bottomBarSize;
     property public final androidx.ui.material.DrawerState drawerState;
-    property public final androidx.ui.geometry.Size? floatingActionButtonSize;
+    property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
-    property public final androidx.ui.geometry.Size? topBarSize;
+    property public final androidx.compose.ui.geometry.Size? topBarSize;
   }
 
   public final class Shapes {
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 14a55c26..570710f 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
@@ -42,9 +42,9 @@
 import androidx.compose.foundation.currentTextStyle
 import androidx.compose.foundation.shape.GenericShape
 import androidx.compose.foundation.shape.corner.CircleShape
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.RRect
-import androidx.ui.geometry.Radius
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.RRect
+import androidx.compose.ui.geometry.Radius
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
index 42dfc87..07815c5 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
@@ -26,8 +26,8 @@
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.Stroke
 import androidx.ui.unit.dp
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
index b452f96..cc12317 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
@@ -37,7 +37,7 @@
 import androidx.compose.foundation.contentColor
 import androidx.compose.foundation.currentTextStyle
 import androidx.compose.foundation.shape.corner.CutCornerShape
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
 import androidx.ui.graphics.compositeOver
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
index bf214ad..5fb1007 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.rtl
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
index c941bb3..d2eb060 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
@@ -25,7 +25,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.ImageAsset
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
index 5df5db3..6e0734e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.DpConstraints
 import androidx.compose.foundation.layout.InnerPadding
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
index 51255c7..d15d988 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
@@ -24,7 +24,7 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
 import androidx.compose.foundation.background
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.compositeOver
 import androidx.ui.graphics.toArgb
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
index 90b4b94..637090f 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
@@ -36,7 +36,7 @@
 import androidx.compose.foundation.InteractionState
 import androidx.compose.foundation.indication
 import androidx.compose.foundation.shape.corner.RoundedCornerShape
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.compositeOver
 import androidx.compose.foundation.layout.fillMaxSize
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
index 2d4f047..2af57c7 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.contentColor
 import androidx.compose.foundation.currentTextStyle
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
 import androidx.ui.graphics.compositeOver
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
index 4c79754..80acd71 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.contentColor
 import androidx.compose.foundation.currentTextStyle
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.RectangleShape
 import androidx.compose.ui.text.input.ImeAction
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
index 58b5a07..012f37a 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
@@ -20,9 +20,9 @@
 import androidx.compose.foundation.ContentGravity
 import androidx.compose.foundation.ProvideTextStyle
 import androidx.compose.foundation.shape.corner.CircleShape
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Outline
 import androidx.ui.graphics.Path
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
index e60365185..49d24d8 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
@@ -32,9 +32,9 @@
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.selection.ToggleableState
 import androidx.compose.foundation.selection.triStateToggleable
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Radius
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Radius
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.PathMeasure
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
index 34ce6c4..26020e9 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
@@ -34,8 +34,8 @@
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.Strings
 import androidx.compose.foundation.determinateProgressIndicator
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.StrokeCap
 import androidx.ui.graphics.drawscope.DrawScope
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
index e1a5976..7863722 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
@@ -44,7 +44,7 @@
 import androidx.ui.material.Scaffold.FabPosition
 import androidx.ui.unit.Dp
 import androidx.ui.unit.PxBounds
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.unit.dp
 import androidx.ui.unit.height
 import androidx.ui.unit.toSize
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
index 6d9b74d..cea376c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
@@ -44,8 +44,8 @@
 import androidx.compose.foundation.gestures.draggable
 import androidx.compose.foundation.indication
 import androidx.compose.foundation.shape.corner.CircleShape
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.lerp
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.lerp
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.PointMode
 import androidx.ui.graphics.StrokeCap
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
index acec4f7..19e2274 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
@@ -33,7 +33,7 @@
 import androidx.compose.foundation.indication
 import androidx.compose.foundation.selection.toggleable
 import androidx.compose.foundation.shape.corner.CircleShape
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.StrokeCap
 import androidx.ui.graphics.compositeOver
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
index 35fecec..7357b50 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
@@ -34,7 +34,7 @@
 import androidx.compose.foundation.background
 import androidx.compose.foundation.currentTextStyle
 import androidx.compose.foundation.shape.corner.ZeroCornerSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shape
 import androidx.compose.ui.text.input.ImeAction
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
index 39c7803..8cbb58d 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
@@ -29,8 +29,8 @@
 import androidx.compose.mutableStateOf
 import androidx.compose.setValue
 import androidx.compose.animation.OffsetPropKey
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.ui.graphics.drawscope.clipRect
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
index 4dfcd78..2a16cef 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
@@ -35,8 +35,8 @@
 import androidx.compose.foundation.IndicationInstance
 import androidx.compose.foundation.Interaction
 import androidx.compose.foundation.InteractionState
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.DrawScope
 import androidx.ui.graphics.drawscope.clipRect
diff --git a/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt b/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
index 9069427..e548f06 100644
--- a/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
+++ b/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
@@ -15,7 +15,7 @@
  */
 package androidx.ui.material.ripple
 
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.unit.Density
 import androidx.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-test/api/0.1.0-dev16.txt b/ui/ui-test/api/0.1.0-dev16.txt
index 9dd52b4..211c4cf 100644
--- a/ui/ui-test/api/0.1.0-dev16.txt
+++ b/ui/ui-test/api/0.1.0-dev16.txt
@@ -64,7 +64,7 @@
     method public static void assertShape-t2RoSCg(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.ui.graphics.Shape backgroundShape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
-    method public static boolean contains(androidx.ui.graphics.Path, androidx.ui.geometry.Offset offset);
+    method public static boolean contains(androidx.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
@@ -229,17 +229,17 @@
 
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
-    method public static void click(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void down(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
+    method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterX(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterY(androidx.ui.test.BaseGestureScope);
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
@@ -247,46 +247,46 @@
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
     method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method public static androidx.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
diff --git a/ui/ui-test/api/current.txt b/ui/ui-test/api/current.txt
index 9dd52b4..211c4cf 100644
--- a/ui/ui-test/api/current.txt
+++ b/ui/ui-test/api/current.txt
@@ -64,7 +64,7 @@
     method public static void assertShape-t2RoSCg(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.ui.graphics.Shape backgroundShape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
-    method public static boolean contains(androidx.ui.graphics.Path, androidx.ui.geometry.Offset offset);
+    method public static boolean contains(androidx.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
@@ -229,17 +229,17 @@
 
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
-    method public static void click(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void down(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
+    method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterX(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterY(androidx.ui.test.BaseGestureScope);
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
@@ -247,46 +247,46 @@
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
     method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method public static androidx.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
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 9dd52b4..211c4cf 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
@@ -64,7 +64,7 @@
     method public static void assertShape-t2RoSCg(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.ui.graphics.Shape backgroundShape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
-    method public static boolean contains(androidx.ui.graphics.Path, androidx.ui.geometry.Offset offset);
+    method public static boolean contains(androidx.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
@@ -229,17 +229,17 @@
 
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
-    method public static void click(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void down(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
+    method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterX(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterY(androidx.ui.test.BaseGestureScope);
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
@@ -247,46 +247,46 @@
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
     method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method public static androidx.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
diff --git a/ui/ui-test/api/public_plus_experimental_current.txt b/ui/ui-test/api/public_plus_experimental_current.txt
index 9dd52b4..211c4cf 100644
--- a/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/ui/ui-test/api/public_plus_experimental_current.txt
@@ -64,7 +64,7 @@
     method public static void assertShape-t2RoSCg(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.ui.graphics.Shape backgroundShape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
-    method public static boolean contains(androidx.ui.graphics.Path, androidx.ui.geometry.Offset offset);
+    method public static boolean contains(androidx.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
@@ -229,17 +229,17 @@
 
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
-    method public static void click(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void down(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
+    method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterX(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterY(androidx.ui.test.BaseGestureScope);
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
@@ -247,46 +247,46 @@
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
     method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method public static androidx.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
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 9dd52b4..211c4cf 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev16.txt
@@ -64,7 +64,7 @@
     method public static void assertShape-t2RoSCg(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.ui.graphics.Shape backgroundShape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
-    method public static boolean contains(androidx.ui.graphics.Path, androidx.ui.geometry.Offset offset);
+    method public static boolean contains(androidx.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
@@ -229,17 +229,17 @@
 
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
-    method public static void click(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void down(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
+    method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterX(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterY(androidx.ui.test.BaseGestureScope);
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
@@ -247,46 +247,46 @@
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
     method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method public static androidx.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
diff --git a/ui/ui-test/api/restricted_current.txt b/ui/ui-test/api/restricted_current.txt
index 9dd52b4..211c4cf 100644
--- a/ui/ui-test/api/restricted_current.txt
+++ b/ui/ui-test/api/restricted_current.txt
@@ -64,7 +64,7 @@
     method public static void assertShape-t2RoSCg(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.ui.graphics.Shape backgroundShape = androidx.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
-    method public static boolean contains(androidx.ui.graphics.Path, androidx.ui.geometry.Offset offset);
+    method public static boolean contains(androidx.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
@@ -229,17 +229,17 @@
 
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
-    method public static void click(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void down(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
+    method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getBottomRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getCenterRight(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterX(androidx.ui.test.BaseGestureScope);
     method public static inline float getCenterY(androidx.ui.test.BaseGestureScope);
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
@@ -247,46 +247,46 @@
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
     method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method public static androidx.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method public static void movePointerTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset delta);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start0, androidx.ui.geometry.Offset end0, androidx.ui.geometry.Offset start1, androidx.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.ui.geometry.Offset start, androidx.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt
index c0ab65f5..4e89a24 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt
@@ -33,8 +33,8 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.background
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.ui.test.android.ComposeIdlingResource
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt
index f49f82b..87b57a8 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt
@@ -24,7 +24,7 @@
 import androidx.ui.core.onPositioned
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.ContentGravity
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
index 4e3c236..6bef0ab 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
@@ -35,8 +35,8 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.background
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.ui.test.android.ComposeIdlingResource
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/PositionsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/PositionsTest.kt
index 9d2b331..59770ed 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/PositionsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/PositionsTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.test.gesturescope
 
 import androidx.test.filters.MediumTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.percentOffset
 import androidx.ui.test.bottom
 import androidx.ui.test.bottomCenter
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt
index b738a85..12c1339 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.changedToUp
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.ui.test.ActivityWithActionBar
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt
index fcd5823..6427813 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt
@@ -19,7 +19,7 @@
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.doubleTapGestureFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt
index a16cfff..6510fec9 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt
@@ -20,7 +20,7 @@
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.longPressGestureFilter
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.wrapContentSize
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt
index ba023d3..a182049 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt
index bd2b599..3911be3 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt
@@ -20,7 +20,7 @@
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.wrapContentSize
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt
index c9063e15..a412965 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt
@@ -19,7 +19,7 @@
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.wrapContentSize
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/Common.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/Common.kt
index 38e8ad6..f91ae0e 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/Common.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/Common.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test.inputdispatcher
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher
 import androidx.ui.test.android.AndroidInputDispatcher
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt
index 6f22944b..3c09151 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt
@@ -19,7 +19,7 @@
 import android.view.MotionEvent.ACTION_DOWN
 import android.view.MotionEvent.ACTION_UP
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/IsGestureInProgressTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/IsGestureInProgressTest.kt
index 3197ace..03f677e 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/IsGestureInProgressTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/IsGestureInProgressTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test.inputdispatcher
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendCancelTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendCancelTest.kt
index 7fd7f34..9928b41 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendCancelTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendCancelTest.kt
@@ -20,7 +20,7 @@
 import android.view.MotionEvent.ACTION_DOWN
 import android.view.MotionEvent.ACTION_POINTER_DOWN
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendClickTest.kt
index acb3ec0..54c426f 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendClickTest.kt
@@ -18,7 +18,7 @@
 
 import android.view.MotionEvent
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendDownTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendDownTest.kt
index edd89c4..b0e777a 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendDownTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendDownTest.kt
@@ -21,7 +21,7 @@
 import android.view.MotionEvent.ACTION_POINTER_DOWN
 import android.view.MotionEvent.ACTION_POINTER_UP
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendMoveTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendMoveTest.kt
index fd31d50..2dbb6f3 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendMoveTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendMoveTest.kt
@@ -22,7 +22,7 @@
 import android.view.MotionEvent.ACTION_POINTER_DOWN
 import android.view.MotionEvent.ACTION_POINTER_UP
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt
index 44bda8b..f84e706 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt
@@ -18,7 +18,7 @@
 
 import android.view.MotionEvent
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
 import androidx.ui.test.util.MotionEventRecorder
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt
index 9ea938f..99b7a09 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt
@@ -20,7 +20,7 @@
 import android.view.MotionEvent.ACTION_MOVE
 import android.view.MotionEvent.ACTION_UP
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
 import androidx.ui.test.util.MotionEventRecorder
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt
index 02b3298..99c97b2 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt
@@ -19,7 +19,7 @@
 import android.view.MotionEvent.ACTION_DOWN
 import android.view.MotionEvent.ACTION_UP
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
 import androidx.ui.test.util.MotionEventRecorder
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt
index 13db791..ecabcac 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt
@@ -55,7 +55,7 @@
 
     companion object {
         private val curve = { t: Long ->
-            androidx.ui.geometry.Offset(t.toFloat(), (-t).toFloat())
+            androidx.compose.ui.geometry.Offset(t.toFloat(), (-t).toFloat())
         }
 
         @JvmStatic
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendUpTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendUpTest.kt
index 67ebc5b..b358114 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendUpTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendUpTest.kt
@@ -21,7 +21,7 @@
 import android.view.MotionEvent.ACTION_POINTER_UP
 import android.view.MotionEvent.ACTION_UP
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendCancelTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendCancelTest.kt
index a9bf93b..1ea8e53 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendCancelTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendCancelTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.test.partialgesturescope
 
 import androidx.test.filters.MediumTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.inputdispatcher.verifyNoGestureInProgress
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendDownTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendDownTest.kt
index de55f57..0dcb2fb 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendDownTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendDownTest.kt
@@ -18,7 +18,7 @@
 
 import android.os.SystemClock.sleep
 import androidx.test.filters.MediumTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.partialgesturescope.Common.partialGesture
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt
index ceabd73..4636ca7 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt
@@ -18,7 +18,7 @@
 
 import android.os.SystemClock.sleep
 import androidx.test.filters.MediumTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.movePointerBy
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveTest.kt
index f73435e..097caa6 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.test.partialgesturescope
 
 import androidx.test.filters.MediumTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.partialgesturescope.Common.partialGesture
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt
index ee6543f..b1a73c3 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt
@@ -18,7 +18,7 @@
 
 import android.os.SystemClock.sleep
 import androidx.test.filters.MediumTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.movePointerTo
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendUpTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendUpTest.kt
index ac6b983..df8c629 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendUpTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendUpTest.kt
@@ -18,7 +18,7 @@
 
 import android.os.SystemClock.sleep
 import androidx.test.filters.MediumTest
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.inputdispatcher.verifyNoGestureInProgress
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/MotionEvents.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/MotionEvents.kt
index 8a47c046..aa20ab8 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/MotionEvents.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/MotionEvents.kt
@@ -17,7 +17,7 @@
 package androidx.ui.test.util
 
 import android.view.MotionEvent
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import kotlin.math.abs
 
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt
index afc4f25..ac30f9d 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.gesture.util.VelocityTracker
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.unit.Duration
 import androidx.ui.unit.IntSize
 import androidx.ui.unit.Uptime
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/Truth.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/Truth.kt
index 88cbdb2..3c1c053 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/Truth.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/Truth.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test.util
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import com.google.common.collect.Ordering
 import com.google.common.truth.FloatSubject
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Actions.kt b/ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
index a3f01d1..66f7b3f 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.semantics.findClosestParentNode
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.semantics.AccessibilityAction
 import androidx.ui.semantics.SemanticsActions
 import androidx.ui.semantics.SemanticsPropertyKey
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 db919da0..4ab61cd 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
@@ -22,8 +22,8 @@
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.findClosestParentNode
 import androidx.ui.core.semantics.SemanticsNode
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.semantics.AccessibilityRangeInfo
 import androidx.ui.semantics.SemanticsProperties
 import androidx.ui.unit.height
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt b/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt
index 6f2b904..0e1bde5 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt
@@ -22,8 +22,8 @@
 import androidx.annotation.RequiresApi
 import androidx.ui.core.AndroidOwner
 import androidx.ui.core.ExperimentalLayoutNodeApi
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Path
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt b/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt
index 6123879..c940d75 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt
@@ -21,8 +21,8 @@
 import androidx.ui.core.gesture.DoubleTapTimeout
 import androidx.ui.core.gesture.LongPressTimeout
 import androidx.ui.core.semantics.SemanticsNode
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.lerp
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.lerp
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
 import androidx.ui.unit.Duration
 import androidx.ui.unit.IntSize
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt b/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt
index b19a2e4..3a45f97 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt
@@ -19,8 +19,8 @@
 import androidx.collection.SparseArrayCompat
 import androidx.ui.core.AndroidOwner
 import androidx.ui.core.Owner
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.lerp
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.lerp
 import androidx.ui.test.android.AndroidInputDispatcher
 import androidx.ui.test.android.AndroidOwnerRegistry
 import androidx.ui.unit.Duration
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidInputDispatcher.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidInputDispatcher.kt
index 5f01b4b..6a10360 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidInputDispatcher.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidInputDispatcher.kt
@@ -27,7 +27,7 @@
 import android.view.MotionEvent.ACTION_POINTER_DOWN
 import android.view.MotionEvent.ACTION_POINTER_UP
 import android.view.MotionEvent.ACTION_UP
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.InputDispatcher
 import androidx.ui.test.PartialGesture
 import java.util.concurrent.CountDownLatch
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 f59f204..5dc9dad 100644
--- a/ui/ui-text-core/api/0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/0.1.0-dev16.txt
@@ -75,8 +75,8 @@
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -99,10 +99,10 @@
     method public float getMaxIntrinsicWidth();
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -113,7 +113,7 @@
     property public final int lineCount;
     property public final float maxIntrinsicWidth;
     property public final float minIntrinsicWidth;
-    property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public final float width;
   }
 
@@ -135,8 +135,8 @@
 
   public interface Paragraph {
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -157,10 +157,10 @@
     method public float getLineWidth(int lineIndex);
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -171,7 +171,7 @@
     property public abstract int lineCount;
     property public abstract float maxIntrinsicWidth;
     property public abstract float minIntrinsicWidth;
-    property public abstract java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public abstract float width;
   }
 
@@ -241,7 +241,7 @@
   public final class SoftwareKeyboardController {
     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 notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
   }
 
@@ -327,8 +327,8 @@
     method public androidx.ui.unit.IntSize component3();
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
     method public boolean getDidOverflowWidth();
     method public float getFirstBaseline();
@@ -345,10 +345,10 @@
     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 int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
@@ -357,7 +357,7 @@
     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;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
@@ -757,7 +757,7 @@
 
   public interface PlatformTextInputService {
     method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void notifyFocusedRect(androidx.compose.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);
@@ -821,7 +821,7 @@
   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 notifyFocusedRect(int token, androidx.compose.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);
diff --git a/ui/ui-text-core/api/current.txt b/ui/ui-text-core/api/current.txt
index f59f204..5dc9dad 100644
--- a/ui/ui-text-core/api/current.txt
+++ b/ui/ui-text-core/api/current.txt
@@ -75,8 +75,8 @@
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -99,10 +99,10 @@
     method public float getMaxIntrinsicWidth();
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -113,7 +113,7 @@
     property public final int lineCount;
     property public final float maxIntrinsicWidth;
     property public final float minIntrinsicWidth;
-    property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public final float width;
   }
 
@@ -135,8 +135,8 @@
 
   public interface Paragraph {
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -157,10 +157,10 @@
     method public float getLineWidth(int lineIndex);
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -171,7 +171,7 @@
     property public abstract int lineCount;
     property public abstract float maxIntrinsicWidth;
     property public abstract float minIntrinsicWidth;
-    property public abstract java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public abstract float width;
   }
 
@@ -241,7 +241,7 @@
   public final class SoftwareKeyboardController {
     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 notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
   }
 
@@ -327,8 +327,8 @@
     method public androidx.ui.unit.IntSize component3();
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
     method public boolean getDidOverflowWidth();
     method public float getFirstBaseline();
@@ -345,10 +345,10 @@
     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 int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
@@ -357,7 +357,7 @@
     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;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
@@ -757,7 +757,7 @@
 
   public interface PlatformTextInputService {
     method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void notifyFocusedRect(androidx.compose.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);
@@ -821,7 +821,7 @@
   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 notifyFocusedRect(int token, androidx.compose.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);
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 f59f204..5dc9dad 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
@@ -75,8 +75,8 @@
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -99,10 +99,10 @@
     method public float getMaxIntrinsicWidth();
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -113,7 +113,7 @@
     property public final int lineCount;
     property public final float maxIntrinsicWidth;
     property public final float minIntrinsicWidth;
-    property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public final float width;
   }
 
@@ -135,8 +135,8 @@
 
   public interface Paragraph {
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -157,10 +157,10 @@
     method public float getLineWidth(int lineIndex);
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -171,7 +171,7 @@
     property public abstract int lineCount;
     property public abstract float maxIntrinsicWidth;
     property public abstract float minIntrinsicWidth;
-    property public abstract java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public abstract float width;
   }
 
@@ -241,7 +241,7 @@
   public final class SoftwareKeyboardController {
     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 notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
   }
 
@@ -327,8 +327,8 @@
     method public androidx.ui.unit.IntSize component3();
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
     method public boolean getDidOverflowWidth();
     method public float getFirstBaseline();
@@ -345,10 +345,10 @@
     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 int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
@@ -357,7 +357,7 @@
     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;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
@@ -757,7 +757,7 @@
 
   public interface PlatformTextInputService {
     method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void notifyFocusedRect(androidx.compose.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);
@@ -821,7 +821,7 @@
   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 notifyFocusedRect(int token, androidx.compose.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);
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 f59f204..5dc9dad 100644
--- a/ui/ui-text-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-text-core/api/public_plus_experimental_current.txt
@@ -75,8 +75,8 @@
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -99,10 +99,10 @@
     method public float getMaxIntrinsicWidth();
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -113,7 +113,7 @@
     property public final int lineCount;
     property public final float maxIntrinsicWidth;
     property public final float minIntrinsicWidth;
-    property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public final float width;
   }
 
@@ -135,8 +135,8 @@
 
   public interface Paragraph {
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -157,10 +157,10 @@
     method public float getLineWidth(int lineIndex);
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -171,7 +171,7 @@
     property public abstract int lineCount;
     property public abstract float maxIntrinsicWidth;
     property public abstract float minIntrinsicWidth;
-    property public abstract java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public abstract float width;
   }
 
@@ -241,7 +241,7 @@
   public final class SoftwareKeyboardController {
     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 notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
   }
 
@@ -327,8 +327,8 @@
     method public androidx.ui.unit.IntSize component3();
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
     method public boolean getDidOverflowWidth();
     method public float getFirstBaseline();
@@ -345,10 +345,10 @@
     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 int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
@@ -357,7 +357,7 @@
     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;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
@@ -757,7 +757,7 @@
 
   public interface PlatformTextInputService {
     method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void notifyFocusedRect(androidx.compose.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);
@@ -821,7 +821,7 @@
   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 notifyFocusedRect(int token, androidx.compose.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);
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 f59f204..5dc9dad 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
@@ -75,8 +75,8 @@
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -99,10 +99,10 @@
     method public float getMaxIntrinsicWidth();
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -113,7 +113,7 @@
     property public final int lineCount;
     property public final float maxIntrinsicWidth;
     property public final float minIntrinsicWidth;
-    property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public final float width;
   }
 
@@ -135,8 +135,8 @@
 
   public interface Paragraph {
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -157,10 +157,10 @@
     method public float getLineWidth(int lineIndex);
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -171,7 +171,7 @@
     property public abstract int lineCount;
     property public abstract float maxIntrinsicWidth;
     property public abstract float minIntrinsicWidth;
-    property public abstract java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public abstract float width;
   }
 
@@ -241,7 +241,7 @@
   public final class SoftwareKeyboardController {
     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 notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
   }
 
@@ -327,8 +327,8 @@
     method public androidx.ui.unit.IntSize component3();
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
     method public boolean getDidOverflowWidth();
     method public float getFirstBaseline();
@@ -345,10 +345,10 @@
     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 int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
@@ -357,7 +357,7 @@
     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;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
@@ -757,7 +757,7 @@
 
   public interface PlatformTextInputService {
     method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void notifyFocusedRect(androidx.compose.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);
@@ -821,7 +821,7 @@
   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 notifyFocusedRect(int token, androidx.compose.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);
diff --git a/ui/ui-text-core/api/restricted_current.txt b/ui/ui-text-core/api/restricted_current.txt
index f59f204..5dc9dad 100644
--- a/ui/ui-text-core/api/restricted_current.txt
+++ b/ui/ui-text-core/api/restricted_current.txt
@@ -75,8 +75,8 @@
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -99,10 +99,10 @@
     method public float getMaxIntrinsicWidth();
     method public int getMaxLines();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -113,7 +113,7 @@
     property public final int lineCount;
     property public final float maxIntrinsicWidth;
     property public final float minIntrinsicWidth;
-    property public final java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public final float width;
   }
 
@@ -135,8 +135,8 @@
 
   public interface Paragraph {
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidExceedMaxLines();
     method public float getFirstBaseline();
     method public float getHeight();
@@ -157,10 +157,10 @@
     method public float getLineWidth(int lineIndex);
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
-    method public int getOffsetForPosition(androidx.ui.geometry.Offset position);
+    method public int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public float getWidth();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     method public void paint(androidx.ui.graphics.Canvas canvas);
@@ -171,7 +171,7 @@
     property public abstract int lineCount;
     property public abstract float maxIntrinsicWidth;
     property public abstract float minIntrinsicWidth;
-    property public abstract java.util.List<androidx.ui.geometry.Rect> placeholderRects;
+    property public abstract java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
     property public abstract float width;
   }
 
@@ -241,7 +241,7 @@
   public final class SoftwareKeyboardController {
     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 notifyFocusedRect(androidx.compose.ui.geometry.Rect rect);
     method public void showSoftwareKeyboard();
   }
 
@@ -327,8 +327,8 @@
     method public androidx.ui.unit.IntSize component3();
     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 androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
+    method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
     method public boolean getDidOverflowHeight();
     method public boolean getDidOverflowWidth();
     method public float getFirstBaseline();
@@ -345,10 +345,10 @@
     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 int getOffsetForPosition(androidx.compose.ui.geometry.Offset position);
     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 java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
     method public androidx.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
@@ -357,7 +357,7 @@
     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;
+    property public final java.util.List<androidx.compose.ui.geometry.Rect> placeholderRects;
   }
 
   public final class TextPainter {
@@ -757,7 +757,7 @@
 
   public interface PlatformTextInputService {
     method public void hideSoftwareKeyboard();
-    method public void notifyFocusedRect(androidx.ui.geometry.Rect rect);
+    method public void notifyFocusedRect(androidx.compose.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);
@@ -821,7 +821,7 @@
   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 notifyFocusedRect(int token, androidx.compose.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);
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
index f1b57593..a619783 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
@@ -19,8 +19,8 @@
 import androidx.test.filters.SmallTest
 import androidx.test.filters.Suppress
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.PathOperation
 import androidx.compose.ui.text.intl.LocaleList
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
index ddc8cf3..7a60b0c 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
@@ -19,7 +19,7 @@
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.compose.ui.text.intl.LocaleList
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.ImageAsset
@@ -41,7 +41,7 @@
 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.compose.ui.geometry.Offset
 import androidx.ui.unit.em
 import androidx.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
index 48e6d90..be606c6 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
@@ -21,7 +21,7 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
index 58e833e..18fed93 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
@@ -20,7 +20,7 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Canvas
 import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.compose.ui.text.font.asFontFamily
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
index e0cfd35..01cb6ab 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
@@ -13,7 +13,7 @@
 import android.text.style.UnderlineSpan
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.toArgb
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
index cafa3e6..06be54f 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
@@ -19,7 +19,7 @@
 import android.text.TextPaint
 import android.text.TextUtils
 import androidx.compose.ui.text.android.InternalPlatformTextApi
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Path
 import androidx.ui.graphics.asComposePath
@@ -47,7 +47,7 @@
 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.compose.ui.geometry.Offset
 import androidx.ui.util.annotation.VisibleForTesting
 import java.util.Locale as JavaLocale
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
index 06f00c4..23c121c 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
@@ -16,13 +16,13 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Path
 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.compose.ui.geometry.Offset
 import androidx.ui.util.fastForEach
 import kotlin.math.max
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
index ac6c641..de5de66 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
@@ -15,14 +15,14 @@
  */
 package androidx.compose.ui.text
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Path
 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
+import androidx.compose.ui.geometry.Offset
 
 internal const val DefaultMaxLines = Int.MAX_VALUE
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SoftwareKeyboardController.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SoftwareKeyboardController.kt
index 1594bd8..3a262ef 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SoftwareKeyboardController.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SoftwareKeyboardController.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.text.input.InputSessionToken
 import androidx.compose.ui.text.input.TextInputService
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
index 9e1580d..3f3a5544 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
@@ -18,8 +18,8 @@
 
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Path
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.ResolvedTextDirection
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
index ad8d976..b5cf04c4 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextPainter.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.compose.ui.text.style.TextOverflow
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
index 3a2253c..d61c3c7 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextInputService.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text.input
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 
 /**
  * The input session token.
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
index 1c674611..9ccadf0 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextInputServiceTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.text.input.ImeAction
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.input.KeyboardType
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
index 72e6b20e..01bd5d4 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text
 
 import androidx.compose.ui.text.intl.LocaleList
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.ui.graphics.lerp
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 3e2188a..fbbd752 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
@@ -20,7 +20,7 @@
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
 import androidx.compose.foundation.layout.Column
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 7126593..c1a6f98 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
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Color
 import androidx.compose.ui.text.input.ImeAction
 import androidx.compose.ui.text.input.KeyboardType
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 9ca1fd5..7b4a57756 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
@@ -42,7 +42,7 @@
 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.compose.ui.geometry.Offset
 import androidx.compose.ui.text.InternalTextApi
 import androidx.ui.unit.TextUnit
 import androidx.ui.unit.sp
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 8175c15..16c637c 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
@@ -37,7 +37,7 @@
 import androidx.ui.core.selection.Selectable
 import androidx.ui.core.selection.SelectionRegistrarAmbient
 import androidx.ui.core.semantics.semantics
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.drawscope.drawCanvas
 import androidx.ui.graphics.Paint
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 11766d1..7f76575 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
@@ -48,7 +48,7 @@
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.ui.core.selection.SelectionLayout
 import androidx.ui.core.semantics.semantics
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.drawscope.drawCanvas
 import androidx.compose.ui.text.input.EditProcessor
 import androidx.compose.ui.text.input.TextFieldValue
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 c5bf1e7..090abb4 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
@@ -20,8 +20,8 @@
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.LayoutDirection
 import androidx.ui.core.constrainHeight
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Paint
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 89102a4..7ac830e 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
@@ -19,8 +19,8 @@
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.selection.Selectable
 import androidx.ui.core.selection.Selection
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.TextLayoutResult
 import androidx.compose.ui.text.TextRange
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionMode.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionMode.kt
index 5ef1b55..d49877a 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionMode.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/SelectionMode.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.selection
 
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
 
 /**
  * The enum class allows user to decide the selection mode.
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 54927d2..daa8648 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
@@ -29,8 +29,8 @@
 import androidx.ui.core.selection.getAdjustedCoordinates
 import androidx.ui.core.texttoolbar.TextToolbar
 import androidx.ui.core.texttoolbar.TextToolbarStatus
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.text.input.OffsetMap
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.input.getSelectedText
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 1baaef9..c3f2a1c 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
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation.text.selection
 
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.text.TextLayoutResult
 import androidx.compose.ui.text.TextRange
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import kotlin.math.max
 
 /**
diff --git a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/DragEventTrackerTest.kt b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/DragEventTrackerTest.kt
index 810eca4..df5d361 100644
--- a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/DragEventTrackerTest.kt
+++ b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/DragEventTrackerTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.text
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
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 e190488..97eaf78 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
@@ -19,8 +19,8 @@
 import androidx.ui.core.Constraints
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.LayoutDirection
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
 import androidx.ui.graphics.Canvas
 import androidx.ui.graphics.Color
 import androidx.compose.ui.text.input.CommitTextEditOp
diff --git a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionModeTest.kt b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionModeTest.kt
index 4fc23ec..c71c3c7 100644
--- a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionModeTest.kt
+++ b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/SelectionModeTest.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.text.selection
 
 import androidx.test.filters.SmallTest
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
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 372dc4c..940059d 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
@@ -23,8 +23,8 @@
 import androidx.ui.core.hapticfeedback.HapticFeedback
 import androidx.ui.core.hapticfeedback.HapticFeedbackType
 import androidx.ui.core.texttoolbar.TextToolbar
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.text.input.OffsetMap
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.AnnotatedString
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 211f482a..93e2167 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
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.shape.corner.CutCornerShape
 import androidx.compose.foundation.shape.corner.RoundedCornerShape
 import androidx.compose.foundation.shape.corner.ZeroCornerSize
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.LinearGradient
 import androidx.ui.graphics.RectangleShape
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 2061da2..02222d9 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
@@ -21,8 +21,8 @@
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.shape.corner.CornerBasedShape
 import androidx.compose.foundation.shape.corner.CornerSize
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
 import androidx.ui.graphics.Brush
 import androidx.ui.graphics.Color
 import androidx.ui.graphics.Shadow
diff --git a/ui/ui-unit/api/0.1.0-dev16.txt b/ui/ui-unit/api/0.1.0-dev16.txt
index 366bed1c..cc44971 100644
--- a/ui/ui-unit/api/0.1.0-dev16.txt
+++ b/ui/ui-unit/api/0.1.0-dev16.txt
@@ -77,7 +77,7 @@
     method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
     method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
@@ -278,7 +278,7 @@
     method public static inline int getHeight(androidx.ui.unit.IntBounds);
     method public static inline int getWidth(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
   }
 
@@ -304,11 +304,11 @@
   public final class IntOffsetKt {
     method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
     method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
@@ -398,14 +398,14 @@
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-oHQNTA4(androidx.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-b2zCL34(long);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     method public static inline float getHeight(androidx.ui.unit.PxBounds);
     method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-b2zCL34(long);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
     method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
   }
 
@@ -513,10 +513,10 @@
   }
 
   @androidx.compose.Immutable public final class Velocity {
-    ctor public Velocity(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset getPixelsPerSecond();
+    ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset component1();
+    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
     method public operator androidx.ui.unit.Velocity unaryMinus();
     field public static final androidx.ui.unit.Velocity.Companion Companion;
   }
diff --git a/ui/ui-unit/api/current.txt b/ui/ui-unit/api/current.txt
index 366bed1c..cc44971 100644
--- a/ui/ui-unit/api/current.txt
+++ b/ui/ui-unit/api/current.txt
@@ -77,7 +77,7 @@
     method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
     method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
@@ -278,7 +278,7 @@
     method public static inline int getHeight(androidx.ui.unit.IntBounds);
     method public static inline int getWidth(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
   }
 
@@ -304,11 +304,11 @@
   public final class IntOffsetKt {
     method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
     method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
@@ -398,14 +398,14 @@
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-oHQNTA4(androidx.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-b2zCL34(long);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     method public static inline float getHeight(androidx.ui.unit.PxBounds);
     method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-b2zCL34(long);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
     method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
   }
 
@@ -513,10 +513,10 @@
   }
 
   @androidx.compose.Immutable public final class Velocity {
-    ctor public Velocity(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset getPixelsPerSecond();
+    ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset component1();
+    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
     method public operator androidx.ui.unit.Velocity unaryMinus();
     field public static final androidx.ui.unit.Velocity.Companion Companion;
   }
diff --git a/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt
index 366bed1c..cc44971 100644
--- a/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt
@@ -77,7 +77,7 @@
     method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
     method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
@@ -278,7 +278,7 @@
     method public static inline int getHeight(androidx.ui.unit.IntBounds);
     method public static inline int getWidth(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
   }
 
@@ -304,11 +304,11 @@
   public final class IntOffsetKt {
     method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
     method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
@@ -398,14 +398,14 @@
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-oHQNTA4(androidx.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-b2zCL34(long);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     method public static inline float getHeight(androidx.ui.unit.PxBounds);
     method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-b2zCL34(long);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
     method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
   }
 
@@ -513,10 +513,10 @@
   }
 
   @androidx.compose.Immutable public final class Velocity {
-    ctor public Velocity(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset getPixelsPerSecond();
+    ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset component1();
+    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
     method public operator androidx.ui.unit.Velocity unaryMinus();
     field public static final androidx.ui.unit.Velocity.Companion Companion;
   }
diff --git a/ui/ui-unit/api/public_plus_experimental_current.txt b/ui/ui-unit/api/public_plus_experimental_current.txt
index 366bed1c..cc44971 100644
--- a/ui/ui-unit/api/public_plus_experimental_current.txt
+++ b/ui/ui-unit/api/public_plus_experimental_current.txt
@@ -77,7 +77,7 @@
     method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
     method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
@@ -278,7 +278,7 @@
     method public static inline int getHeight(androidx.ui.unit.IntBounds);
     method public static inline int getWidth(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
   }
 
@@ -304,11 +304,11 @@
   public final class IntOffsetKt {
     method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
     method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
@@ -398,14 +398,14 @@
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-oHQNTA4(androidx.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-b2zCL34(long);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     method public static inline float getHeight(androidx.ui.unit.PxBounds);
     method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-b2zCL34(long);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
     method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
   }
 
@@ -513,10 +513,10 @@
   }
 
   @androidx.compose.Immutable public final class Velocity {
-    ctor public Velocity(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset getPixelsPerSecond();
+    ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset component1();
+    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
     method public operator androidx.ui.unit.Velocity unaryMinus();
     field public static final androidx.ui.unit.Velocity.Companion Companion;
   }
diff --git a/ui/ui-unit/api/restricted_0.1.0-dev16.txt b/ui/ui-unit/api/restricted_0.1.0-dev16.txt
index 24d9981..c14d509 100644
--- a/ui/ui-unit/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-unit/api/restricted_0.1.0-dev16.txt
@@ -77,7 +77,7 @@
     method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
     method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
@@ -278,7 +278,7 @@
     method public static inline int getHeight(androidx.ui.unit.IntBounds);
     method public static inline int getWidth(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
   }
 
@@ -304,11 +304,11 @@
   public final class IntOffsetKt {
     method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
     method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
@@ -398,14 +398,14 @@
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-oHQNTA4(androidx.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-b2zCL34(long);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     method public static inline float getHeight(androidx.ui.unit.PxBounds);
     method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-b2zCL34(long);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
     method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
   }
 
@@ -517,10 +517,10 @@
   }
 
   @androidx.compose.Immutable public final class Velocity {
-    ctor public Velocity(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset getPixelsPerSecond();
+    ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset component1();
+    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
     method public operator androidx.ui.unit.Velocity unaryMinus();
     field public static final androidx.ui.unit.Velocity.Companion Companion;
   }
diff --git a/ui/ui-unit/api/restricted_current.txt b/ui/ui-unit/api/restricted_current.txt
index 24d9981..c14d509 100644
--- a/ui/ui-unit/api/restricted_current.txt
+++ b/ui/ui-unit/api/restricted_current.txt
@@ -77,7 +77,7 @@
     method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
     method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
     method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
     method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
@@ -278,7 +278,7 @@
     method public static inline int getHeight(androidx.ui.unit.IntBounds);
     method public static inline int getWidth(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
     method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
   }
 
@@ -304,11 +304,11 @@
   public final class IntOffsetKt {
     method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
     method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
@@ -398,14 +398,14 @@
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-oHQNTA4(androidx.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Offset center-b2zCL34(long);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     method public static inline float getHeight(androidx.ui.unit.PxBounds);
     method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-b2zCL34(long);
-    method @androidx.compose.Stable public static androidx.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
     method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
   }
 
@@ -517,10 +517,10 @@
   }
 
   @androidx.compose.Immutable public final class Velocity {
-    ctor public Velocity(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.ui.geometry.Offset pixelsPerSecond);
-    method public androidx.ui.geometry.Offset getPixelsPerSecond();
+    ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset component1();
+    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
     method public operator androidx.ui.unit.Velocity unaryMinus();
     field public static final androidx.ui.unit.Velocity.Companion Companion;
   }
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Density.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Density.kt
index b920919..9021d6f 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Density.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Density.kt
@@ -19,7 +19,7 @@
 import androidx.compose.Immutable
 import androidx.compose.Stable
 import androidx.ui.core.Constraints
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntBounds.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntBounds.kt
index f2dd669..dda3263 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntBounds.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntBounds.kt
@@ -20,7 +20,7 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.geometry.Rect
+import androidx.compose.ui.geometry.Rect
 
 /**
  * A four dimensional bounds holder defined by integer pixels.
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntOffset.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntOffset.kt
index b626d2e..5472785 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntOffset.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntOffset.kt
@@ -20,7 +20,7 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import androidx.ui.util.lerp
 import androidx.ui.util.packInts
 import androidx.ui.util.unpackInt1
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntSize.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntSize.kt
index 35f174d..744f956 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntSize.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntSize.kt
@@ -20,7 +20,7 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Size
 import androidx.ui.util.packInts
 import androidx.ui.util.unpackInt1
 import androidx.ui.util.unpackInt2
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Px.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Px.kt
index 58d04fa..38fdfbb 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Px.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Px.kt
@@ -19,9 +19,9 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Rect
-import androidx.ui.geometry.Size
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Rect
+import androidx.compose.ui.geometry.Size
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Velocity.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Velocity.kt
index d0451c1..e2e6202 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Velocity.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Velocity.kt
@@ -17,7 +17,7 @@
 package androidx.ui.unit
 
 import androidx.compose.Immutable
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 
 /** A velocity in two dimensions. */
 @Immutable
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntOffsetTest.kt b/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntOffsetTest.kt
index c433723..19b197a 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntOffsetTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntOffsetTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.unit
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/PxTest.kt b/ui/ui-unit/src/test/kotlin/androidx/ui/unit/PxTest.kt
index bc9838e2..e2dcec0 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/PxTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/ui/unit/PxTest.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.unit
 
-import androidx.ui.geometry.Offset
-import androidx.ui.geometry.Size
-import androidx.ui.geometry.lerp
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.geometry.lerp
 import org.junit.Assert
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/VelocityTest.kt b/ui/ui-unit/src/test/kotlin/androidx/ui/unit/VelocityTest.kt
index e4c3097..830eab3 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/VelocityTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/ui/unit/VelocityTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.unit
 
-import androidx.ui.geometry.Offset
+import androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
