Merge "Conditionally use column default value in equality check part 2." into androidx-master-dev
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index 5f9f3f89..a6c0c7b 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -23,7 +23,7 @@
 } else {
     build_versions.kotlin = '1.3.40'
 }
-build_versions.lint = '26.5.0-beta04'
+build_versions.lint = '26.5.0-beta05'
 build_versions.dokka = '0.9.17-g002'
 
 build_versions.studio = new Properties()
diff --git a/buildSrc/lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt b/buildSrc/lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt
index 56d684e..b8f7f0b 100644
--- a/buildSrc/lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt
+++ b/buildSrc/lint-checks/src/main/java/androidx/build/lint/MissingTestSizeAnnotation.kt
@@ -30,6 +30,10 @@
 import java.util.Collections
 import java.util.EnumSet
 
+/**
+ * Lint check to enforce that every device side test (tests in the androidTest dir) has correct
+ * size annotations, so that we can correctly split up test runs and enforce timeouts.
+ */
 class MissingTestSizeAnnotation : Detector(), SourceCodeScanner {
 
     override fun getApplicableUastTypes(): List<Class<out UElement>>? =
@@ -42,11 +46,12 @@
     class TestSizeAnnotationHandler(private val context: JavaContext) : UElementHandler() {
         override fun visitClass(node: UClass) {
             // Ignore any non-test class (missing a @RunWith() annotation)
-            val runWith = node.findAnnotation(RUN_WITH) ?: return
+            if (!node.hasAnnotation(RUN_WITH)) {
+                return
+            }
 
-            // Ignore host side tests as test size is ignored in this case
-            val runner = runWith.attributeValues[0].expression.asRenderString()
-            if (HOST_SIDE_TEST_RUNNERS.any { runner == it }) {
+            // Ignore host side tests as we only enforce timeouts on device tests
+            if (!context.file.absolutePath.contains(ANDROID_TEST_DIR)) {
                 return
             }
 
@@ -70,12 +75,7 @@
 
     companion object {
         const val RUN_WITH = "org.junit.runner.RunWith"
-        val HOST_SIDE_TEST_RUNNERS = listOf(
-            "org.junit.runners.JUnit4",
-            "org.robolectric.RobolectricTestRunner",
-            "JUnit4",
-            "RobolectricTestRunner"
-        )
+        const val ANDROID_TEST_DIR = "androidTest"
         const val TEST_ANNOTATION = "org.junit.Test"
         val TEST_SIZE_ANNOTATIONS = listOf(
             "androidx.test.filters.SmallTest",
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
index ffe0d1e..402b513 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
@@ -72,9 +72,9 @@
 const val LEAKCANARY_INSTRUMENTATION =
     "com.squareup.leakcanary:leakcanary-android-instrumentation:1.6.2"
 const val LINT_API_MIN = "com.android.tools.lint:lint-api:26.3.0"
-const val LINT_API_LATEST = "com.android.tools.lint:lint-api:26.5.0-beta04"
-const val LINT_CORE = "com.android.tools.lint:lint:26.5.0-beta04"
-const val LINT_TESTS = "com.android.tools.lint:lint-tests:26.5.0-beta04"
+const val LINT_API_LATEST = "com.android.tools.lint:lint-api:26.5.0-beta05"
+const val LINT_CORE = "com.android.tools.lint:lint:26.5.0-beta05"
+const val LINT_TESTS = "com.android.tools.lint:lint-tests:26.5.0-beta05"
 const val MATERIAL = "com.google.android.material:material:1.0.0"
 const val MOCKITO_CORE = "org.mockito:mockito-core:2.19.0"
 const val MOCKITO_KOTLIN = "com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0"
diff --git a/buildSrc/studio_versions.properties b/buildSrc/studio_versions.properties
index c09109a..aedd4c1 100644
--- a/buildSrc/studio_versions.properties
+++ b/buildSrc/studio_versions.properties
@@ -3,8 +3,8 @@
 # This file specifies the version of the Android Gradle Plugin and Android Studio to use.
 
 # Android Gradle Plugin version
-agp=3.5.0-beta04
+agp=3.5.0-beta05
 # Version properties for ./studiow, which correspond to the version of AGP
-studio_version=3.5.0.16
+studio_version=3.5.0.17
 idea_major_version=191
-studio_build_number=5619324
+studio_build_number=5675373
diff --git a/camera/extensions/src/androidTest/java/androidx/camera/extensions/PreviewExtenderTest.java b/camera/extensions/src/androidTest/java/androidx/camera/extensions/PreviewExtenderTest.java
index 41b3b35..af846eb 100644
--- a/camera/extensions/src/androidTest/java/androidx/camera/extensions/PreviewExtenderTest.java
+++ b/camera/extensions/src/androidTest/java/androidx/camera/extensions/PreviewExtenderTest.java
@@ -18,9 +18,9 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assume.assumeTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.ignoreStubs;
 import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.timeout;
@@ -32,21 +32,16 @@
 import android.content.Context;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CaptureRequest;
-import android.hardware.camera2.CaptureResult;
+import android.hardware.camera2.TotalCaptureResult;
 import android.util.Pair;
 
-import androidx.camera.camera2.Camera2Config;
-import androidx.camera.camera2.impl.Camera2CameraCaptureResultConverter;
-import androidx.camera.camera2.impl.CameraEventCallbacks;
-import androidx.camera.core.CameraCaptureResult;
-import androidx.camera.core.CameraCaptureResults;
 import androidx.camera.core.CameraX;
-import androidx.camera.core.ImageInfo;
-import androidx.camera.core.ImageInfoProcessor;
 import androidx.camera.core.Preview;
 import androidx.camera.core.PreviewConfig;
 import androidx.camera.extensions.impl.CaptureStageImpl;
 import androidx.camera.extensions.impl.PreviewExtenderImpl;
+import androidx.camera.extensions.impl.PreviewImageProcessorImpl;
+import androidx.camera.extensions.impl.RequestUpdateProcessorImpl;
 import androidx.camera.testing.CameraUtil;
 import androidx.camera.testing.fakes.FakeLifecycleOwner;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -81,13 +76,17 @@
         FakeLifecycleOwner lifecycle = new FakeLifecycleOwner();
 
         PreviewExtenderImpl mockPreviewExtenderImpl = mock(PreviewExtenderImpl.class);
+        when(mockPreviewExtenderImpl.getProcessorType()).thenReturn(
+                PreviewExtenderImpl.ProcessorType.PROCESSOR_TYPE_IMAGE_PROCESSOR);
+        when(mockPreviewExtenderImpl.getProcessor()).thenReturn(
+                mock(PreviewImageProcessorImpl.class));
 
-        PreviewExtender.PreviewExtenderAdapter previewExtenderAdapter =
-                new PreviewExtender.PreviewExtenderAdapter(mockPreviewExtenderImpl, null);
-        PreviewConfig.Builder configBuilder = new PreviewConfig.Builder().setUseCaseEventListener(
-                previewExtenderAdapter).setLensFacing(CameraX.LensFacing.BACK);
-        new Camera2Config.Extender(configBuilder).setCameraEventCallback(
-                new CameraEventCallbacks(previewExtenderAdapter));
+        PreviewConfig.Builder configBuilder = new PreviewConfig.Builder().setLensFacing(
+                CameraX.LensFacing.BACK);
+
+        FakePreviewExtender fakePreviewExtender = new FakePreviewExtender(configBuilder,
+                mockPreviewExtenderImpl);
+        fakePreviewExtender.enableExtension();
 
         Preview useCase = new Preview(configBuilder.build());
 
@@ -99,8 +98,15 @@
 
         // To verify the call in order after bind to life cycle, and to verification of the
         // getCaptureStages() is also used to wait for the capture session created. The test for
-        // the unbind would come after the capture session was created.
-        InOrder inOrder = inOrder(mockPreviewExtenderImpl);
+        // the unbind would come after the capture session was created. Ignore any of the calls
+        // unrelated to the ExtenderStateListener.
+        verify(mockPreviewExtenderImpl, timeout(3000)).init(any(String.class),
+                any(CameraCharacteristics.class));
+        verify(mockPreviewExtenderImpl, timeout(3000)).getProcessorType();
+        verify(mockPreviewExtenderImpl, timeout(3000)).getProcessor();
+
+        InOrder inOrder = inOrder(ignoreStubs(mockPreviewExtenderImpl));
+
         inOrder.verify(mockPreviewExtenderImpl, timeout(3000)).onInit(any(String.class), any(
                 CameraCharacteristics.class), any(Context.class));
         inOrder.verify(mockPreviewExtenderImpl, timeout(3000)).onPresetSession();
@@ -120,28 +126,29 @@
 
     @Test
     @MediumTest
-    public void getCaptureStagesTest_shouldSetToRepeatingRequest() {
+    public void getCaptureStagesTest_shouldSetToRepeatingRequest() throws InterruptedException {
         FakeLifecycleOwner lifecycle = new FakeLifecycleOwner();
 
-        ImageInfoProcessor mockImageInfoProcessor = mock(ImageInfoProcessor.class);
-
         // Set up a result for getCaptureStages() testing.
-        List<Pair<CaptureRequest.Key, Object>> parameters = new ArrayList<>();
-        parameters.add(Pair.create(CaptureRequest.CONTROL_EFFECT_MODE,
-                CaptureRequest.CONTROL_EFFECT_MODE_BLACKBOARD));
-        CaptureStageImpl mockCaptureStageImpl = mock(CaptureStageImpl.class);
-        when(mockCaptureStageImpl.getParameters()).thenReturn(parameters);
+        CaptureStageImpl fakeCaptureStageImpl = new FakeCaptureStageImpl();
 
         PreviewExtenderImpl mockPreviewExtenderImpl = mock(PreviewExtenderImpl.class);
-        when(mockPreviewExtenderImpl.getCaptureStage()).thenReturn(mockCaptureStageImpl);
+        RequestUpdateProcessorImpl mockRequestUpdateProcessorImpl = mock(
+                RequestUpdateProcessorImpl.class);
 
-        PreviewExtender.PreviewExtenderAdapter previewExtenderAdapter =
-                new PreviewExtender.PreviewExtenderAdapter(mockPreviewExtenderImpl, null);
-        PreviewConfig.Builder configBuilder = new PreviewConfig.Builder().setUseCaseEventListener(
-                previewExtenderAdapter).setLensFacing(CameraX.LensFacing.BACK);
-        new Camera2Config.Extender(configBuilder).setCameraEventCallback(
-                new CameraEventCallbacks(previewExtenderAdapter));
-        configBuilder.setImageInfoProcessor(mockImageInfoProcessor);
+        // The mock an RequestUpdateProcessorImpl to capture the returned TotalCaptureResult
+        when(mockPreviewExtenderImpl.getProcessorType()).thenReturn(
+                PreviewExtenderImpl.ProcessorType.PROCESSOR_TYPE_REQUEST_UPDATE_ONLY);
+        when(mockPreviewExtenderImpl.getProcessor()).thenReturn(mockRequestUpdateProcessorImpl);
+
+        when(mockPreviewExtenderImpl.getCaptureStage()).thenReturn(fakeCaptureStageImpl);
+
+        PreviewConfig.Builder configBuilder = new PreviewConfig.Builder().setLensFacing(
+                CameraX.LensFacing.BACK);
+
+        FakePreviewExtender fakePreviewExtender = new FakePreviewExtender(configBuilder,
+                mockPreviewExtenderImpl);
+        fakePreviewExtender.enableExtension();
 
         Preview useCase = new Preview(configBuilder.build());
 
@@ -151,21 +158,44 @@
         // To set the update listener and Preview will change to active state.
         useCase.setOnPreviewOutputUpdateListener(mock(Preview.OnPreviewOutputUpdateListener.class));
 
-        ArgumentCaptor<ImageInfo> imageInfo = ArgumentCaptor.forClass(ImageInfo.class);
-        verify(mockImageInfoProcessor, timeout(3000)).process(imageInfo.capture());
-        CameraCaptureResult result = CameraCaptureResults.retrieveCameraCaptureResult(
-                imageInfo.getValue());
-        assertNotNull(result);
+        ArgumentCaptor<TotalCaptureResult> captureResultArgumentCaptor = ArgumentCaptor.forClass(
+                TotalCaptureResult.class);
 
-        CaptureResult captureResult = Camera2CameraCaptureResultConverter.getCaptureResult(result);
-        assertNotNull(captureResult);
+        verify(mockRequestUpdateProcessorImpl, timeout(3000).atLeastOnce()).process(
+                captureResultArgumentCaptor.capture());
+
+        // TotalCaptureResult might be captured multiple times. Only care to get one instance of
+        // it, since they should all have the same value for the tested key
+        TotalCaptureResult totalCaptureResult = captureResultArgumentCaptor.getValue();
 
         // To verify the capture result should include the parameter of the getCaptureStages().
-        assertThat(captureResult.getRequest().get(CaptureRequest.CONTROL_EFFECT_MODE)).isEqualTo(
-                CaptureRequest.CONTROL_EFFECT_MODE_BLACKBOARD);
-
-        CameraX.unbind(useCase);
-        verify(mockPreviewExtenderImpl, timeout(3000)).onDeInit();
+        List<Pair<CaptureRequest.Key, Object>> parameters = fakeCaptureStageImpl.getParameters();
+        for (Pair<CaptureRequest.Key, Object> parameter : parameters) {
+            assertThat(totalCaptureResult.getRequest().get(
+                    (CaptureRequest.Key<Object>) parameter.first).equals(
+                    parameter.second));
+        }
     }
 
+    private class FakePreviewExtender extends PreviewExtender {
+        FakePreviewExtender(PreviewConfig.Builder builder, PreviewExtenderImpl impl) {
+            init(builder, impl, ExtensionsManager.EffectMode.NORMAL);
+        }
+    }
+
+    private class FakeCaptureStageImpl implements CaptureStageImpl {
+        @Override
+        public int getId() {
+            return 0;
+        }
+
+        @Override
+        public List<Pair<CaptureRequest.Key, Object>> getParameters() {
+            List<Pair<CaptureRequest.Key, Object>> parameters = new ArrayList<>();
+            parameters.add(Pair.create(CaptureRequest.CONTROL_EFFECT_MODE,
+                    CaptureRequest.CONTROL_EFFECT_MODE_BLACKBOARD));
+
+            return parameters;
+        }
+    }
 }
diff --git a/camera/extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java b/camera/extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java
index 1f91467..3a29970 100644
--- a/camera/extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java
+++ b/camera/extensions/src/main/java/androidx/camera/extensions/PreviewExtender.java
@@ -45,7 +45,6 @@
 import androidx.camera.extensions.impl.RequestUpdateProcessorImpl;
 
 import java.util.Collection;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
  * Class for using an OEM provided extension on preview.
@@ -85,56 +84,29 @@
      * IMAGE_CAPTURE_EXTENSION_REQUIRED error will be thrown if corresponding image capture
      * extension is not enabled together.
      */
-    @SuppressWarnings("unchecked")
     public void enableExtension() {
         CameraX.LensFacing lensFacing = mBuilder.build().getLensFacing();
         String cameraId = CameraUtil.getCameraId(lensFacing);
         CameraCharacteristics cameraCharacteristics = CameraUtil.getCameraCharacteristics(cameraId);
         mImpl.init(cameraId, cameraCharacteristics);
 
+        PreviewExtenderAdapter previewExtenderAdapter;
         switch (mImpl.getProcessorType()) {
             case PROCESSOR_TYPE_REQUEST_UPDATE_ONLY:
-                mBuilder.setImageInfoProcessor(new ImageInfoProcessor() {
-                    @Override
-                    public CaptureStage getCaptureStage() {
-                        return new AdaptingCaptureStage(mImpl.getCaptureStage());
-                    }
-
-                    @Override
-                    public boolean process(ImageInfo imageInfo) {
-                        CameraCaptureResult result =
-                                CameraCaptureResults.retrieveCameraCaptureResult(imageInfo);
-                        if (result == null) {
-                            return false;
-                        }
-
-                        CaptureResult captureResult =
-                                Camera2CameraCaptureResultConverter.getCaptureResult(result);
-                        if (captureResult == null) {
-                            return false;
-                        }
-
-                        TotalCaptureResult totalCaptureResult = (TotalCaptureResult) captureResult;
-                        if (totalCaptureResult == null) {
-                            return false;
-                        }
-
-                        CaptureStageImpl captureStageImpl =
-                                ((RequestUpdateProcessorImpl) mImpl.getProcessor()).process(
-                                        totalCaptureResult);
-                        return captureStageImpl != null;
-                    }
-                });
+                RequestUpdateProcessingExtenderAdapter requestUpdateProcessingExtenderAdapter =
+                        new RequestUpdateProcessingExtenderAdapter(mImpl, mEffectMode);
+                mBuilder.setImageInfoProcessor(requestUpdateProcessingExtenderAdapter);
+                previewExtenderAdapter = requestUpdateProcessingExtenderAdapter;
                 break;
             case PROCESSOR_TYPE_IMAGE_PROCESSOR:
                 mBuilder.setCaptureProcessor(new
                         AdaptingPreviewProcessor((PreviewImageProcessorImpl) mImpl.getProcessor()));
+                previewExtenderAdapter = new PreviewExtenderAdapter(mImpl, mEffectMode);
                 break;
-            default: // fall out
+            default:
+                previewExtenderAdapter = new PreviewExtenderAdapter(mImpl, mEffectMode);
         }
 
-        PreviewExtenderAdapter previewExtenderAdapter = new PreviewExtenderAdapter(mImpl,
-                mEffectMode);
         new Camera2Config.Extender(mBuilder).setCameraEventCallback(
                 new CameraEventCallbacks(previewExtenderAdapter));
         mBuilder.setUseCaseEventListener(previewExtenderAdapter);
@@ -169,12 +141,16 @@
     /**
      * An implementation to adapt the OEM provided implementation to core.
      */
-    static class PreviewExtenderAdapter extends CameraEventCallback implements
+    private static class PreviewExtenderAdapter extends CameraEventCallback implements
             UseCase.EventListener {
         final EffectMode mEffectMode;
-        private final PreviewExtenderImpl mImpl;
-        private final AtomicBoolean mActive = new AtomicBoolean(true);
-        private final Object mLock = new Object();
+
+        final PreviewExtenderImpl mImpl;
+
+        // Once the adapter has set mActive to false a new instance needs to be created
+        @GuardedBy("mLock")
+        volatile boolean mActive = true;
+        final Object mLock = new Object();
         @GuardedBy("mLock")
         private volatile int mEnabledSessionCount = 0;
         @GuardedBy("mLock")
@@ -187,7 +163,7 @@
 
         @Override
         public void onBind(String cameraId) {
-            if (mActive.get()) {
+            if (mActive) {
                 CameraCharacteristics cameraCharacteristics =
                         CameraUtil.getCameraCharacteristics(cameraId);
                 mImpl.onInit(cameraId, cameraCharacteristics, CameraX.getContext());
@@ -205,21 +181,25 @@
         }
 
         private void callDeInit() {
-            if (mActive.get()) {
-                mImpl.onDeInit();
-                mActive.set(false);
+            synchronized (mLock) {
+                if (mActive) {
+                    mImpl.onDeInit();
+                    mActive = false;
+                }
             }
         }
 
         @Override
         public CaptureConfig onPresetSession() {
-            if (mActive.get()) {
-                Handler handler = new Handler(Looper.getMainLooper());
-                handler.post(new Runnable() {
-                    public void run() {
-                        checkImageCaptureEnabled(mEffectMode, CameraX.getActiveUseCases());
-                    }
-                });
+            synchronized (mLock) {
+                if (mActive) {
+                    Handler handler = new Handler(Looper.getMainLooper());
+                    handler.post(new Runnable() {
+                        public void run() {
+                            checkImageCaptureEnabled(mEffectMode, CameraX.getActiveUseCases());
+                        }
+                    });
+                }
                 CaptureStageImpl captureStageImpl = mImpl.onPresetSession();
                 if (captureStageImpl != null) {
                     return new AdaptingCaptureStage(captureStageImpl).getCaptureConfig();
@@ -232,10 +212,12 @@
         @Override
         public CaptureConfig onEnableSession() {
             try {
-                if (mActive.get()) {
-                    CaptureStageImpl captureStageImpl = mImpl.onEnableSession();
-                    if (captureStageImpl != null) {
-                        return new AdaptingCaptureStage(captureStageImpl).getCaptureConfig();
+                synchronized (mLock) {
+                    if (mActive) {
+                        CaptureStageImpl captureStageImpl = mImpl.onEnableSession();
+                        if (captureStageImpl != null) {
+                            return new AdaptingCaptureStage(captureStageImpl).getCaptureConfig();
+                        }
                     }
                 }
 
@@ -250,10 +232,12 @@
         @Override
         public CaptureConfig onDisableSession() {
             try {
-                if (mActive.get()) {
-                    CaptureStageImpl captureStageImpl = mImpl.onDisableSession();
-                    if (captureStageImpl != null) {
-                        return new AdaptingCaptureStage(captureStageImpl).getCaptureConfig();
+                synchronized (mLock) {
+                    if (mActive) {
+                        CaptureStageImpl captureStageImpl = mImpl.onDisableSession();
+                        if (captureStageImpl != null) {
+                            return new AdaptingCaptureStage(captureStageImpl).getCaptureConfig();
+                        }
                     }
                 }
 
@@ -270,10 +254,12 @@
 
         @Override
         public CaptureConfig onRepeating() {
-            if (mActive.get()) {
-                CaptureStageImpl captureStageImpl = mImpl.getCaptureStage();
-                if (captureStageImpl != null) {
-                    return new AdaptingCaptureStage(captureStageImpl).getCaptureConfig();
+            synchronized (mLock) {
+                if (mActive) {
+                    CaptureStageImpl captureStageImpl = mImpl.getCaptureStage();
+                    if (captureStageImpl != null) {
+                        return new AdaptingCaptureStage(captureStageImpl).getCaptureConfig();
+                    }
                 }
             }
 
@@ -281,4 +267,54 @@
         }
     }
 
+    // Prevents the implementation from being accessed after deInit() has been called
+    private static final class RequestUpdateProcessingExtenderAdapter extends
+            PreviewExtenderAdapter implements ImageInfoProcessor {
+
+        private final RequestUpdateProcessorImpl mProcessor;
+
+        RequestUpdateProcessingExtenderAdapter(PreviewExtenderImpl impl, EffectMode effectMode) {
+            super(impl, effectMode);
+            mProcessor = ((RequestUpdateProcessorImpl) mImpl.getProcessor());
+        }
+
+        @Override
+        public CaptureStage getCaptureStage() {
+            synchronized (mLock) {
+                if (mActive) {
+                    return new AdaptingCaptureStage(mImpl.getCaptureStage());
+                }
+                return null;
+            }
+        }
+
+        @Override
+        public boolean process(ImageInfo imageInfo) {
+            CameraCaptureResult result =
+                    CameraCaptureResults.retrieveCameraCaptureResult(imageInfo);
+            if (result == null) {
+                return false;
+            }
+
+            CaptureResult captureResult =
+                    Camera2CameraCaptureResultConverter.getCaptureResult(result);
+            if (captureResult == null) {
+                return false;
+            }
+
+            if (captureResult instanceof TotalCaptureResult) {
+                synchronized (mLock) {
+                    if (mActive) {
+                        CaptureStageImpl captureStageImpl =
+                                mProcessor.process((TotalCaptureResult) captureResult);
+                        return captureStageImpl != null;
+                    }
+                    return false;
+                }
+            } else {
+                return false;
+            }
+        }
+
+    }
 }
diff --git a/car/core/api/restricted_1.0.0-alpha8.txt b/car/core/api/restricted_1.0.0-alpha8.txt
index cc888b8..cacfe28 100644
--- a/car/core/api/restricted_1.0.0-alpha8.txt
+++ b/car/core/api/restricted_1.0.0-alpha8.txt
@@ -1,43 +1,4 @@
 // Signature format: 3.0
-package androidx.car.navigation.utils {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Bundlable {
-    method public void fromBundle(androidx.car.navigation.utils.BundleMarshaller);
-    method public void toBundle(androidx.car.navigation.utils.BundleMarshaller);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class BundleMarshaller {
-    ctor public BundleMarshaller();
-    method public void applyDelta(android.os.Bundle!);
-    method public boolean getBoolean(String);
-    method public <T extends androidx.car.navigation.utils.Bundlable> T? getBundlable(String, T?, java.util.function.Supplier<T!>);
-    method public <T extends androidx.car.navigation.utils.Bundlable> java.util.List<T!>? getBundlableList(String, java.util.List<T!>?, java.util.function.Supplier<T!>);
-    method public <T extends androidx.car.navigation.utils.Bundlable> java.util.List<T!> getBundlableListNonNull(String, java.util.List<T!>, java.util.function.Supplier<T!>);
-    method public <T extends androidx.car.navigation.utils.Bundlable> T getBundlableNonNull(String, T, java.util.function.Supplier<T!>);
-    method public android.os.Bundle! getBundle();
-    method public android.os.Bundle! getDelta();
-    method public double getDouble(String);
-    method public <T extends java.lang.Enum<T>> T? getEnum(String, Class<T!>);
-    method public <T extends java.lang.Enum<T>> T getEnumNonNull(String, Class<T!>, T);
-    method public float getFloat(String);
-    method public int getInt(String);
-    method public String? getString(String);
-    method public String getStringNonNull(String, String);
-    method public void putBoolean(String, boolean);
-    method public <T extends androidx.car.navigation.utils.Bundlable> void putBundlable(String, T?);
-    method public <T extends androidx.car.navigation.utils.Bundlable> void putBundlableList(String, java.util.List<T!>?);
-    method public void putDouble(String, double);
-    method public <T extends java.lang.Enum<T>> void putEnum(String, T?);
-    method public void putFloat(String, float);
-    method public void putInt(String, int);
-    method public void putString(String, String?);
-    method public void resetBundle();
-    method public void resetDelta();
-    method public void setBundle(android.os.Bundle!);
-  }
-
-}
-
 package androidx.car.util {
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CarUxRestrictionsUtils {
diff --git a/car/core/api/restricted_current.txt b/car/core/api/restricted_current.txt
index cc888b8..cacfe28 100644
--- a/car/core/api/restricted_current.txt
+++ b/car/core/api/restricted_current.txt
@@ -1,43 +1,4 @@
 // Signature format: 3.0
-package androidx.car.navigation.utils {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public interface Bundlable {
-    method public void fromBundle(androidx.car.navigation.utils.BundleMarshaller);
-    method public void toBundle(androidx.car.navigation.utils.BundleMarshaller);
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class BundleMarshaller {
-    ctor public BundleMarshaller();
-    method public void applyDelta(android.os.Bundle!);
-    method public boolean getBoolean(String);
-    method public <T extends androidx.car.navigation.utils.Bundlable> T? getBundlable(String, T?, java.util.function.Supplier<T!>);
-    method public <T extends androidx.car.navigation.utils.Bundlable> java.util.List<T!>? getBundlableList(String, java.util.List<T!>?, java.util.function.Supplier<T!>);
-    method public <T extends androidx.car.navigation.utils.Bundlable> java.util.List<T!> getBundlableListNonNull(String, java.util.List<T!>, java.util.function.Supplier<T!>);
-    method public <T extends androidx.car.navigation.utils.Bundlable> T getBundlableNonNull(String, T, java.util.function.Supplier<T!>);
-    method public android.os.Bundle! getBundle();
-    method public android.os.Bundle! getDelta();
-    method public double getDouble(String);
-    method public <T extends java.lang.Enum<T>> T? getEnum(String, Class<T!>);
-    method public <T extends java.lang.Enum<T>> T getEnumNonNull(String, Class<T!>, T);
-    method public float getFloat(String);
-    method public int getInt(String);
-    method public String? getString(String);
-    method public String getStringNonNull(String, String);
-    method public void putBoolean(String, boolean);
-    method public <T extends androidx.car.navigation.utils.Bundlable> void putBundlable(String, T?);
-    method public <T extends androidx.car.navigation.utils.Bundlable> void putBundlableList(String, java.util.List<T!>?);
-    method public void putDouble(String, double);
-    method public <T extends java.lang.Enum<T>> void putEnum(String, T?);
-    method public void putFloat(String, float);
-    method public void putInt(String, int);
-    method public void putString(String, String?);
-    method public void resetBundle();
-    method public void resetDelta();
-    method public void setBundle(android.os.Bundle!);
-  }
-
-}
-
 package androidx.car.util {
 
   @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX) public class CarUxRestrictionsUtils {
diff --git a/car/core/src/androidTest/java/androidx/car/navigation/utils/BundlableTest.java b/car/core/src/androidTest/java/androidx/car/navigation/utils/BundlableTest.java
deleted file mode 100644
index 68ae04e..0000000
--- a/car/core/src/androidTest/java/androidx/car/navigation/utils/BundlableTest.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.car.navigation.utils;
-
-import static org.junit.Assert.assertEquals;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.Arrays;
-
-/**
- * Unit tests for {@link Bundlable}.
- */
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class BundlableTest {
-    /**
-     * Serialization test value.
-     */
-    private static final TestBundlable TEST_VALUE = new TestBundlable()
-            .setInt(123)
-            .setString("TEST")
-            .setEnumValue(TestBundlable.TestEnum.VALUE1)
-            .setListValue(Arrays.asList(
-                    new TestBundlable()
-                            .setString("TEST2")
-                            .setEnumValue(TestBundlable.TestEnum.VALUE2),
-                    new TestBundlable()
-                            .setString("TEST3")
-            ))
-            .setBundlableValue(
-                    new TestBundlable()
-                            .setString("TEST4")
-            );
-
-    /**
-     * Equivalent to {@link #TEST_VALUE} after a schema change (see
-     * {@link TestBundlableNewVersion}). In this new schema, {@link TestBundlable} has its
-     * {@link TestBundlable#mStringValue} field deprecated, and a new
-     * {@link TestBundlableNewVersion#mNewValue} non-null field was added.
-     */
-    private static final TestBundlableNewVersion TEST_VALUE_NEW_VERSION =
-            new TestBundlableNewVersion()
-                    .setInt(123)
-                    .setEnumValue(TestBundlableNewVersion.TestEnum.VALUE1)
-                    .setListValue(Arrays.asList(
-                            new TestBundlableNewVersion()
-                                    .setEnumValue(TestBundlableNewVersion.TestEnum.VALUE2),
-                            new TestBundlableNewVersion()
-                    ))
-                    .setBundlableValue(
-                            new TestBundlableNewVersion()
-                    );
-
-    /**
-     * Expected value when interpreting {@link #TEST_VALUE_NEW_VERSION} using the same schema as
-     * {@link TestBundlable}. Given that {@link TestBundlableNewVersion#mNewValue} doesn't exist
-     * the old schema, and {@link TestBundlable#mStringValue} doesn't exist in the new schema,
-     * both values are dropped during serialization/deserialization.
-     */
-    private static final TestBundlable TEST_VALUE_NEW_VERSION_OLD_SCHEMA = new TestBundlable()
-            .setInt(123)
-            .setEnumValue(TestBundlable.TestEnum.VALUE1)
-            .setListValue(Arrays.asList(
-                    new TestBundlable()
-                            .setEnumValue(TestBundlable.TestEnum.VALUE2),
-                    new TestBundlable()
-            ))
-            .setBundlableValue(
-                    new TestBundlable()
-            );
-
-    private BundleMarshaller mBundleMarshaller = new BundleMarshaller();
-
-    /**
-     * Asserts that serializing and deserializing a {@link Bundlable} produces the same content.
-     * This includes testing instances with null values in them.
-     */
-    @Test
-    public void testSerializationDeserializationMaintainsContent() {
-        TestBundlable output = new TestBundlable();
-
-        TEST_VALUE.toBundle(mBundleMarshaller);
-        output.fromBundle(mBundleMarshaller);
-        assertEquals(TEST_VALUE, output);
-    }
-
-    /**
-     * Asserts that serialization and deserialization works in a forward compatible way, as long as
-     * they follow the versioning rules listed in {@link Bundlable}.
-     */
-    @Test
-    public void testForwardCompatibleChangesMaintainsCommonContent() {
-        TestBundlableNewVersion output = new TestBundlableNewVersion();
-
-        TEST_VALUE.toBundle(mBundleMarshaller);
-        output.fromBundle(mBundleMarshaller);
-        assertEquals(TEST_VALUE_NEW_VERSION, output);
-    }
-
-    /**
-     * Asserts that serialization and deserialization works in a backwards compatible way, as long
-     * as they follow the versioning rules listed in {@link Bundlable}.
-     */
-    @Test
-    public void testBackwardCompatibleChangesMaintainsCommonContent() {
-        TestBundlable output = new TestBundlable();
-
-        TEST_VALUE_NEW_VERSION.toBundle(mBundleMarshaller);
-        output.fromBundle(mBundleMarshaller);
-        assertEquals(TEST_VALUE_NEW_VERSION_OLD_SCHEMA, output);
-    }
-}
diff --git a/car/core/src/androidTest/java/androidx/car/navigation/utils/BundleMarshallerTest.java b/car/core/src/androidTest/java/androidx/car/navigation/utils/BundleMarshallerTest.java
deleted file mode 100644
index 5a9ad6e..0000000
--- a/car/core/src/androidTest/java/androidx/car/navigation/utils/BundleMarshallerTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.car.navigation.utils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.os.Bundle;
-
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.SmallTest;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Unit tests for {@link BundleMarshaller}.
- */
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class BundleMarshallerTest {
-    private final BundleMarshaller mBundleMarshaller = new BundleMarshaller();
-
-    /**
-     * A random test value with a mix of primitives, null and non-null data.
-     */
-    private static final TestBundlable TEST_VALUE = new TestBundlable()
-            .setInt(1)
-            .setString("TEST")
-            .setBundlableValue(new TestBundlable()
-                    .setEnumValue(TestBundlable.TestEnum.VALUE1));
-
-    /**
-     * Tests that null values are serialized as expected.
-     */
-    @Test
-    public void serialization_nullCase() {
-        new TestBundlable().toBundle(mBundleMarshaller);
-
-        Bundle data = mBundleMarshaller.getBundle();
-        assertTrue(data.containsKey("intValue"));
-        assertEquals(0, data.getInt("intValue"));
-        assertNull(data.getString("stringValue"));
-        assertNull(data.getString("enumValue"));
-        assertTrue(data.getBoolean("bundlableValue._isNull"));
-        assertEquals(-1, data.getInt("bundlableListValue._size"));
-    }
-
-    /**
-     * Tests that nested {@link Bundlable}s are serialized as expected.
-     */
-    @Test
-    public void serialization_nestedBundlable() {
-        String stringValue = "TEST";
-        int intValue = 1;
-
-        new TestBundlable()
-                .setBundlableValue(new TestBundlable()
-                        .setInt(intValue)
-                        .setString(stringValue))
-                .toBundle(mBundleMarshaller);
-
-        Bundle data = mBundleMarshaller.getBundle();
-        assertTrue(data.containsKey("bundlableValue._isNull"));
-        assertFalse(data.getBoolean("bundlableValue._isNull"));
-        assertEquals(intValue, data.getInt("bundlableValue.intValue"));
-        assertEquals(stringValue, data.getString("bundlableValue.stringValue"));
-    }
-
-    /**
-     * Tests the correct serialization of a list of size 0.
-     */
-    @Test
-    public void listSerialization_listOfSize0() {
-        TestBundlable value = new TestBundlable().setListValue(new ArrayList<>());
-        value.toBundle(mBundleMarshaller);
-        Bundle data = mBundleMarshaller.getBundle();
-        assertEquals(0, data.getInt("bundlableListValue._size"));
-    }
-
-    /**
-     * Tests the correct serialization of a list of size n.
-     */
-    @Test
-    public void listSerialization_listOfSizeN() {
-        TestBundlable value = new TestBundlable().setListValue(Arrays.asList(
-                new TestBundlable().setInt(1),
-                new TestBundlable().setInt(2),
-                new TestBundlable().setInt(3)));
-        Bundle data = mBundleMarshaller.getBundle();
-        value.toBundle(mBundleMarshaller);
-        assertEquals(3, data.getInt("bundlableListValue._size"));
-        assertEquals(1, data.getInt("bundlableListValue.0.intValue"));
-        assertEquals(2, data.getInt("bundlableListValue.1.intValue"));
-        assertEquals(3, data.getInt("bundlableListValue.2.intValue"));
-    }
-
-    @Test
-    public void listSerialization_removingElementsInPlace() {
-        // Serialize and deserialize a list of a certain size
-        List<TestBundlable> mutableList = new ArrayList<>(Arrays.asList(
-                new TestBundlable().setInt(1),
-                new TestBundlable().setInt(2),
-                new TestBundlable().setInt(3)));
-        TestBundlable out = new TestBundlable().setListValue(mutableList);
-        TestBundlable in = new TestBundlable();
-        out.toBundle(mBundleMarshaller);
-        in.fromBundle(mBundleMarshaller);
-        assertEquals(out, in);
-
-        // Remove some elements and check that they are correctly removed during deserialization
-        mutableList.remove(0);
-        out.toBundle(mBundleMarshaller);
-        in.fromBundle(mBundleMarshaller);
-        assertEquals(out, in);
-    }
-
-    /**
-     * Tests that {@link BundleMarshaller#getDelta()} returns the same value as
-     * {@link BundleMarshaller#getBundle()} during the initial serialization.
-     */
-    @Test
-    public void deltaSerialization_equalsFullDataIfNotReset() {
-        TEST_VALUE.toBundle(mBundleMarshaller);
-        Bundle data = mBundleMarshaller.getBundle();
-        Bundle delta = mBundleMarshaller.getDelta();
-        assertBundlesEqual(data, delta);
-    }
-
-    /**
-     * Tests that {@link BundleMarshaller#getDelta()} is empty if no data is modified between
-     * serializations.
-     */
-    @Test
-    public void deltaSerialization_emptyIfNoDataIsModified() {
-        TEST_VALUE.toBundle(mBundleMarshaller);
-        mBundleMarshaller.resetDelta();
-        TEST_VALUE.toBundle(mBundleMarshaller);
-        Bundle delta = mBundleMarshaller.getDelta();
-        assertEquals(0, delta.size());
-    }
-
-    /**
-     * Tests that {@link BundleMarshaller#getDelta()} returns only the data that has been modified
-     * between two serializations.
-     */
-    @Test
-    public void deltaSerialization_onlyContainsModifiedData() {
-        // Serialize some base data
-        TestBundlable testValue = new TestBundlable()
-                .setInt(1)
-                .setString("TEST")
-                .setBundlableValue(new TestBundlable()
-                        .setEnumValue(TestBundlable.TestEnum.VALUE1));
-        testValue.toBundle(mBundleMarshaller);
-
-        // Reset change tracking and re-serialize after making some changes.
-        mBundleMarshaller.resetDelta();
-        testValue.setInt(2).setString(null);
-        testValue.mBundableValue.setEnumValue(TestBundlable.TestEnum.VALUE2);
-        testValue.toBundle(mBundleMarshaller);
-
-        Bundle expectedDelta = new Bundle();
-        expectedDelta.putInt("intValue", testValue.mIntValue);
-        expectedDelta.putString("stringValue", testValue.mStringValue);
-        expectedDelta.putString("bundlableValue.enumValue",
-                testValue.mBundableValue.mEnumValue.name());
-
-        Bundle delta = mBundleMarshaller.getDelta();
-        assertBundlesEqual(expectedDelta, delta);
-    }
-
-    /**
-     * Asserts that the provided {@link Bundle}s are equal. It throws {@link AssertionError}
-     * otherwise.
-     */
-    private void assertBundlesEqual(Bundle expected, Bundle actual) {
-        if (expected == null && actual == null) {
-            return;
-        }
-        if (expected == null || actual == null) {
-            fail(String.format("Expected %s value but found %s",
-                    expected != null ? "non-null" : "null",
-                    actual != null ? "non-null" : "null"));
-        }
-        if (!expected.keySet().equals(actual.keySet())) {
-            fail(String.format("Expected keys: %s, but found keys: %s",
-                    expected.keySet().stream().sorted().collect(Collectors.joining(",")),
-                    actual.keySet().stream().sorted().collect(Collectors.joining(","))));
-        }
-        for (String key : expected.keySet()) {
-            assertEquals(String.format("Expected '%s' at key '%s' but found '%s",
-                            expected.get(key), key, actual.get(key)),
-                    expected.get(key),
-                    actual.get(key));
-        }
-    }
-}
diff --git a/car/core/src/androidTest/java/androidx/car/navigation/utils/TestBundlable.java b/car/core/src/androidTest/java/androidx/car/navigation/utils/TestBundlable.java
deleted file mode 100644
index 1ca19d3..0000000
--- a/car/core/src/androidTest/java/androidx/car/navigation/utils/TestBundlable.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.car.navigation.utils;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Reference implementation of a {@link Bundlable}
- */
-class TestBundlable implements Bundlable {
-    private static final String INT_VALUE_KEY = "intValue";
-    private static final String STRING_VALUE_KEY = "stringValue";
-    private static final String ENUM_VALUE_KEY = "enumValue";
-    private static final String BUNDLABLE_VALUE_KEY = "bundlableValue";
-    private static final String BUNDLABLE_LIST_VALUE_KEY = "bundlableListValue";
-
-    enum TestEnum {
-        VALUE1,
-        VALUE2,
-        VALUE3,
-    }
-
-    int mIntValue;
-    String mStringValue;
-    TestEnum mEnumValue;
-    TestBundlable mBundableValue;
-    List<TestBundlable> mListValue;
-
-    @Override
-    public void toBundle(BundleMarshaller out) {
-        out.putInt(INT_VALUE_KEY, mIntValue);
-        out.putString(STRING_VALUE_KEY, mStringValue);
-        out.putEnum(ENUM_VALUE_KEY, mEnumValue);
-        out.putBundlable(BUNDLABLE_VALUE_KEY, mBundableValue);
-        out.putBundlableList(BUNDLABLE_LIST_VALUE_KEY, mListValue);
-    }
-
-    @Override
-    public void fromBundle(BundleMarshaller in) {
-        mIntValue = in.getInt(INT_VALUE_KEY);
-        mStringValue = in.getString(STRING_VALUE_KEY);
-        mEnumValue = in.getEnum(ENUM_VALUE_KEY, TestEnum.class);
-        mBundableValue = in.getBundlable(BUNDLABLE_VALUE_KEY, mBundableValue, TestBundlable::new);
-        mListValue = in.getBundlableList(BUNDLABLE_LIST_VALUE_KEY, mListValue, TestBundlable::new);
-    }
-
-    public TestBundlable setInt(int value) {
-        mIntValue = value;
-        return this;
-    }
-
-    public TestBundlable setString(String value) {
-        mStringValue = value;
-        return this;
-    }
-
-    public TestBundlable setEnumValue(TestEnum value) {
-        mEnumValue = value;
-        return this;
-    }
-
-    public TestBundlable setBundlableValue(TestBundlable value) {
-        mBundableValue = value;
-        return this;
-    }
-
-    public TestBundlable setListValue(List<TestBundlable> value) {
-        mListValue = value;
-        return this;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        TestBundlable that = (TestBundlable) o;
-        return mIntValue == that.mIntValue
-                && Objects.equals(mStringValue, that.mStringValue)
-                && mEnumValue == that.mEnumValue
-                && Objects.equals(mBundableValue, that.mBundableValue)
-                && Objects.equals(mListValue, that.mListValue);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(mIntValue, mStringValue, mEnumValue, mBundableValue, mListValue);
-    }
-}
diff --git a/car/core/src/androidTest/java/androidx/car/navigation/utils/TestBundlableNewVersion.java b/car/core/src/androidTest/java/androidx/car/navigation/utils/TestBundlableNewVersion.java
deleted file mode 100644
index 58ee6f6..0000000
--- a/car/core/src/androidTest/java/androidx/car/navigation/utils/TestBundlableNewVersion.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.car.navigation.utils;
-
-import androidx.annotation.NonNull;
-import androidx.core.util.Preconditions;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Example of a version change. This is a copy of {@link TestBundlable} but with one field
- * deprecated ({@link TestBundlable#mStringValue}) and one field added
- * ({@link TestBundlableNewVersion#mNewValue})
- */
-class TestBundlableNewVersion implements Bundlable {
-    private static final String INT_VALUE_KEY = "intValue";
-    // In this version of TestBundlable, mStringValue field has been deprecated, and its key should
-    // not be re-used.
-    // private static final String STRING_VALUE_KEY = "stringValue";
-    private static final String ENUM_VALUE_KEY = "enumValue";
-    private static final String BUNDLABLE_VALUE_KEY = "bundlableValue";
-    private static final String BUNDLABLE_LIST_VALUE_KEY = "bundlableListValue";
-    private static final String NEW_VALUE_KEY = "newValue";
-
-    enum TestEnum {
-        VALUE1,
-        VALUE2,
-        VALUE3,
-    }
-
-    public static final String DEFAULT_NEW_VALUE = "TEST_V2";
-
-    int mIntValue;
-    TestEnum mEnumValue;
-    // In this version of TestBundlable, we simulate mStringValue being deprecated.
-    // String mStringValue;
-    TestBundlableNewVersion mBundableValue;
-    List<TestBundlableNewVersion> mListValue;
-    // In this version of TestBundlable, we simulate the creation of a new mandatory field.
-    @NonNull
-    String mNewValue;
-
-    TestBundlableNewVersion() {
-        mNewValue = DEFAULT_NEW_VALUE;
-    }
-
-    @Override
-    public void toBundle(@NonNull BundleMarshaller out) {
-        out.putInt(INT_VALUE_KEY, mIntValue);
-        // dest.putString(STRING_VALUE_KEY, mStringValue) is now deprecated.
-        out.putEnum(ENUM_VALUE_KEY, mEnumValue);
-        out.putBundlable(BUNDLABLE_VALUE_KEY, mBundableValue);
-        out.putBundlableList(BUNDLABLE_LIST_VALUE_KEY, mListValue);
-        // new required value
-        out.putString(NEW_VALUE_KEY, mNewValue);
-    }
-
-    @Override
-    public void fromBundle(@NonNull BundleMarshaller in) {
-        mIntValue = in.getInt(INT_VALUE_KEY);
-        // mStringValue = in.getString(STRING_VALUE_KEY) is now deprecated.
-        mEnumValue = in.getEnum(ENUM_VALUE_KEY, TestEnum.class);
-        mBundableValue = in.getBundlable(BUNDLABLE_VALUE_KEY, mBundableValue,
-                TestBundlableNewVersion::new);
-        mListValue = in.getBundlableList(BUNDLABLE_LIST_VALUE_KEY, mListValue,
-                TestBundlableNewVersion::new);
-        // new required value with a mandatory default
-        mNewValue = in.getStringNonNull(NEW_VALUE_KEY, DEFAULT_NEW_VALUE);
-    }
-
-    public TestBundlableNewVersion setInt(int value) {
-        mIntValue = value;
-        return this;
-    }
-
-    public TestBundlableNewVersion setEnumValue(TestEnum value) {
-        mEnumValue = value;
-        return this;
-    }
-
-    public TestBundlableNewVersion setBundlableValue(TestBundlableNewVersion value) {
-        mBundableValue = value;
-        return this;
-    }
-
-    public TestBundlableNewVersion setListValue(List<TestBundlableNewVersion> value) {
-        mListValue = value;
-        return this;
-    }
-
-    public TestBundlableNewVersion setNewValue(@NonNull String value) {
-        Preconditions.checkNotNull(value);
-        mNewValue = value;
-        return this;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        TestBundlableNewVersion that = (TestBundlableNewVersion) o;
-        return mIntValue == that.mIntValue
-                && mEnumValue == that.mEnumValue
-                && Objects.equals(mBundableValue, that.mBundableValue)
-                && Objects.equals(mListValue, that.mListValue)
-                && Objects.equals(mNewValue, that.mNewValue);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hash(mIntValue, mEnumValue, mBundableValue, mListValue, mNewValue);
-    }
-}
diff --git a/car/core/src/main/java/androidx/car/navigation/utils/Bundlable.java b/car/core/src/main/java/androidx/car/navigation/utils/Bundlable.java
deleted file mode 100644
index d8a2249..0000000
--- a/car/core/src/main/java/androidx/car/navigation/utils/Bundlable.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.car.navigation.utils;
-
-import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.RestrictTo;
-
-/**
- * Interface for classes whose instances can be written to and restored from a {@link Bundle}.
- * Classes implementing the {@link Bundlable} interface must also provide a public default
- * constructor, or a constructor that accepts {@link BundleMarshaller} as its only parameter.
- * <p>
- * This serialization protocol is designed to:
- * <ul>
- * <li>provide backward/forward compatibility between producers and consumers (following the
- * Protocol Buffers pattern).
- * <li>minimize the number of objects being allocated during both serialization and deserialization.
- * </ul>
- * <p>
- * Implementations of this interface should comply to the following rules:
- * <ul>
- * <li>Fields should be serialized and deserialized using {@link BundleMarshaller} "put" and
- * "get" methods.
- * <li>Marshalling keys must be lower camel case alphanumerical identifiers (i.e.: "distanceUnit").
- * (symbols such as "." and "_" are reserved by the system).
- * <li>Field types should not be modified between versions of {@link Bundlable} objects to provide
- * backward and forward compatibility. Only deprecations and additions are allowed.
- * <li>When a field is deprecated, its marshalling key shouldn't be reused by any new field.
- * <li>Enums are marshalled using {@link Enum#name()}. Because of this, enum values should not be
- * renamed. Because enum values could be added or deprecated, clients must be prepared to accept
- * null or a default value in case the server sends a value it doesn't know.
- * <li>Fields annotated with {@link androidx.annotation.NonNull} should not be deprecated
- * (as clients might not be prepared for their absence). Implementations of this interface should
- * enforce this constraint, i.e. by initializing these fields at class instantiation, and using
- * {@link androidx.core.util.Preconditions#checkNotNull(Object)} to prevent null values. If a new
- * {@link androidx.annotation.NonNull} field is added on an existing {@link Bundlable}, the
- * deserialization must provide a default value for it (as existing services won't provide values
- * for it until they are updated).
- * </ul>
- * The following is an example of the suggested implementation:
- * <pre>
- * public class MyClass implements Bundlable {
- *     private static final String FOO_VALUE_KEY = "fooValue";
- *     private static final String BAR_VALUE_KEY = "barValue";
- *
- *     public enum MyEnum {
- *         VALUE_1,
- *         VALUE_2
- *     }
- *
- *     public String mFooValue;
- *     public MyEnum mBarValue;
- *
- *     &#064;Override
- *     public void toBundle(@NonNull BundleMarshaller out) {
- *         out.putString(FOO_VALUE_KEY, mFooValue);
- *         out.putEnum(BAR_VALUE_KEY, mBarValue);
- *     }
- *
- *     &#064;Override
- *     public void fromBundle(@NonNull BundleMarshaller in) {
- *         mFooValue = in.getString(FOO_VALUE_KEY);
- *         mBarValue = in.getEnum(BAR_VALUE_KEY, MyEnum.class);
- *     }
- * }
- * </pre>
- *
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP_PREFIX)
-public interface Bundlable {
-    /**
-     * Serializes this object into a {@link BundleMarshaller} by writing all its fields to it.
-     */
-    void toBundle(@NonNull BundleMarshaller out);
-
-    /**
-     * Deserializes this object from a {@link BundleMarshaller} by reading all its fields from it.
-     */
-    void fromBundle(@NonNull BundleMarshaller in);
-}
diff --git a/car/core/src/main/java/androidx/car/navigation/utils/BundleMarshaller.java b/car/core/src/main/java/androidx/car/navigation/utils/BundleMarshaller.java
deleted file mode 100644
index 99eb510..0000000
--- a/car/core/src/main/java/androidx/car/navigation/utils/BundleMarshaller.java
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.car.navigation.utils;
-
-import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.annotation.RestrictTo;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.function.Supplier;
-
-/**
- * Class responsible for serializing and deserializing data into a {@link Bundle}. It also
- * provides a way to detect what items in the {@link Bundle} have been modified during
- * marshalling.
- * <p>
- * A single {@link BundleMarshaller} can be re-used to serialize or deserialize data multiple times.
- * Similarity, deserialization can be done in-place, updating existing {@link Bundlable}s. This
- * reduces the number of instances being allocated.
- * <p>
- * When serializing, use {@link #resetBundle()} before marshalling and {@link #getBundle()} to
- * obtain an snap-shot of the serialized content. Or use {@link #resetDelta()} and
- * {@link #getDelta()} to obtain a {@link Bundle} representing the patch between the last and
- * the new serialized data.
- * <p>
- * When deserializing, use {@link #setBundle(Bundle)} to deserialize a {@link Bundle} containing an
- * snap-shot, or {@link #applyDelta(Bundle)} to process a patch from the last deserialized data.
- * <p>
- * Keys used in the "get" and "put" methods must be lower camel case alphanumerical identifiers
- * (e.g.: "distanceUnit"). Symbols like "." and "_" are reserved by the system.
- * <p>
- * When deserializing {@link List} objects, this class assumes that they implement random access
- * (e.g. {@link ArrayList}), or they are relatively small (see more details at
- * {@link #trimList(List, int)})
- *
- * @hide
- */
-@RestrictTo(LIBRARY_GROUP_PREFIX)
-public class BundleMarshaller {
-    /**
-     * Separator used to concatenate identifiers when marshalling non-primitive types (e.g. lists
-     * or {@link Bundlable}s).
-     */
-    private static final String KEY_SEPARATOR = ".";
-    /**
-     * Identifier used to record if a given non-primitive field is null or not. This allows
-     * serializing null objects without the need of using reflection or static methods.
-     */
-    private static final String IS_NULL_KEY = "_isNull";
-    /**
-     * Identifier used to record the length of a collection. This allows serializing changes to the
-     * length of a collection without having to remove elements or having to iterate over every
-     * possible collection key.
-     */
-    private static final String SIZE_KEY = "_size";
-    /**
-     * Special value for {@link #SIZE_KEY} to serialize a null collection.
-     */
-    private static final int NULL_SIZE = -1;
-
-    private Bundle mBundle = new Bundle();
-    private String mKeyPrefix = "";
-    private final Bundle mBundleDelta = new Bundle();
-
-    /**
-     * Returns data serialized since the last time this instance was constructed, or
-     * {@link #resetBundle()} was called.
-     */
-    public Bundle getBundle() {
-        return mBundle;
-    }
-
-    /**
-     * Resets this {@link BundleMarshaller} causing {@link #getBundle()} to return an empty
-     * {@link Bundle} until the next marshalling is executed. This can be used occasionally to
-     * remove unused keys in the {@link Bundle}.
-     */
-    public void resetBundle() {
-        mBundle.clear();
-    }
-
-    /**
-     * Replaces the {@link Bundle} to serialize into or deserialize from.
-     */
-    public void setBundle(Bundle bundle) {
-        mBundle = bundle;
-    }
-
-    /**
-     * Gets a {@link Bundle} containing only the entries of {@link #getBundle()} that were modified
-     * since this instance was constructed, or {@link #resetDelta()} was called.
-     */
-    public Bundle getDelta() {
-        return mBundleDelta;
-    }
-
-    /**
-     * Merges the provided {@link Bundle} on top of the one stored in this {@link BundleMarshaller}.
-     *
-     * @param delta a {@link Bundle} containing entries to be updated on one stored in this
-     *              {@link BundleMarshaller} instance. Such {@link Bundle} can be produced by
-     *              using the {@link #resetDelta()} and {@link #getDelta()} methods during data
-     *              serialization.
-     */
-    public void applyDelta(Bundle delta) {
-        mBundle.putAll(delta);
-    }
-
-    /**
-     * Resets tracking of modified entries, causing {@link #getDelta()} to return an empty
-     * {@link Bundle} until the next marshalling is executed. This can be used between
-     * serializations make {@link #getDelta()} return only the differences.
-     */
-    public void resetDelta() {
-        mBundleDelta.clear();
-    }
-
-    /**
-     * Inserts an int value, replacing any existing value for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param value an int
-     */
-    public void putInt(@NonNull String key, int value) {
-        String mangledKey = getMangledKey(key);
-        if (!mBundle.containsKey(mangledKey) || mBundle.getInt(mangledKey) != value) {
-            mBundleDelta.putInt(mangledKey, value);
-            mBundle.putInt(mangledKey, value);
-        }
-    }
-
-    /**
-     * Returns the value associated with the given key, or 0 if no mapping of the desired type
-     * exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @return an int
-     */
-    public int getInt(@NonNull String key) {
-        return mBundle.getInt(getMangledKey(key));
-    }
-
-    /**
-     * Inserts a float value, replacing any existing value for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param value a float
-     */
-    public void putFloat(@NonNull String key, float value) {
-        String mangledKey = getMangledKey(key);
-        if (!mBundle.containsKey(mangledKey)
-                || Float.compare(mBundle.getFloat(mangledKey), value) != 0) {
-            mBundleDelta.putFloat(mangledKey, value);
-            mBundle.putFloat(mangledKey, value);
-        }
-    }
-
-    /**
-     * Returns the value associated with the given key, or 0.0f if no mapping of the desired type
-     * exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @return a float
-     */
-    public float getFloat(@NonNull String key) {
-        return mBundle.getFloat(getMangledKey(key));
-    }
-
-    /**
-     * Inserts a double value, replacing any existing value for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param value a double
-     */
-    public void putDouble(@NonNull String key, double value) {
-        String mangledKey = getMangledKey(key);
-        if (!mBundle.containsKey(mangledKey)
-                || Double.compare(mBundle.getDouble(mangledKey), value) != 0) {
-            mBundleDelta.putDouble(mangledKey, value);
-            mBundle.putDouble(mangledKey, value);
-        }
-    }
-
-    /**
-     * Returns the value associated with the given key, or 0.0 if no mapping of the desired type
-     * exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @return a double
-     */
-    public double getDouble(@NonNull String key) {
-        return mBundle.getDouble(getMangledKey(key));
-    }
-
-    /**
-     * Inserts a boolean value, replacing any existing value for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param value a boolean
-     */
-    public void putBoolean(@NonNull String key, boolean value) {
-        String mangledKey = getMangledKey(key);
-        if (!mBundle.containsKey(mangledKey) || mBundle.getBoolean(mangledKey) != value) {
-            mBundleDelta.putBoolean(mangledKey, value);
-            mBundle.putBoolean(mangledKey, value);
-        }
-    }
-
-    /**
-     * Returns the value associated with the given key, or false if no mapping of the desired type
-     * exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @return a boolean
-     */
-    public boolean getBoolean(@NonNull String key) {
-        return mBundle.getBoolean(getMangledKey(key));
-    }
-
-    /**
-     * Inserts a string value, replacing any existing value for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param value a string, or null
-     */
-    public void putString(@NonNull String key, @Nullable String value) {
-        String mangledKey = getMangledKey(key);
-        if (!mBundle.containsKey(mangledKey)
-                || !Objects.equals(mBundle.getString(mangledKey), value)) {
-            mBundleDelta.putString(mangledKey, value);
-            mBundle.putString(mangledKey, value);
-        }
-    }
-
-    /**
-     * Returns the value associated with the given key, or null if no mapping of the desired type
-     * exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @return a string, or null
-     */
-    @Nullable
-    public String getString(@NonNull String key) {
-        return mBundle.getString(getMangledKey(key));
-    }
-
-    /**
-     * Returns the value associated with the given key, or the provided default value if no mapping
-     * of the desired type exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param defaultValue value to return if key does not exist or if a null value is associated
-     *                     with the given key.
-     * @return a string
-     */
-    @NonNull
-    public String getStringNonNull(@NonNull String key, @NonNull String defaultValue) {
-        return mBundle.getString(getMangledKey(key), defaultValue);
-    }
-
-    /**
-     * Inserts an enum value, replacing any existing value for the given key. The provided enum
-     * will be serialized as a string using {@link Enum#name()}.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param value an enum, or null
-     */
-    public <T extends Enum<T>> void putEnum(@NonNull String key, @Nullable T value) {
-        putString(key, value != null ? value.name() : null);
-    }
-
-    /**
-     * Returns the value associated with the given key, or null if no mapping of the desired type
-     * exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param clazz {@link Enum} class to be used to deserialize the value.
-     * @param <T> {@link Enum} type to be returned.
-     * @return an enum, or null
-     */
-    @Nullable
-    public <T extends Enum<T>> T getEnum(@NonNull String key, @NonNull Class<T> clazz) {
-        String name = getString(key);
-        try {
-            return name != null ? Enum.valueOf(clazz, name) : null;
-        } catch (IllegalArgumentException ex) {
-            return null;
-        }
-    }
-
-    /**
-     * Returns the value associated with the given key, or the provided default value if no mapping
-     * of the desired type exists for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param clazz {@link Enum} class to be used to deserialize the value.
-     * @param defaultValue value to return if key does not exist or if a null value is associated
-     *                     with the given key.
-     * @param <T> {@link Enum} type to be returned.
-     * @return an enum
-     */
-    @NonNull
-    public <T extends Enum<T>> T getEnumNonNull(@NonNull String key, @NonNull Class<T> clazz,
-            @NonNull T defaultValue) {
-        T result = getEnum(key, clazz);
-        return result != null ? result : defaultValue;
-    }
-
-    /**
-     * Inserts a {@link Bundlable} value, replacing any existing value for the given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param value a {@link Bundlable}, or null
-     */
-    public <T extends Bundlable> void putBundlable(@NonNull String key, @Nullable T value) {
-        withKeyPrefix(key, () -> {
-            putBoolean(IS_NULL_KEY, value == null);
-            if (value != null) {
-                value.toBundle(this);
-            }
-        });
-    }
-
-    /**
-     * Returns the value associated with the given key, or null if no mapping of the desired type
-     * exists for the given key. If a non-null "current" instance is provided, then the
-     * deserialization would be done in place. Otherwise, a new instance will be created using the
-     * provided factory.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param current current value (if available) to perform in-place deserialization, or null
-     * @param factory a {@link Supplier} capable of providing an instance of a {@link Bundlable} of
-     *                type T. The suggested implementation is to pass a reference to the default
-     *                constructor of that class.
-     * @param <T> {@link Bundlable} type to be returned.
-     * @return an instance of type T, or null
-     */
-    @Nullable
-    public <T extends Bundlable> T getBundlable(@NonNull String key, @Nullable T current,
-            @NonNull Supplier<T> factory) {
-        return withKeyPrefix(key, () -> {
-            if (getBoolean(IS_NULL_KEY)) {
-                return null;
-            }
-            T result = current != null ? current : factory.get();
-            result.fromBundle(this);
-            return result;
-        });
-    }
-
-    /**
-     * Returns the value associated with the given key, or a default value if no mapping of the
-     * desired type exists for the given key. If a non-null value is available, then such value
-     * will be deserialized in-place on the given "current" instance. Otherwise, a default value
-     * will be generated using the provided factory.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param current current value to perform in-place deserialization
-     * @param factory a {@link Supplier} capable of providing an instance of a {@link Bundlable} of
-     *                type T. The suggested implementation is to pass a reference to the default
-     *                constructor of that class.
-     * @param <T> {@link Bundlable} type to be returned.
-     * @return an instance of type T
-     */
-    @NonNull
-    public <T extends Bundlable> T getBundlableNonNull(@NonNull String key, @NonNull T current,
-            @NonNull Supplier<T> factory) {
-        T result = getBundlable(key, current, factory);
-        return result != null ? result : factory.get();
-    }
-
-    /**
-     * Inserts a {@link List} of {@link Bundlable} values, replacing any existing value for the
-     * given key.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param values a {@link List} of {@link Bundlable} values, or null
-     */
-    public <T extends Bundlable> void putBundlableList(@NonNull String key,
-            @Nullable List<T> values) {
-        withKeyPrefix(key, () -> {
-            putInt(SIZE_KEY, values != null ? values.size() : NULL_SIZE);
-            if (values != null) {
-                int pos = 0;
-                // Using for-each as the provided list might not implement random access (e.g. it
-                // might be a linked list).
-                for (T value : values) {
-                    putBundlable(String.valueOf(pos), value);
-                    pos++;
-                }
-            }
-        });
-    }
-
-    /**
-     * Returns the value associated with the given key, or null if no mapping of the desired type
-     * exists for the given key. If a non-null "current" list is provided, then the deserialization
-     * would be done in place. Otherwise, a new list will be created and items will be instantiated
-     * using the provided factory.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param current current value (if available) to perform in-place deserialization, or null
-     * @param factory a {@link Supplier} capable of providing an instance of a {@link Bundlable} of
-     *                type T. The suggested implementation is to pass a reference to the default
-     *                constructor of that class.
-     * @param <T> {@link Bundlable} type to be returned.
-     * @return a list of instances of type T, or null. The resulting list might contain null
-     *         elements.
-     */
-    @Nullable
-    public <T extends Bundlable> List<T> getBundlableList(@NonNull String key,
-            @Nullable List<T> current, @NonNull Supplier<T> factory) {
-        return withKeyPrefix(key, () -> {
-            int listSize = getInt(SIZE_KEY);
-            if (listSize == NULL_SIZE) {
-                return null;
-            }
-            List<T> result = current != null ? current : new ArrayList<>(listSize);
-            if (result.size() > listSize) {
-                result.subList(listSize, result.size()).clear();
-            }
-            for (int pos = 0; pos < listSize; pos++) {
-                String subKey = String.valueOf(pos);
-                if (pos < result.size()) {
-                    result.set(pos, getBundlable(subKey, result.get(pos), factory));
-                } else {
-                    result.add(getBundlable(String.valueOf(pos),
-                            null /* force the creation of a new instance */,
-                            factory));
-                }
-            }
-            return result;
-        });
-    }
-
-    /**
-     * Returns the value associated with the given key, or an empty list if no mapping of the
-     * desired type exists for the given key. If a non-null "current" list is provided, then the
-     * deserialization would be done in place. Otherwise, a new list will be created and items will
-     * be instantiated using the provided factory.
-     *
-     * @param key lower camel case alphanumerical identifier
-     * @param current current value (if available) to perform in-place deserialization, or null
-     * @param factory a {@link Supplier} capable of providing an instance of a {@link Bundlable} of
-     *                type T. The suggested implementation is to pass a reference to the default
-     *                constructor of that class.
-     * @param <T> {@link Bundlable} type to be returned.
-     * @return a list of instances of type T, or an empty list. The resulting list might contain
-     *         null elements.
-     */
-    @NonNull
-    public <T extends Bundlable> List<T> getBundlableListNonNull(@NonNull String key,
-            @NonNull List<T> current, @NonNull Supplier<T> factory) {
-        List<T> result = getBundlableList(key, current, factory);
-        return result != null ? result : new ArrayList<>();
-    }
-
-    /**
-     * Executes the given {@link Runnable} in a context where {@link #getMangledKey(String)}
-     * includes the given key as part of the prefix. Calls to this method can be nested (the
-     * provided {@link Runnable} can call to this method if needed). This method should be used when
-     * serializing or deserializing nested objects.
-     * <p>
-     * For example: calling to {@link #withKeyPrefix(String, Runnable)} with "foo" as key and
-     * a {@link Runnable} that calls {@link #getMangledKey(String)} with "bar" as key, will
-     * cause such {@link #getMangledKey(String)} call to return "foo.bar".
-     */
-    private void withKeyPrefix(@NonNull String key, @NonNull Runnable runnable) {
-        String originalKeyPrefix = mKeyPrefix;
-        mKeyPrefix = mKeyPrefix + key + KEY_SEPARATOR;
-        runnable.run();
-        mKeyPrefix = originalKeyPrefix;
-    }
-
-    /**
-     * Similar to {@link #withKeyPrefix(String, Runnable)} but allows returning a value.
-     */
-    private <X> X withKeyPrefix(@NonNull String key, @NonNull Supplier<X> supplier) {
-        String originalKeyPrefix = mKeyPrefix;
-        mKeyPrefix = mKeyPrefix + key + KEY_SEPARATOR;
-        X res = supplier.get();
-        mKeyPrefix = originalKeyPrefix;
-        return res;
-    }
-
-    /**
-     * Returns a composed key based on the given one and the current serialization/deserialization
-     * key prefix (initially empty). This prefix can be temporarily changed with
-     * {@link #withKeyPrefix(String, Runnable)} or {@link #withKeyPrefix(String, Supplier)}.
-     */
-    private String getMangledKey(@NonNull String key) {
-        return mKeyPrefix + key;
-    }
-}
diff --git a/compose/compose-compiler-hosted/integration-tests/build.gradle b/compose/compose-compiler-hosted/integration-tests/build.gradle
index 09d1295..9672fd6 100644
--- a/compose/compose-compiler-hosted/integration-tests/build.gradle
+++ b/compose/compose-compiler-hosted/integration-tests/build.gradle
@@ -37,7 +37,7 @@
 
     testImplementation(KOTLIN_STDLIB)
     testImplementation(project(":compose:compose-runtime"))
-    testImplementation(project(":ui-android-view-non-ir"))
+    testImplementation(project(":ui:ui-android-view-non-ir"))
     testImplementation(project(":compose:compose-compiler-hosted"))
 }
 
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentController.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentController.java
index 5b5e07f..476fc48 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentController.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentController.java
@@ -131,7 +131,8 @@
     @Nullable
     public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context,
             @NonNull AttributeSet attrs) {
-        return mHost.mFragmentManager.onCreateView(parent, name, context, attrs);
+        return mHost.mFragmentManager.getLayoutInflaterFactory()
+                .onCreateView(parent, name, context, attrs);
     }
 
     /**
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java
new file mode 100644
index 0000000..0a71329
--- /dev/null
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.fragment.app;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.R;
+
+class FragmentLayoutInflaterFactory implements LayoutInflater.Factory2 {
+    private static final String TAG = FragmentManagerImpl.TAG;
+
+    private final FragmentManagerImpl mFragmentManager;
+
+    FragmentLayoutInflaterFactory(FragmentManagerImpl fragmentManager) {
+        mFragmentManager = fragmentManager;
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull String name, @NonNull Context context,
+            @NonNull AttributeSet attrs) {
+        return onCreateView(null, name, context, attrs);
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context,
+            @NonNull AttributeSet attrs) {
+        if (!"fragment".equals(name)) {
+            return null;
+        }
+
+        String fname = attrs.getAttributeValue(null, "class");
+        TypedArray a =  context.obtainStyledAttributes(attrs, R.styleable.Fragment);
+        if (fname == null) {
+            fname = a.getString(R.styleable.Fragment_android_name);
+        }
+        int id = a.getResourceId(R.styleable.Fragment_android_id, View.NO_ID);
+        String tag = a.getString(R.styleable.Fragment_android_tag);
+        a.recycle();
+
+        if (fname == null || !FragmentFactory.isFragmentClass(context.getClassLoader(), fname)) {
+            // Invalid support lib fragment; let the device's framework handle it.
+            // This will allow android.app.Fragments to do the right thing.
+            return null;
+        }
+
+        int containerId = parent != null ? parent.getId() : 0;
+        if (containerId == View.NO_ID && id == View.NO_ID && tag == null) {
+            throw new IllegalArgumentException(attrs.getPositionDescription()
+                    + ": Must specify unique android:id, android:tag, or "
+                    + "have a parent with an id for " + fname);
+        }
+
+        // If we restored from a previous state, we may already have
+        // instantiated this fragment from the state and should use
+        // that instance instead of making a new one.
+        Fragment fragment = id != View.NO_ID ? mFragmentManager.findFragmentById(id) : null;
+        if (fragment == null && tag != null) {
+            fragment = mFragmentManager.findFragmentByTag(tag);
+        }
+        if (fragment == null && containerId != View.NO_ID) {
+            fragment = mFragmentManager.findFragmentById(containerId);
+        }
+
+        if (FragmentManagerImpl.DEBUG) {
+            Log.v(TAG, "onCreateView: id=0x"
+                    + Integer.toHexString(id) + " fname=" + fname
+                    + " existing=" + fragment);
+        }
+        if (fragment == null) {
+            fragment = mFragmentManager.getFragmentFactory().instantiate(
+                    context.getClassLoader(), fname);
+            fragment.mFromLayout = true;
+            fragment.mFragmentId = id != 0 ? id : containerId;
+            fragment.mContainerId = containerId;
+            fragment.mTag = tag;
+            fragment.mInLayout = true;
+            fragment.mFragmentManager = mFragmentManager;
+            fragment.mHost = mFragmentManager.mHost;
+            fragment.onInflate(mFragmentManager.mHost.getContext(), attrs,
+                    fragment.mSavedFragmentState);
+            mFragmentManager.addFragment(fragment, true);
+
+        } else if (fragment.mInLayout) {
+            // A fragment already exists and it is not one we restored from
+            // previous state.
+            throw new IllegalArgumentException(attrs.getPositionDescription()
+                    + ": Duplicate id 0x" + Integer.toHexString(id)
+                    + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId)
+                    + " with another fragment for " + fname);
+        } else {
+            // This fragment was retained from a previous instance; get it
+            // going now.
+            fragment.mInLayout = true;
+            fragment.mHost = mFragmentManager.mHost;
+            // Give the Fragment the attributes to initialize itself.
+            fragment.onInflate(mFragmentManager.mHost.getContext(), attrs,
+                    fragment.mSavedFragmentState);
+        }
+
+        // If we haven't finished entering the CREATED state ourselves yet,
+        // push the inflated child fragment along. This will ensureInflatedFragmentView
+        // at the right phase of the lifecycle so that we will have mView populated
+        // for compliant fragments below.
+        if (mFragmentManager.mCurState < Fragment.CREATED && fragment.mFromLayout) {
+            mFragmentManager.moveToState(fragment, Fragment.CREATED, 0, 0, false);
+        } else {
+            mFragmentManager.moveToState(fragment);
+        }
+
+        if (fragment.mView == null) {
+            throw new IllegalStateException("Fragment " + fname
+                    + " did not create a view.");
+        }
+        if (id != 0) {
+            fragment.mView.setId(id);
+        }
+        if (fragment.mView.getTag() == null) {
+            fragment.mView.setTag(tag);
+        }
+        return fragment.mView;
+    }
+}
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
index 00e8fb1..f1a3fcc 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentManagerImpl.java
@@ -23,11 +23,9 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.content.res.TypedArray;
 import android.os.Bundle;
 import android.os.Looper;
 import android.os.Parcelable;
-import android.util.AttributeSet;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.LayoutInflater;
@@ -73,14 +71,14 @@
 /**
  * Container for fragments associated with an activity.
  */
-final class FragmentManagerImpl extends FragmentManager implements LayoutInflater.Factory2 {
+final class FragmentManagerImpl extends FragmentManager {
     static boolean DEBUG = false;
     static final String TAG = "FragmentManager";
 
-    static final String TARGET_REQUEST_CODE_STATE_TAG = "android:target_req_state";
-    static final String TARGET_STATE_TAG = "android:target_state";
-    static final String VIEW_STATE_TAG = "android:view_state";
-    static final String USER_VISIBLE_HINT_TAG = "android:user_visible_hint";
+    private static final String TARGET_REQUEST_CODE_STATE_TAG = "android:target_req_state";
+    private static final String TARGET_STATE_TAG = "android:target_state";
+    private static final String VIEW_STATE_TAG = "android:view_state";
+    private static final String USER_VISIBLE_HINT_TAG = "android:user_visible_hint";
 
     private static final class FragmentLifecycleCallbacksHolder {
         final FragmentLifecycleCallbacks mCallback;
@@ -92,15 +90,18 @@
         }
     }
 
-    ArrayList<OpGenerator> mPendingActions;
-    boolean mExecutingActions;
+    private ArrayList<OpGenerator> mPendingActions;
+    private boolean mExecutingActions;
 
-    int mNextFragmentIndex = 0;
+    private int mNextFragmentIndex = 0;
 
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
     final ArrayList<Fragment> mAdded = new ArrayList<>();
     final HashMap<String, Fragment> mActive = new HashMap<>();
     ArrayList<BackStackRecord> mBackStack;
-    ArrayList<Fragment> mCreatedMenus;
+    private ArrayList<Fragment> mCreatedMenus;
+    private final FragmentLayoutInflaterFactory mLayoutInflaterFactory =
+            new FragmentLayoutInflaterFactory(this);
     private OnBackPressedDispatcher mOnBackPressedDispatcher;
     private final OnBackPressedCallback mOnBackPressedCallback =
             new OnBackPressedCallback(false) {
@@ -111,41 +112,42 @@
     };
 
     // Must be accessed while locked.
-    ArrayList<BackStackRecord> mBackStackIndices;
-    ArrayList<Integer> mAvailBackStackIndices;
+    private ArrayList<BackStackRecord> mBackStackIndices;
+    private ArrayList<Integer> mAvailBackStackIndices;
 
-    ArrayList<OnBackStackChangedListener> mBackStackChangeListeners;
+    private ArrayList<OnBackStackChangedListener> mBackStackChangeListeners;
     private final CopyOnWriteArrayList<FragmentLifecycleCallbacksHolder>
             mLifecycleCallbacks = new CopyOnWriteArrayList<>();
 
     int mCurState = Fragment.INITIALIZING;
     FragmentHostCallback<?> mHost;
     FragmentContainer mContainer;
-    Fragment mParent;
+    private Fragment mParent;
+    @SuppressWarnings("WeakerAccess") /* synthetic access */
     @Nullable
     Fragment mPrimaryNav;
 
-    boolean mNeedMenuInvalidate;
-    boolean mStateSaved;
-    boolean mStopped;
-    boolean mDestroyed;
-    boolean mHavePendingDeferredStart;
+    private boolean mNeedMenuInvalidate;
+    private boolean mStateSaved;
+    private boolean mStopped;
+    private boolean mDestroyed;
+    private boolean mHavePendingDeferredStart;
 
     // Temporary vars for removing redundant operations in BackStackRecords:
-    ArrayList<BackStackRecord> mTmpRecords;
-    ArrayList<Boolean> mTmpIsPop;
-    ArrayList<Fragment> mTmpAddedFragments;
+    private ArrayList<BackStackRecord> mTmpRecords;
+    private ArrayList<Boolean> mTmpIsPop;
+    private ArrayList<Fragment> mTmpAddedFragments;
 
     // Temporary vars for state save and restore.
-    Bundle mStateBundle = null;
-    SparseArray<Parcelable> mStateArray = null;
+    private Bundle mStateBundle = null;
+    private SparseArray<Parcelable> mStateArray = null;
 
     // Postponed transactions.
-    ArrayList<StartEnterTransitionListener> mPostponedTransactions;
+    private ArrayList<StartEnterTransitionListener> mPostponedTransactions;
 
     private FragmentManagerViewModel mNonConfig;
 
-    Runnable mExecCommit = new Runnable() {
+    private Runnable mExecCommit = new Runnable() {
         @Override
         public void run() {
             execPendingActions();
@@ -389,7 +391,7 @@
     }
 
     @NonNull
-    FragmentManagerViewModel getChildNonConfig(@NonNull Fragment f) {
+    private FragmentManagerViewModel getChildNonConfig(@NonNull Fragment f) {
         return mNonConfig.getChildNonConfig(f);
     }
 
@@ -575,12 +577,12 @@
         }
     }
 
-    static final Interpolator DECELERATE_QUINT = new DecelerateInterpolator(2.5f);
-    static final Interpolator DECELERATE_CUBIC = new DecelerateInterpolator(1.5f);
+    private static final Interpolator DECELERATE_QUINT = new DecelerateInterpolator(2.5f);
+    private static final Interpolator DECELERATE_CUBIC = new DecelerateInterpolator(1.5f);
 
-    static final int ANIM_DUR = 220;
+    private static final int ANIM_DUR = 220;
 
-    static AnimationOrAnimator makeOpenCloseAnimation(float startScale,
+    private static AnimationOrAnimator makeOpenCloseAnimation(float startScale,
                                                       float endScale, float startAlpha, float endAlpha) {
         AnimationSet set = new AnimationSet(false);
         ScaleAnimation scale = new ScaleAnimation(startScale, endScale, startScale, endScale,
@@ -595,14 +597,14 @@
         return new AnimationOrAnimator(set);
     }
 
-    static AnimationOrAnimator makeFadeAnimation(float start, float end) {
+    private static AnimationOrAnimator makeFadeAnimation(float start, float end) {
         AlphaAnimation anim = new AlphaAnimation(start, end);
         anim.setInterpolator(DECELERATE_CUBIC);
         anim.setDuration(ANIM_DUR);
         return new AnimationOrAnimator(anim);
     }
 
-    AnimationOrAnimator loadAnimation(Fragment fragment, int transit, boolean enter,
+    private AnimationOrAnimator loadAnimation(Fragment fragment, int transit, boolean enter,
                                       int transitionStyle) {
         int nextAnim = fragment.getNextAnim();
         // Clear the Fragment animation
@@ -706,7 +708,7 @@
         return null;
     }
 
-    public void performPendingDeferredStart(Fragment f) {
+    void performPendingDeferredStart(@NonNull Fragment f) {
         if (f.mDeferStart) {
             if (mExecutingActions) {
                 // Wait until we're done executing our pending transactions
@@ -1138,7 +1140,7 @@
         moveToState(f, mCurState, 0, 0, false);
     }
 
-    void ensureInflatedFragmentView(Fragment f) {
+    private void ensureInflatedFragmentView(Fragment f) {
         if (f.mFromLayout && !f.mPerformedCreateView) {
             f.performCreateView(f.performGetLayoutInflater(
                     f.mSavedFragmentState), null, f.mSavedFragmentState);
@@ -1164,7 +1166,7 @@
      * @param fragment The fragment with mHiddenChanged = true that should change its View's
      *                 visibility and start the show or hide animation.
      */
-    void completeShowHideFragment(final Fragment fragment) {
+    private void completeShowHideFragment(final Fragment fragment) {
         if (fragment.mView != null) {
             AnimationOrAnimator anim = loadAnimation(fragment, fragment.getNextTransition(),
                     !fragment.mHidden, fragment.getNextTransitionStyle());
@@ -1324,7 +1326,7 @@
         }
     }
 
-    void startPendingDeferredFragments() {
+    private void startPendingDeferredFragments() {
         for (Fragment f : mActive.values()) {
             if (f != null) {
                 performPendingDeferredStart(f);
@@ -1349,7 +1351,7 @@
         if (DEBUG) Log.v(TAG, "Added fragment to active set " + f);
     }
 
-    void makeInactive(Fragment f) {
+    private void makeInactive(Fragment f) {
         if (mActive.get(f.mWho) == null) {
             return;
         }
@@ -1376,7 +1378,7 @@
         f.initState();
     }
 
-    public void addFragment(Fragment fragment, boolean moveToStateNow) {
+    void addFragment(Fragment fragment, boolean moveToStateNow) {
         if (DEBUG) Log.v(TAG, "add: " + fragment);
         makeActive(fragment);
         if (!fragment.mDetached) {
@@ -1400,7 +1402,7 @@
         }
     }
 
-    public void removeFragment(Fragment fragment) {
+    void removeFragment(Fragment fragment) {
         if (DEBUG) Log.v(TAG, "remove: " + fragment + " nesting=" + fragment.mBackStackNesting);
         final boolean inactive = !fragment.isInBackStack();
         if (!fragment.mDetached || inactive) {
@@ -1421,7 +1423,7 @@
      *
      * @param fragment The fragment to be shown.
      */
-    public void hideFragment(Fragment fragment) {
+    void hideFragment(Fragment fragment) {
         if (DEBUG) Log.v(TAG, "hide: " + fragment);
         if (!fragment.mHidden) {
             fragment.mHidden = true;
@@ -1437,7 +1439,7 @@
      *
      * @param fragment The fragment to be shown.
      */
-    public void showFragment(Fragment fragment) {
+    void showFragment(Fragment fragment) {
         if (DEBUG) Log.v(TAG, "show: " + fragment);
         if (fragment.mHidden) {
             fragment.mHidden = false;
@@ -1447,7 +1449,7 @@
         }
     }
 
-    public void detachFragment(Fragment fragment) {
+    void detachFragment(Fragment fragment) {
         if (DEBUG) Log.v(TAG, "detach: " + fragment);
         if (!fragment.mDetached) {
             fragment.mDetached = true;
@@ -1465,7 +1467,7 @@
         }
     }
 
-    public void attachFragment(Fragment fragment) {
+    void attachFragment(Fragment fragment) {
         if (DEBUG) Log.v(TAG, "attach: " + fragment);
         if (fragment.mDetached) {
             fragment.mDetached = false;
@@ -1527,7 +1529,7 @@
         return null;
     }
 
-    public Fragment findFragmentByWho(@NonNull String who) {
+    Fragment findFragmentByWho(@NonNull String who) {
         for (Fragment f : mActive.values()) {
             if (f != null && (f = f.findFragmentByWho(who)) != null) {
                 return f;
@@ -1558,7 +1560,7 @@
      * @param allowStateLoss whether to allow loss of state information
      * @throws IllegalStateException if the activity has been destroyed
      */
-    public void enqueueAction(OpGenerator action, boolean allowStateLoss) {
+    void enqueueAction(OpGenerator action, boolean allowStateLoss) {
         if (!allowStateLoss) {
             checkStateLoss();
         }
@@ -1598,7 +1600,7 @@
         }
     }
 
-    public int allocBackStackIndex(BackStackRecord bse) {
+    int allocBackStackIndex(BackStackRecord bse) {
         synchronized (this) {
             if (mAvailBackStackIndices == null || mAvailBackStackIndices.size() <= 0) {
                 if (mBackStackIndices == null) {
@@ -1618,7 +1620,7 @@
         }
     }
 
-    public void setBackStackIndex(int index, BackStackRecord bse) {
+    private void setBackStackIndex(int index, BackStackRecord bse) {
         synchronized (this) {
             if (mBackStackIndices == null) {
                 mBackStackIndices = new ArrayList<>();
@@ -1643,7 +1645,7 @@
         }
     }
 
-    public void freeBackStackIndex(int index) {
+    private void freeBackStackIndex(int index) {
         synchronized (this) {
             mBackStackIndices.set(index, null);
             if (mAvailBackStackIndices == null) {
@@ -1689,7 +1691,7 @@
         }
     }
 
-    public void execSingleAction(OpGenerator action, boolean allowStateLoss) {
+    void execSingleAction(OpGenerator action, boolean allowStateLoss) {
         if (allowStateLoss && (mHost == null || mDestroyed)) {
             // This FragmentManager isn't attached, so drop the entire transaction.
             return;
@@ -2174,14 +2176,14 @@
         return didSomething;
     }
 
-    void doPendingDeferredStart() {
+    private void doPendingDeferredStart() {
         if (mHavePendingDeferredStart) {
             mHavePendingDeferredStart = false;
             startPendingDeferredFragments();
         }
     }
 
-    void reportBackStackChanged() {
+    private void reportBackStackChanged() {
         if (mBackStackChangeListeners != null) {
             for (int i=0; i<mBackStackChangeListeners.size(); i++) {
                 mBackStackChangeListeners.get(i).onBackStackChanged();
@@ -2196,9 +2198,9 @@
         mBackStack.add(state);
     }
 
-    @SuppressWarnings("unused")
-    boolean popBackStackState(ArrayList<BackStackRecord> records, ArrayList<Boolean> isRecordPop,
-                              String name, int id, int flags) {
+    @SuppressWarnings({"unused", "WeakerAccess"}) /* synthetic access */
+    boolean popBackStackState(ArrayList<BackStackRecord> records,
+            ArrayList<Boolean> isRecordPop, String name, int id, int flags) {
         if (mBackStack == null) {
             return false;
         }
@@ -2266,7 +2268,7 @@
         return mNonConfig.getSnapshot();
     }
 
-    void saveFragmentViewState(Fragment f) {
+    private void saveFragmentViewState(Fragment f) {
         if (f.mInnerView == null) {
             return;
         }
@@ -2282,7 +2284,7 @@
         }
     }
 
-    Bundle saveFragmentBasicState(Fragment f) {
+    private Bundle saveFragmentBasicState(Fragment f) {
         Bundle result = null;
 
         if (mStateBundle == null) {
@@ -2560,7 +2562,7 @@
         values.removeAll(Collections.singleton(null));
     }
 
-    public void attachController(@NonNull FragmentHostCallback<?> host,
+    void attachController(@NonNull FragmentHostCallback<?> host,
             @NonNull FragmentContainer container, @Nullable final Fragment parent) {
         if (mHost != null) throw new IllegalStateException("Already attached");
         mHost = host;
@@ -2591,7 +2593,7 @@
         }
     }
 
-    public void noteStateNotSaved() {
+    void noteStateNotSaved() {
         mStateSaved = false;
         mStopped = false;
         final int addedCount = mAdded.size();
@@ -2603,44 +2605,44 @@
         }
     }
 
-    public void dispatchCreate() {
+    void dispatchCreate() {
         mStateSaved = false;
         mStopped = false;
         dispatchStateChange(Fragment.CREATED);
     }
 
-    public void dispatchActivityCreated() {
+    void dispatchActivityCreated() {
         mStateSaved = false;
         mStopped = false;
         dispatchStateChange(Fragment.ACTIVITY_CREATED);
     }
 
-    public void dispatchStart() {
+    void dispatchStart() {
         mStateSaved = false;
         mStopped = false;
         dispatchStateChange(Fragment.STARTED);
     }
 
-    public void dispatchResume() {
+    void dispatchResume() {
         mStateSaved = false;
         mStopped = false;
         dispatchStateChange(Fragment.RESUMED);
     }
 
-    public void dispatchPause() {
+    void dispatchPause() {
         dispatchStateChange(Fragment.STARTED);
     }
 
-    public void dispatchStop() {
+    void dispatchStop() {
         mStopped = true;
         dispatchStateChange(Fragment.ACTIVITY_CREATED);
     }
 
-    public void dispatchDestroyView() {
+    void dispatchDestroyView() {
         dispatchStateChange(Fragment.CREATED);
     }
 
-    public void dispatchDestroy() {
+    void dispatchDestroy() {
         mDestroyed = true;
         execPendingActions();
         dispatchStateChange(Fragment.INITIALIZING);
@@ -2665,7 +2667,7 @@
         execPendingActions();
     }
 
-    public void dispatchMultiWindowModeChanged(boolean isInMultiWindowMode) {
+    void dispatchMultiWindowModeChanged(boolean isInMultiWindowMode) {
         for (int i = mAdded.size() - 1; i >= 0; --i) {
             final Fragment f = mAdded.get(i);
             if (f != null) {
@@ -2674,7 +2676,7 @@
         }
     }
 
-    public void dispatchPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+    void dispatchPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
         for (int i = mAdded.size() - 1; i >= 0; --i) {
             final Fragment f = mAdded.get(i);
             if (f != null) {
@@ -2683,7 +2685,7 @@
         }
     }
 
-    public void dispatchConfigurationChanged(@NonNull Configuration newConfig) {
+    void dispatchConfigurationChanged(@NonNull Configuration newConfig) {
         for (int i = 0; i < mAdded.size(); i++) {
             Fragment f = mAdded.get(i);
             if (f != null) {
@@ -2692,7 +2694,7 @@
         }
     }
 
-    public void dispatchLowMemory() {
+    void dispatchLowMemory() {
         for (int i = 0; i < mAdded.size(); i++) {
             Fragment f = mAdded.get(i);
             if (f != null) {
@@ -2701,7 +2703,7 @@
         }
     }
 
-    public boolean dispatchCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
+    boolean dispatchCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
         if (mCurState < Fragment.CREATED) {
             return false;
         }
@@ -2734,7 +2736,7 @@
         return show;
     }
 
-    public boolean dispatchPrepareOptionsMenu(@NonNull Menu menu) {
+    boolean dispatchPrepareOptionsMenu(@NonNull Menu menu) {
         if (mCurState < Fragment.CREATED) {
             return false;
         }
@@ -2750,7 +2752,7 @@
         return show;
     }
 
-    public boolean dispatchOptionsItemSelected(@NonNull MenuItem item) {
+    boolean dispatchOptionsItemSelected(@NonNull MenuItem item) {
         if (mCurState < Fragment.CREATED) {
             return false;
         }
@@ -2765,7 +2767,7 @@
         return false;
     }
 
-    public boolean dispatchContextItemSelected(@NonNull MenuItem item) {
+    boolean dispatchContextItemSelected(@NonNull MenuItem item) {
         if (mCurState < Fragment.CREATED) {
             return false;
         }
@@ -2780,7 +2782,7 @@
         return false;
     }
 
-    public void dispatchOptionsMenuClosed(@NonNull Menu menu) {
+    void dispatchOptionsMenuClosed(@NonNull Menu menu) {
         if (mCurState < Fragment.CREATED) {
             return;
         }
@@ -2793,7 +2795,7 @@
     }
 
     @SuppressWarnings("ReferenceEquality")
-    public void setPrimaryNavigationFragment(Fragment f) {
+    void setPrimaryNavigationFragment(Fragment f) {
         if (f != null && (mActive.get(f.mWho) != f
                 || (f.mHost != null && f.getFragmentManager() != this))) {
             throw new IllegalArgumentException("Fragment " + f
@@ -2823,7 +2825,7 @@
         return mPrimaryNav;
     }
 
-    public void setMaxLifecycle(Fragment f, Lifecycle.State state) {
+    void setMaxLifecycle(Fragment f, Lifecycle.State state) {
         if ((mActive.get(f.mWho) != f
                 || (f.mHost != null && f.getFragmentManager() != this))) {
             throw new IllegalArgumentException("Fragment " + f
@@ -2875,7 +2877,7 @@
         }
     }
 
-    void dispatchOnFragmentPreAttached(@NonNull Fragment f, @NonNull Context context,
+    private void dispatchOnFragmentPreAttached(@NonNull Fragment f, @NonNull Context context,
                                        boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
@@ -2891,8 +2893,8 @@
         }
     }
 
-    void dispatchOnFragmentAttached(@NonNull Fragment f, @NonNull Context context,
-                                    boolean onlyRecursive) {
+    private void dispatchOnFragmentAttached(@NonNull Fragment f, @NonNull Context context,
+            boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -2907,8 +2909,8 @@
         }
     }
 
-    void dispatchOnFragmentPreCreated(@NonNull Fragment f, @Nullable Bundle savedInstanceState,
-                                      boolean onlyRecursive) {
+    private void dispatchOnFragmentPreCreated(@NonNull Fragment f,
+            @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -2923,8 +2925,8 @@
         }
     }
 
-    void dispatchOnFragmentCreated(@NonNull Fragment f, @Nullable Bundle savedInstanceState,
-                                   boolean onlyRecursive) {
+    private void dispatchOnFragmentCreated(@NonNull Fragment f,
+            @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -2939,8 +2941,8 @@
         }
     }
 
-    void dispatchOnFragmentActivityCreated(@NonNull Fragment f, @Nullable Bundle savedInstanceState,
-                                           boolean onlyRecursive) {
+    private void dispatchOnFragmentActivityCreated(@NonNull Fragment f,
+            @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -2955,8 +2957,8 @@
         }
     }
 
-    void dispatchOnFragmentViewCreated(@NonNull Fragment f, @NonNull View v,
-                                       @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
+    private void dispatchOnFragmentViewCreated(@NonNull Fragment f, @NonNull View v,
+            @Nullable Bundle savedInstanceState, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -2971,7 +2973,7 @@
         }
     }
 
-    void dispatchOnFragmentStarted(@NonNull Fragment f, boolean onlyRecursive) {
+    private void dispatchOnFragmentStarted(@NonNull Fragment f, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -2986,7 +2988,7 @@
         }
     }
 
-    void dispatchOnFragmentResumed(@NonNull Fragment f, boolean onlyRecursive) {
+    private void dispatchOnFragmentResumed(@NonNull Fragment f, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -3001,7 +3003,7 @@
         }
     }
 
-    void dispatchOnFragmentPaused(@NonNull Fragment f, boolean onlyRecursive) {
+    private void dispatchOnFragmentPaused(@NonNull Fragment f, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -3016,7 +3018,7 @@
         }
     }
 
-    void dispatchOnFragmentStopped(@NonNull Fragment f, boolean onlyRecursive) {
+    private void dispatchOnFragmentStopped(@NonNull Fragment f, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -3031,8 +3033,8 @@
         }
     }
 
-    void dispatchOnFragmentSaveInstanceState(@NonNull Fragment f, @NonNull Bundle outState,
-                                             boolean onlyRecursive) {
+    private void dispatchOnFragmentSaveInstanceState(@NonNull Fragment f, @NonNull Bundle outState,
+            boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -3047,7 +3049,7 @@
         }
     }
 
-    void dispatchOnFragmentViewDestroyed(@NonNull Fragment f, boolean onlyRecursive) {
+    private void dispatchOnFragmentViewDestroyed(@NonNull Fragment f, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -3062,7 +3064,7 @@
         }
     }
 
-    void dispatchOnFragmentDestroyed(@NonNull Fragment f, boolean onlyRecursive) {
+    private void dispatchOnFragmentDestroyed(@NonNull Fragment f, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -3077,7 +3079,7 @@
         }
     }
 
-    void dispatchOnFragmentDetached(@NonNull Fragment f, boolean onlyRecursive) {
+    private void dispatchOnFragmentDetached(@NonNull Fragment f, boolean onlyRecursive) {
         if (mParent != null) {
             FragmentManager parentManager = mParent.getFragmentManager();
             if (parentManager instanceof FragmentManagerImpl) {
@@ -3111,7 +3113,7 @@
         return f.mHasMenu && f.mMenuVisible || f.mChildFragmentManager.checkForMenus();
     }
 
-    public static int reverseTransit(int transit) {
+    static int reverseTransit(int transit) {
         int rev = 0;
         switch (transit) {
             case FragmentTransaction.TRANSIT_FRAGMENT_OPEN:
@@ -3128,14 +3130,14 @@
 
     }
 
-    public static final int ANIM_STYLE_OPEN_ENTER = 1;
-    public static final int ANIM_STYLE_OPEN_EXIT = 2;
-    public static final int ANIM_STYLE_CLOSE_ENTER = 3;
-    public static final int ANIM_STYLE_CLOSE_EXIT = 4;
-    public static final int ANIM_STYLE_FADE_ENTER = 5;
-    public static final int ANIM_STYLE_FADE_EXIT = 6;
+    private static final int ANIM_STYLE_OPEN_ENTER = 1;
+    private static final int ANIM_STYLE_OPEN_EXIT = 2;
+    private static final int ANIM_STYLE_CLOSE_ENTER = 3;
+    private static final int ANIM_STYLE_CLOSE_EXIT = 4;
+    private static final int ANIM_STYLE_FADE_ENTER = 5;
+    private static final int ANIM_STYLE_FADE_EXIT = 6;
 
-    public static int transitToStyleIndex(int transit, boolean enter) {
+    private static int transitToStyleIndex(int transit, boolean enter) {
         int animAttr = -1;
         switch (transit) {
             case FragmentTransaction.TRANSIT_FRAGMENT_OPEN:
@@ -3151,120 +3153,9 @@
         return animAttr;
     }
 
-    @Override
-    @Nullable
-    public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context,
-                             @NonNull AttributeSet attrs) {
-        if (!"fragment".equals(name)) {
-            return null;
-        }
-
-        String fname = attrs.getAttributeValue(null, "class");
-        TypedArray a =  context.obtainStyledAttributes(attrs, FragmentTag.Fragment);
-        if (fname == null) {
-            fname = a.getString(FragmentTag.Fragment_name);
-        }
-        int id = a.getResourceId(FragmentTag.Fragment_id, View.NO_ID);
-        String tag = a.getString(FragmentTag.Fragment_tag);
-        a.recycle();
-
-        if (fname == null || !FragmentFactory.isFragmentClass(context.getClassLoader(), fname)) {
-            // Invalid support lib fragment; let the device's framework handle it.
-            // This will allow android.app.Fragments to do the right thing.
-            return null;
-        }
-
-        int containerId = parent != null ? parent.getId() : 0;
-        if (containerId == View.NO_ID && id == View.NO_ID && tag == null) {
-            throw new IllegalArgumentException(attrs.getPositionDescription()
-                    + ": Must specify unique android:id, android:tag, or have a parent with an id for " + fname);
-        }
-
-        // If we restored from a previous state, we may already have
-        // instantiated this fragment from the state and should use
-        // that instance instead of making a new one.
-        Fragment fragment = id != View.NO_ID ? findFragmentById(id) : null;
-        if (fragment == null && tag != null) {
-            fragment = findFragmentByTag(tag);
-        }
-        if (fragment == null && containerId != View.NO_ID) {
-            fragment = findFragmentById(containerId);
-        }
-
-        if (FragmentManagerImpl.DEBUG) Log.v(TAG, "onCreateView: id=0x"
-                + Integer.toHexString(id) + " fname=" + fname
-                + " existing=" + fragment);
-        if (fragment == null) {
-            fragment = getFragmentFactory().instantiate(context.getClassLoader(), fname);
-            fragment.mFromLayout = true;
-            fragment.mFragmentId = id != 0 ? id : containerId;
-            fragment.mContainerId = containerId;
-            fragment.mTag = tag;
-            fragment.mInLayout = true;
-            fragment.mFragmentManager = this;
-            fragment.mHost = mHost;
-            fragment.onInflate(mHost.getContext(), attrs, fragment.mSavedFragmentState);
-            addFragment(fragment, true);
-
-        } else if (fragment.mInLayout) {
-            // A fragment already exists and it is not one we restored from
-            // previous state.
-            throw new IllegalArgumentException(attrs.getPositionDescription()
-                    + ": Duplicate id 0x" + Integer.toHexString(id)
-                    + ", tag " + tag + ", or parent id 0x" + Integer.toHexString(containerId)
-                    + " with another fragment for " + fname);
-        } else {
-            // This fragment was retained from a previous instance; get it
-            // going now.
-            fragment.mInLayout = true;
-            fragment.mHost = mHost;
-            // Give the Fragment the attributes to initialize itself.
-            fragment.onInflate(mHost.getContext(), attrs, fragment.mSavedFragmentState);
-        }
-
-        // If we haven't finished entering the CREATED state ourselves yet,
-        // push the inflated child fragment along. This will ensureInflatedFragmentView
-        // at the right phase of the lifecycle so that we will have mView populated
-        // for compliant fragments below.
-        if (mCurState < Fragment.CREATED && fragment.mFromLayout) {
-            moveToState(fragment, Fragment.CREATED, 0, 0, false);
-        } else {
-            moveToState(fragment);
-        }
-
-        if (fragment.mView == null) {
-            throw new IllegalStateException("Fragment " + fname
-                    + " did not create a view.");
-        }
-        if (id != 0) {
-            fragment.mView.setId(id);
-        }
-        if (fragment.mView.getTag() == null) {
-            fragment.mView.setTag(tag);
-        }
-        return fragment.mView;
-    }
-
-    @Override
-    public View onCreateView(@NonNull String name, @NonNull Context context,
-            @NonNull AttributeSet attrs) {
-        return onCreateView(null, name, context, attrs);
-    }
-
+    @NonNull
     LayoutInflater.Factory2 getLayoutInflaterFactory() {
-        return this;
-    }
-
-    static class FragmentTag {
-        public static final int[] Fragment = {
-                0x01010003, 0x010100d0, 0x010100d1
-        };
-        public static final int Fragment_id = 1;
-        public static final int Fragment_name = 0;
-        public static final int Fragment_tag = 2;
-
-        private FragmentTag() {
-        }
+        return mLayoutInflaterFactory;
     }
 
     /**
@@ -3370,7 +3261,7 @@
          * the transitions if this is called before all fragments have called
          * {@link Fragment#startPostponedEnterTransition()}.
          */
-        public void completeTransaction() {
+        void completeTransaction() {
             final boolean canceled;
             canceled = mNumPostponed > 0;
             FragmentManagerImpl manager = mRecord.mManager;
@@ -3389,7 +3280,7 @@
          * Cancels this transaction instead of completing it. That means that the state isn't
          * changed, so the pop results in no change to the state.
          */
-        public void cancelTransaction() {
+        void cancelTransaction() {
             mRecord.mManager.completeExecute(mRecord, mIsBack, false, false);
         }
     }
diff --git a/fragment/fragment/src/main/res/values/attrs.xml b/fragment/fragment/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..af79953
--- /dev/null
+++ b/fragment/fragment/src/main/res/values/attrs.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<resources>
+    <declare-styleable name="Fragment">
+        <attr name="android:name" />
+        <attr name="android:id" />
+        <attr name="android:tag" />
+    </declare-styleable>
+</resources>
diff --git a/jetifier/jetifier/migration.config b/jetifier/jetifier/migration.config
index 1472240..98984f7 100644
--- a/jetifier/jetifier/migration.config
+++ b/jetifier/jetifier/migration.config
@@ -634,6 +634,10 @@
       "to": "ignore"
     },
     {
+      "from": "androidx/fragment/R(.*)",
+      "to": "ignore"
+    },
+    {
       "from": "androidx/transition/(.*)",
       "to": "ignore"
     },
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java
index be37235..17b146f 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java
@@ -980,7 +980,7 @@
     }
 
     private class StubSubscriptionCallback extends MediaBrowserCompat.SubscriptionCallback {
-        private CountDownLatch mLatch;
+        private volatile CountDownLatch mLatch;
         private volatile int mChildrenLoadedCount;
         private volatile int mChildrenLoadedWithOptionCount;
         private volatile String mLastErrorId;
@@ -1002,6 +1002,7 @@
             try {
                 return mLatch.await(timeoutMs, TimeUnit.MILLISECONDS);
             } catch (InterruptedException e) {
+                Log.e(TAG, "interrupt while awaiting", e);
                 return false;
             }
         }
diff --git a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserTest.java b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserTest.java
index 7f477ce..aa2a0a6 100644
--- a/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserTest.java
+++ b/media/version-compat-tests/current/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserTest.java
@@ -734,7 +734,7 @@
     }
 
     private class StubSubscriptionCallback extends MediaBrowser.SubscriptionCallback {
-        private CountDownLatch mLatch;
+        private volatile CountDownLatch mLatch;
         private volatile int mChildrenLoadedCount;
         private volatile int mChildrenLoadedWithOptionCount;
         private volatile String mLastErrorId;
@@ -756,6 +756,7 @@
             try {
                 return mLatch.await(timeoutMs, TimeUnit.MILLISECONDS);
             } catch (InterruptedException e) {
+                Log.e(TAG, "interrupt while awaiting", e);
                 return false;
             }
         }
diff --git a/media/version-compat-tests/previous/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java b/media/version-compat-tests/previous/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java
index 57f4d72..88adeeb 100644
--- a/media/version-compat-tests/previous/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java
+++ b/media/version-compat-tests/previous/client/src/androidTest/java/android/support/mediacompat/client/MediaBrowserCompatTest.java
@@ -916,7 +916,7 @@
     }
 
     private class StubSubscriptionCallback extends MediaBrowserCompat.SubscriptionCallback {
-        private CountDownLatch mLatch;
+        private volatile CountDownLatch mLatch;
         private volatile int mChildrenLoadedCount;
         private volatile int mChildrenLoadedWithOptionCount;
         private volatile String mLastErrorId;
@@ -938,6 +938,7 @@
             try {
                 return mLatch.await(timeoutMs, TimeUnit.MILLISECONDS);
             } catch (InterruptedException e) {
+                Log.e(TAG, "interrupt while awaiting", e);
                 return false;
             }
         }
diff --git a/media2/player/src/main/java/androidx/media2/player/exoplayer/ExoPlayerWrapper.java b/media2/player/src/main/java/androidx/media2/player/exoplayer/ExoPlayerWrapper.java
index f919ede..1329f50 100644
--- a/media2/player/src/main/java/androidx/media2/player/exoplayer/ExoPlayerWrapper.java
+++ b/media2/player/src/main/java/androidx/media2/player/exoplayer/ExoPlayerWrapper.java
@@ -509,13 +509,18 @@
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
     void handleVideoSizeChanged(int width, int height, float pixelWidthHeightRatio) {
+        int scaledWidth;
         if (pixelWidthHeightRatio != 1f) {
-            mVideoWidth = (int) (pixelWidthHeightRatio * width);
+            scaledWidth = (int) (pixelWidthHeightRatio * width);
         } else {
-            mVideoWidth = width;
+            scaledWidth = width;
         }
+        if (mVideoWidth == scaledWidth && mVideoHeight == height) {
+            return;
+        }
+        mVideoWidth = scaledWidth;
         mVideoHeight = height;
-        mListener.onVideoSizeChanged(mMediaItemQueue.getCurrentMediaItem(), width, height);
+        mListener.onVideoSizeChanged(mMediaItemQueue.getCurrentMediaItem(), scaledWidth, height);
     }
 
     @SuppressWarnings("WeakerAccess") /* synthetic access */
@@ -758,7 +763,10 @@
         public void onDroppedFrames(int count, long elapsedMs) {}
 
         @Override
-        public void onVideoDisabled(DecoderCounters counters) {}
+        public void onVideoDisabled(DecoderCounters counters) {
+            handleVideoSizeChanged(
+                    /* width= */ 0, /* height= */ 0, /* pixelWidthHeightRatio= */ 1f);
+        }
 
         // AudioListener implementation.
 
diff --git a/samples/SupportContentDemos/build.gradle b/samples/SupportContentDemos/build.gradle
index 335c13d..67a4c70 100644
--- a/samples/SupportContentDemos/build.gradle
+++ b/samples/SupportContentDemos/build.gradle
@@ -24,7 +24,7 @@
 
 dependencies {
     implementation(MATERIAL)
-    implementation(project(":transition"))
+    implementation(project(":transition:transition"))
     implementation(project(":recyclerview:recyclerview"))
     implementation(project(":appcompat"))
     implementation(project(":contentpager"))
diff --git a/samples/SupportSliceDemos/build.gradle b/samples/SupportSliceDemos/build.gradle
index 0f4053e..60d4dda 100644
--- a/samples/SupportSliceDemos/build.gradle
+++ b/samples/SupportSliceDemos/build.gradle
@@ -26,7 +26,7 @@
     implementation(project(":slice-builders"))
     implementation(project(":slice-core"))
     implementation(project(":slice-test"))
-    implementation(project(":transition"))
+    implementation(project(":transition:transition"))
     implementation(project(":recyclerview:recyclerview"))
     implementation(project(":appcompat"))
     implementation(project(":cardview"))
diff --git a/samples/SupportTransitionDemos/build.gradle b/samples/SupportTransitionDemos/build.gradle
index 2436117..38eed5e 100644
--- a/samples/SupportTransitionDemos/build.gradle
+++ b/samples/SupportTransitionDemos/build.gradle
@@ -4,7 +4,7 @@
 }
 
 dependencies {
-    implementation(project(":transition"))
+    implementation(project(":transition:transition"))
     implementation(project(":appcompat"))
     implementation(project(":recyclerview:recyclerview"))
     implementation(project(":interpolator"))
diff --git a/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java b/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
index 3f1b6666..301a4d2 100644
--- a/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
+++ b/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
@@ -24,6 +24,7 @@
 import android.content.SharedPreferences;
 
 import androidx.test.core.app.ApplicationProvider;
+import androidx.test.filters.SmallTest;
 
 import com.google.crypto.tink.KeysetHandle;
 import com.google.crypto.tink.StreamingAead;
@@ -46,11 +47,10 @@
 import java.io.OutputStream;
 import java.security.KeyStore;
 
-@SuppressWarnings("unchecked")
+@SmallTest
 @RunWith(JUnit4.class)
 public class EncryptedFileTest {
 
-
     private Context mContext;
     private String mMasterKeyAlias;
 
@@ -269,4 +269,3 @@
     }
 
 }
-
diff --git a/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java b/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java
index 42e5c0d..7dadcb3 100644
--- a/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java
+++ b/security/crypto/src/androidTest/java/androidx/security/crypto/EncryptedSharedPreferencesTest.java
@@ -27,6 +27,7 @@
 import android.util.ArraySet;
 
 import androidx.test.core.app.ApplicationProvider;
+import androidx.test.filters.MediumTest;
 
 import com.google.crypto.tink.Aead;
 import com.google.crypto.tink.DeterministicAead;
@@ -51,7 +52,7 @@
 import java.util.Map;
 import java.util.Set;
 
-@SuppressWarnings("unchecked")
+@MediumTest
 @RunWith(JUnit4.class)
 public class EncryptedSharedPreferencesTest {
 
diff --git a/settings.gradle b/settings.gradle
index cb479b9..b9f32ab 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -208,7 +208,7 @@
 includeProject(":test-screenshot-proto", "test/screenshot/proto")
 includeProject(":textclassifier", "textclassifier")
 includeProject(":textclassifier:integration-tests:testapp", "textclassifier/integration-tests/testapp")
-includeProject(":transition", "transition")
+includeProject(":transition:transition", "transition/transition")
 includeProject(":tvprovider", "tv-provider")
 includeProject(":vectordrawable", "graphics/drawable/static")
 includeProject(":vectordrawable-animated", "graphics/drawable/animated")
diff --git a/transition/api/0.0.0.txt b/transition/transition/api/0.0.0.txt
similarity index 100%
rename from transition/api/0.0.0.txt
rename to transition/transition/api/0.0.0.txt
diff --git a/transition/api/1.0.0.txt b/transition/transition/api/1.0.0.txt
similarity index 100%
rename from transition/api/1.0.0.txt
rename to transition/transition/api/1.0.0.txt
diff --git a/transition/api/1.1.0-alpha01.txt b/transition/transition/api/1.1.0-alpha01.txt
similarity index 100%
rename from transition/api/1.1.0-alpha01.txt
rename to transition/transition/api/1.1.0-alpha01.txt
diff --git a/transition/api/1.1.0-alpha02.txt b/transition/transition/api/1.1.0-alpha02.txt
similarity index 100%
rename from transition/api/1.1.0-alpha02.txt
rename to transition/transition/api/1.1.0-alpha02.txt
diff --git a/transition/api/1.1.0-beta01.txt b/transition/transition/api/1.1.0-beta01.txt
similarity index 100%
rename from transition/api/1.1.0-beta01.txt
rename to transition/transition/api/1.1.0-beta01.txt
diff --git a/transition/api/1.1.0-beta02.txt b/transition/transition/api/1.1.0-beta02.txt
similarity index 100%
rename from transition/api/1.1.0-beta02.txt
rename to transition/transition/api/1.1.0-beta02.txt
diff --git a/transition/api/1.1.0-rc01.txt b/transition/transition/api/1.1.0-rc01.txt
similarity index 100%
rename from transition/api/1.1.0-rc01.txt
rename to transition/transition/api/1.1.0-rc01.txt
diff --git a/transition/api/1.2.0-alpha01.txt b/transition/transition/api/1.2.0-alpha01.txt
similarity index 100%
rename from transition/api/1.2.0-alpha01.txt
rename to transition/transition/api/1.2.0-alpha01.txt
diff --git a/transition/api/1.2.0-alpha02.ignore b/transition/transition/api/1.2.0-alpha02.ignore
similarity index 100%
rename from transition/api/1.2.0-alpha02.ignore
rename to transition/transition/api/1.2.0-alpha02.ignore
diff --git a/transition/api/1.2.0-alpha02.txt b/transition/transition/api/1.2.0-alpha02.txt
similarity index 100%
rename from transition/api/1.2.0-alpha02.txt
rename to transition/transition/api/1.2.0-alpha02.txt
diff --git a/transition/api/1.2.0-beta01.ignore b/transition/transition/api/1.2.0-beta01.ignore
similarity index 100%
rename from transition/api/1.2.0-beta01.ignore
rename to transition/transition/api/1.2.0-beta01.ignore
diff --git a/transition/api/1.2.0-beta01.txt b/transition/transition/api/1.2.0-beta01.txt
similarity index 100%
rename from transition/api/1.2.0-beta01.txt
rename to transition/transition/api/1.2.0-beta01.txt
diff --git a/transition/api/1.2.0-beta02.txt b/transition/transition/api/1.2.0-beta02.txt
similarity index 100%
rename from transition/api/1.2.0-beta02.txt
rename to transition/transition/api/1.2.0-beta02.txt
diff --git a/transition/api/api_lint.ignore b/transition/transition/api/api_lint.ignore
similarity index 100%
rename from transition/api/api_lint.ignore
rename to transition/transition/api/api_lint.ignore
diff --git a/transition/api/current.txt b/transition/transition/api/current.txt
similarity index 100%
rename from transition/api/current.txt
rename to transition/transition/api/current.txt
diff --git a/transition/api/res-1.1.0-alpha01.txt b/transition/transition/api/res-1.1.0-alpha01.txt
similarity index 100%
rename from transition/api/res-1.1.0-alpha01.txt
rename to transition/transition/api/res-1.1.0-alpha01.txt
diff --git a/transition/api/res-1.1.0-alpha02.txt b/transition/transition/api/res-1.1.0-alpha02.txt
similarity index 100%
rename from transition/api/res-1.1.0-alpha02.txt
rename to transition/transition/api/res-1.1.0-alpha02.txt
diff --git a/transition/api/res-1.1.0-beta01.txt b/transition/transition/api/res-1.1.0-beta01.txt
similarity index 100%
rename from transition/api/res-1.1.0-beta01.txt
rename to transition/transition/api/res-1.1.0-beta01.txt
diff --git a/transition/api/res-1.1.0-beta02.txt b/transition/transition/api/res-1.1.0-beta02.txt
similarity index 100%
rename from transition/api/res-1.1.0-beta02.txt
rename to transition/transition/api/res-1.1.0-beta02.txt
diff --git a/transition/api/res-1.1.0-rc01.txt b/transition/transition/api/res-1.1.0-rc01.txt
similarity index 100%
rename from transition/api/res-1.1.0-rc01.txt
rename to transition/transition/api/res-1.1.0-rc01.txt
diff --git a/transition/api/res-1.2.0-alpha01.txt b/transition/transition/api/res-1.2.0-alpha01.txt
similarity index 100%
rename from transition/api/res-1.2.0-alpha01.txt
rename to transition/transition/api/res-1.2.0-alpha01.txt
diff --git a/transition/api/res-1.2.0-alpha02.txt b/transition/transition/api/res-1.2.0-alpha02.txt
similarity index 100%
rename from transition/api/res-1.2.0-alpha02.txt
rename to transition/transition/api/res-1.2.0-alpha02.txt
diff --git a/transition/api/res-1.2.0-beta01.txt b/transition/transition/api/res-1.2.0-beta01.txt
similarity index 100%
rename from transition/api/res-1.2.0-beta01.txt
rename to transition/transition/api/res-1.2.0-beta01.txt
diff --git a/transition/api/res-1.2.0-beta02.txt b/transition/transition/api/res-1.2.0-beta02.txt
similarity index 100%
rename from transition/api/res-1.2.0-beta02.txt
rename to transition/transition/api/res-1.2.0-beta02.txt
diff --git a/transition/api/restricted_1.0.0.txt b/transition/transition/api/restricted_1.0.0.txt
similarity index 100%
rename from transition/api/restricted_1.0.0.txt
rename to transition/transition/api/restricted_1.0.0.txt
diff --git a/transition/api_legacy/26.0.0.txt b/transition/transition/api_legacy/26.0.0.txt
similarity index 100%
rename from transition/api_legacy/26.0.0.txt
rename to transition/transition/api_legacy/26.0.0.txt
diff --git a/transition/api_legacy/26.1.0.txt b/transition/transition/api_legacy/26.1.0.txt
similarity index 100%
rename from transition/api_legacy/26.1.0.txt
rename to transition/transition/api_legacy/26.1.0.txt
diff --git a/transition/api_legacy/27.0.0.txt b/transition/transition/api_legacy/27.0.0.txt
similarity index 100%
rename from transition/api_legacy/27.0.0.txt
rename to transition/transition/api_legacy/27.0.0.txt
diff --git a/transition/api_legacy/27.1.0.txt b/transition/transition/api_legacy/27.1.0.txt
similarity index 100%
rename from transition/api_legacy/27.1.0.txt
rename to transition/transition/api_legacy/27.1.0.txt
diff --git a/transition/api_legacy/28.0.0-alpha1.txt b/transition/transition/api_legacy/28.0.0-alpha1.txt
similarity index 100%
rename from transition/api_legacy/28.0.0-alpha1.txt
rename to transition/transition/api_legacy/28.0.0-alpha1.txt
diff --git a/transition/api_legacy/current.txt b/transition/transition/api_legacy/current.txt
similarity index 100%
rename from transition/api_legacy/current.txt
rename to transition/transition/api_legacy/current.txt
diff --git a/transition/build.gradle b/transition/transition/build.gradle
similarity index 100%
rename from transition/build.gradle
rename to transition/transition/build.gradle
diff --git a/transition/lint-baseline.xml b/transition/transition/lint-baseline.xml
similarity index 100%
rename from transition/lint-baseline.xml
rename to transition/transition/lint-baseline.xml
diff --git a/transition/proguard-rules.pro b/transition/transition/proguard-rules.pro
similarity index 100%
rename from transition/proguard-rules.pro
rename to transition/transition/proguard-rules.pro
diff --git a/transition/src/androidTest/AndroidManifest.xml b/transition/transition/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from transition/src/androidTest/AndroidManifest.xml
rename to transition/transition/src/androidTest/AndroidManifest.xml
diff --git a/transition/src/androidTest/java/androidx/transition/ArcMotionTest.java b/transition/transition/src/androidTest/java/androidx/transition/ArcMotionTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/ArcMotionTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/ArcMotionTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/AtLeastOnceWithin.java b/transition/transition/src/androidTest/java/androidx/transition/AtLeastOnceWithin.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/AtLeastOnceWithin.java
rename to transition/transition/src/androidTest/java/androidx/transition/AtLeastOnceWithin.java
diff --git a/transition/src/androidTest/java/androidx/transition/AutoTransitionTest.java b/transition/transition/src/androidTest/java/androidx/transition/AutoTransitionTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/AutoTransitionTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/AutoTransitionTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/BaseTest.java b/transition/transition/src/androidTest/java/androidx/transition/BaseTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/BaseTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/BaseTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/BaseTransitionTest.java b/transition/transition/src/androidTest/java/androidx/transition/BaseTransitionTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/BaseTransitionTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/BaseTransitionTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/ChangeBoundsTest.java b/transition/transition/src/androidTest/java/androidx/transition/ChangeBoundsTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/ChangeBoundsTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/ChangeBoundsTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java b/transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/ChangeClipBoundsTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/ChangeImageTransformTest.java b/transition/transition/src/androidTest/java/androidx/transition/ChangeImageTransformTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/ChangeImageTransformTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/ChangeImageTransformTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/ChangeScrollTest.java b/transition/transition/src/androidTest/java/androidx/transition/ChangeScrollTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/ChangeScrollTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/ChangeScrollTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/ChangeTransformTest.java b/transition/transition/src/androidTest/java/androidx/transition/ChangeTransformTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/ChangeTransformTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/ChangeTransformTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/CheckCalledRunnable.java b/transition/transition/src/androidTest/java/androidx/transition/CheckCalledRunnable.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/CheckCalledRunnable.java
rename to transition/transition/src/androidTest/java/androidx/transition/CheckCalledRunnable.java
diff --git a/transition/src/androidTest/java/androidx/transition/ExplodeTest.java b/transition/transition/src/androidTest/java/androidx/transition/ExplodeTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/ExplodeTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/ExplodeTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/FadeTest.java b/transition/transition/src/androidTest/java/androidx/transition/FadeTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/FadeTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/FadeTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.java b/transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/FragmentTransitionTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/GhostViewTest.java b/transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/GhostViewTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/GhostViewTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/PathMotionTest.java b/transition/transition/src/androidTest/java/androidx/transition/PathMotionTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/PathMotionTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/PathMotionTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/PatternPathMotionTest.java b/transition/transition/src/androidTest/java/androidx/transition/PatternPathMotionTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/PatternPathMotionTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/PatternPathMotionTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/PrevTransitionStoppedTest.java b/transition/transition/src/androidTest/java/androidx/transition/PrevTransitionStoppedTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/PrevTransitionStoppedTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/PrevTransitionStoppedTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/PropagationTest.java b/transition/transition/src/androidTest/java/androidx/transition/PropagationTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/PropagationTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/PropagationTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/SceneTest.java b/transition/transition/src/androidTest/java/androidx/transition/SceneTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/SceneTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/SceneTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/SlideBadEdgeTest.java b/transition/transition/src/androidTest/java/androidx/transition/SlideBadEdgeTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/SlideBadEdgeTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/SlideBadEdgeTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/SlideDefaultEdgeTest.java b/transition/transition/src/androidTest/java/androidx/transition/SlideDefaultEdgeTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/SlideDefaultEdgeTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/SlideDefaultEdgeTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/SlideEdgeTest.java b/transition/transition/src/androidTest/java/androidx/transition/SlideEdgeTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/SlideEdgeTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/SlideEdgeTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/SyncRunnable.java b/transition/transition/src/androidTest/java/androidx/transition/SyncRunnable.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/SyncRunnable.java
rename to transition/transition/src/androidTest/java/androidx/transition/SyncRunnable.java
diff --git a/transition/src/androidTest/java/androidx/transition/SyncTransitionListener.java b/transition/transition/src/androidTest/java/androidx/transition/SyncTransitionListener.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/SyncTransitionListener.java
rename to transition/transition/src/androidTest/java/androidx/transition/SyncTransitionListener.java
diff --git a/transition/src/androidTest/java/androidx/transition/TransitionActivity.java b/transition/transition/src/androidTest/java/androidx/transition/TransitionActivity.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/TransitionActivity.java
rename to transition/transition/src/androidTest/java/androidx/transition/TransitionActivity.java
diff --git a/transition/src/androidTest/java/androidx/transition/TransitionInflaterTest.java b/transition/transition/src/androidTest/java/androidx/transition/TransitionInflaterTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/TransitionInflaterTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/TransitionInflaterTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/TransitionManagerTest.java b/transition/transition/src/androidTest/java/androidx/transition/TransitionManagerTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/TransitionManagerTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/TransitionManagerTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/TransitionSetTest.java b/transition/transition/src/androidTest/java/androidx/transition/TransitionSetTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/TransitionSetTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/TransitionSetTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/TransitionTest.java b/transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/TransitionTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/TransitionTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/TranslationAnimationCreatorTest.java b/transition/transition/src/androidTest/java/androidx/transition/TranslationAnimationCreatorTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/TranslationAnimationCreatorTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/TranslationAnimationCreatorTest.java
diff --git a/transition/src/androidTest/java/androidx/transition/TranslationView.java b/transition/transition/src/androidTest/java/androidx/transition/TranslationView.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/TranslationView.java
rename to transition/transition/src/androidTest/java/androidx/transition/TranslationView.java
diff --git a/transition/src/androidTest/java/androidx/transition/VisibilityTest.java b/transition/transition/src/androidTest/java/androidx/transition/VisibilityTest.java
similarity index 100%
rename from transition/src/androidTest/java/androidx/transition/VisibilityTest.java
rename to transition/transition/src/androidTest/java/androidx/transition/VisibilityTest.java
diff --git a/transition/src/androidTest/res/layout/activity_transition.xml b/transition/transition/src/androidTest/res/layout/activity_transition.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/activity_transition.xml
rename to transition/transition/src/androidTest/res/layout/activity_transition.xml
diff --git a/transition/src/androidTest/res/layout/scene1.xml b/transition/transition/src/androidTest/res/layout/scene1.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene1.xml
rename to transition/transition/src/androidTest/res/layout/scene1.xml
diff --git a/transition/src/androidTest/res/layout/scene10.xml b/transition/transition/src/androidTest/res/layout/scene10.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene10.xml
rename to transition/transition/src/androidTest/res/layout/scene10.xml
diff --git a/transition/src/androidTest/res/layout/scene11.xml b/transition/transition/src/androidTest/res/layout/scene11.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene11.xml
rename to transition/transition/src/androidTest/res/layout/scene11.xml
diff --git a/transition/src/androidTest/res/layout/scene12.xml b/transition/transition/src/androidTest/res/layout/scene12.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene12.xml
rename to transition/transition/src/androidTest/res/layout/scene12.xml
diff --git a/transition/src/androidTest/res/layout/scene13.xml b/transition/transition/src/androidTest/res/layout/scene13.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene13.xml
rename to transition/transition/src/androidTest/res/layout/scene13.xml
diff --git a/transition/src/androidTest/res/layout/scene2.xml b/transition/transition/src/androidTest/res/layout/scene2.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene2.xml
rename to transition/transition/src/androidTest/res/layout/scene2.xml
diff --git a/transition/src/androidTest/res/layout/scene3.xml b/transition/transition/src/androidTest/res/layout/scene3.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene3.xml
rename to transition/transition/src/androidTest/res/layout/scene3.xml
diff --git a/transition/src/androidTest/res/layout/scene4.xml b/transition/transition/src/androidTest/res/layout/scene4.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene4.xml
rename to transition/transition/src/androidTest/res/layout/scene4.xml
diff --git a/transition/src/androidTest/res/layout/scene5.xml b/transition/transition/src/androidTest/res/layout/scene5.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene5.xml
rename to transition/transition/src/androidTest/res/layout/scene5.xml
diff --git a/transition/src/androidTest/res/layout/scene6.xml b/transition/transition/src/androidTest/res/layout/scene6.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene6.xml
rename to transition/transition/src/androidTest/res/layout/scene6.xml
diff --git a/transition/src/androidTest/res/layout/scene9.xml b/transition/transition/src/androidTest/res/layout/scene9.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/scene9.xml
rename to transition/transition/src/androidTest/res/layout/scene9.xml
diff --git a/transition/src/androidTest/res/layout/support_scene0.xml b/transition/transition/src/androidTest/res/layout/support_scene0.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/support_scene0.xml
rename to transition/transition/src/androidTest/res/layout/support_scene0.xml
diff --git a/transition/src/androidTest/res/layout/support_scene1.xml b/transition/transition/src/androidTest/res/layout/support_scene1.xml
similarity index 100%
rename from transition/src/androidTest/res/layout/support_scene1.xml
rename to transition/transition/src/androidTest/res/layout/support_scene1.xml
diff --git a/transition/src/androidTest/res/transition/arc_motion.xml b/transition/transition/src/androidTest/res/transition/arc_motion.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/arc_motion.xml
rename to transition/transition/src/androidTest/res/transition/arc_motion.xml
diff --git a/transition/src/androidTest/res/transition/auto_transition.xml b/transition/transition/src/androidTest/res/transition/auto_transition.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/auto_transition.xml
rename to transition/transition/src/androidTest/res/transition/auto_transition.xml
diff --git a/transition/src/androidTest/res/transition/change_bounds.xml b/transition/transition/src/androidTest/res/transition/change_bounds.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/change_bounds.xml
rename to transition/transition/src/androidTest/res/transition/change_bounds.xml
diff --git a/transition/src/androidTest/res/transition/change_clip_bounds.xml b/transition/transition/src/androidTest/res/transition/change_clip_bounds.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/change_clip_bounds.xml
rename to transition/transition/src/androidTest/res/transition/change_clip_bounds.xml
diff --git a/transition/src/androidTest/res/transition/change_image_transform.xml b/transition/transition/src/androidTest/res/transition/change_image_transform.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/change_image_transform.xml
rename to transition/transition/src/androidTest/res/transition/change_image_transform.xml
diff --git a/transition/src/androidTest/res/transition/change_scroll.xml b/transition/transition/src/androidTest/res/transition/change_scroll.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/change_scroll.xml
rename to transition/transition/src/androidTest/res/transition/change_scroll.xml
diff --git a/transition/src/androidTest/res/transition/change_transform.xml b/transition/transition/src/androidTest/res/transition/change_transform.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/change_transform.xml
rename to transition/transition/src/androidTest/res/transition/change_transform.xml
diff --git a/transition/src/androidTest/res/transition/custom_path_motion.xml b/transition/transition/src/androidTest/res/transition/custom_path_motion.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/custom_path_motion.xml
rename to transition/transition/src/androidTest/res/transition/custom_path_motion.xml
diff --git a/transition/src/androidTest/res/transition/custom_transition.xml b/transition/transition/src/androidTest/res/transition/custom_transition.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/custom_transition.xml
rename to transition/transition/src/androidTest/res/transition/custom_transition.xml
diff --git a/transition/src/androidTest/res/transition/explode.xml b/transition/transition/src/androidTest/res/transition/explode.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/explode.xml
rename to transition/transition/src/androidTest/res/transition/explode.xml
diff --git a/transition/src/androidTest/res/transition/fade.xml b/transition/transition/src/androidTest/res/transition/fade.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/fade.xml
rename to transition/transition/src/androidTest/res/transition/fade.xml
diff --git a/transition/src/androidTest/res/transition/pattern_path_motion.xml b/transition/transition/src/androidTest/res/transition/pattern_path_motion.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/pattern_path_motion.xml
rename to transition/transition/src/androidTest/res/transition/pattern_path_motion.xml
diff --git a/transition/src/androidTest/res/transition/slide.xml b/transition/transition/src/androidTest/res/transition/slide.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/slide.xml
rename to transition/transition/src/androidTest/res/transition/slide.xml
diff --git a/transition/src/androidTest/res/transition/target_classes.xml b/transition/transition/src/androidTest/res/transition/target_classes.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/target_classes.xml
rename to transition/transition/src/androidTest/res/transition/target_classes.xml
diff --git a/transition/src/androidTest/res/transition/target_ids.xml b/transition/transition/src/androidTest/res/transition/target_ids.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/target_ids.xml
rename to transition/transition/src/androidTest/res/transition/target_ids.xml
diff --git a/transition/src/androidTest/res/transition/target_names.xml b/transition/transition/src/androidTest/res/transition/target_names.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/target_names.xml
rename to transition/transition/src/androidTest/res/transition/target_names.xml
diff --git a/transition/src/androidTest/res/transition/transition_constructors.xml b/transition/transition/src/androidTest/res/transition/transition_constructors.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/transition_constructors.xml
rename to transition/transition/src/androidTest/res/transition/transition_constructors.xml
diff --git a/transition/src/androidTest/res/transition/transition_set.xml b/transition/transition/src/androidTest/res/transition/transition_set.xml
similarity index 100%
rename from transition/src/androidTest/res/transition/transition_set.xml
rename to transition/transition/src/androidTest/res/transition/transition_set.xml
diff --git a/transition/src/androidTest/res/values/strings.xml b/transition/transition/src/androidTest/res/values/strings.xml
similarity index 100%
rename from transition/src/androidTest/res/values/strings.xml
rename to transition/transition/src/androidTest/res/values/strings.xml
diff --git a/transition/src/main/AndroidManifest.xml b/transition/transition/src/main/AndroidManifest.xml
similarity index 100%
rename from transition/src/main/AndroidManifest.xml
rename to transition/transition/src/main/AndroidManifest.xml
diff --git a/transition/src/main/java/androidx/transition/AnimatorUtils.java b/transition/transition/src/main/java/androidx/transition/AnimatorUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/AnimatorUtils.java
rename to transition/transition/src/main/java/androidx/transition/AnimatorUtils.java
diff --git a/transition/src/main/java/androidx/transition/ArcMotion.java b/transition/transition/src/main/java/androidx/transition/ArcMotion.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ArcMotion.java
rename to transition/transition/src/main/java/androidx/transition/ArcMotion.java
diff --git a/transition/src/main/java/androidx/transition/AutoTransition.java b/transition/transition/src/main/java/androidx/transition/AutoTransition.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/AutoTransition.java
rename to transition/transition/src/main/java/androidx/transition/AutoTransition.java
diff --git a/transition/src/main/java/androidx/transition/CanvasUtils.java b/transition/transition/src/main/java/androidx/transition/CanvasUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/CanvasUtils.java
rename to transition/transition/src/main/java/androidx/transition/CanvasUtils.java
diff --git a/transition/src/main/java/androidx/transition/ChangeBounds.java b/transition/transition/src/main/java/androidx/transition/ChangeBounds.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ChangeBounds.java
rename to transition/transition/src/main/java/androidx/transition/ChangeBounds.java
diff --git a/transition/src/main/java/androidx/transition/ChangeClipBounds.java b/transition/transition/src/main/java/androidx/transition/ChangeClipBounds.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ChangeClipBounds.java
rename to transition/transition/src/main/java/androidx/transition/ChangeClipBounds.java
diff --git a/transition/src/main/java/androidx/transition/ChangeImageTransform.java b/transition/transition/src/main/java/androidx/transition/ChangeImageTransform.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ChangeImageTransform.java
rename to transition/transition/src/main/java/androidx/transition/ChangeImageTransform.java
diff --git a/transition/src/main/java/androidx/transition/ChangeScroll.java b/transition/transition/src/main/java/androidx/transition/ChangeScroll.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ChangeScroll.java
rename to transition/transition/src/main/java/androidx/transition/ChangeScroll.java
diff --git a/transition/src/main/java/androidx/transition/ChangeTransform.java b/transition/transition/src/main/java/androidx/transition/ChangeTransform.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ChangeTransform.java
rename to transition/transition/src/main/java/androidx/transition/ChangeTransform.java
diff --git a/transition/src/main/java/androidx/transition/CircularPropagation.java b/transition/transition/src/main/java/androidx/transition/CircularPropagation.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/CircularPropagation.java
rename to transition/transition/src/main/java/androidx/transition/CircularPropagation.java
diff --git a/transition/src/main/java/androidx/transition/Explode.java b/transition/transition/src/main/java/androidx/transition/Explode.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/Explode.java
rename to transition/transition/src/main/java/androidx/transition/Explode.java
diff --git a/transition/src/main/java/androidx/transition/Fade.java b/transition/transition/src/main/java/androidx/transition/Fade.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/Fade.java
rename to transition/transition/src/main/java/androidx/transition/Fade.java
diff --git a/transition/src/main/java/androidx/transition/FloatArrayEvaluator.java b/transition/transition/src/main/java/androidx/transition/FloatArrayEvaluator.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/FloatArrayEvaluator.java
rename to transition/transition/src/main/java/androidx/transition/FloatArrayEvaluator.java
diff --git a/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java b/transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
rename to transition/transition/src/main/java/androidx/transition/FragmentTransitionSupport.java
diff --git a/transition/src/main/java/androidx/transition/GhostView.java b/transition/transition/src/main/java/androidx/transition/GhostView.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/GhostView.java
rename to transition/transition/src/main/java/androidx/transition/GhostView.java
diff --git a/transition/src/main/java/androidx/transition/GhostViewHolder.java b/transition/transition/src/main/java/androidx/transition/GhostViewHolder.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/GhostViewHolder.java
rename to transition/transition/src/main/java/androidx/transition/GhostViewHolder.java
diff --git a/transition/src/main/java/androidx/transition/GhostViewPlatform.java b/transition/transition/src/main/java/androidx/transition/GhostViewPlatform.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/GhostViewPlatform.java
rename to transition/transition/src/main/java/androidx/transition/GhostViewPlatform.java
diff --git a/transition/src/main/java/androidx/transition/GhostViewPort.java b/transition/transition/src/main/java/androidx/transition/GhostViewPort.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/GhostViewPort.java
rename to transition/transition/src/main/java/androidx/transition/GhostViewPort.java
diff --git a/transition/src/main/java/androidx/transition/GhostViewUtils.java b/transition/transition/src/main/java/androidx/transition/GhostViewUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/GhostViewUtils.java
rename to transition/transition/src/main/java/androidx/transition/GhostViewUtils.java
diff --git a/transition/src/main/java/androidx/transition/ImageViewUtils.java b/transition/transition/src/main/java/androidx/transition/ImageViewUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ImageViewUtils.java
rename to transition/transition/src/main/java/androidx/transition/ImageViewUtils.java
diff --git a/transition/src/main/java/androidx/transition/MatrixUtils.java b/transition/transition/src/main/java/androidx/transition/MatrixUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/MatrixUtils.java
rename to transition/transition/src/main/java/androidx/transition/MatrixUtils.java
diff --git a/transition/src/main/java/androidx/transition/ObjectAnimatorUtils.java b/transition/transition/src/main/java/androidx/transition/ObjectAnimatorUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ObjectAnimatorUtils.java
rename to transition/transition/src/main/java/androidx/transition/ObjectAnimatorUtils.java
diff --git a/transition/src/main/java/androidx/transition/PathMotion.java b/transition/transition/src/main/java/androidx/transition/PathMotion.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/PathMotion.java
rename to transition/transition/src/main/java/androidx/transition/PathMotion.java
diff --git a/transition/src/main/java/androidx/transition/PathProperty.java b/transition/transition/src/main/java/androidx/transition/PathProperty.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/PathProperty.java
rename to transition/transition/src/main/java/androidx/transition/PathProperty.java
diff --git a/transition/src/main/java/androidx/transition/PatternPathMotion.java b/transition/transition/src/main/java/androidx/transition/PatternPathMotion.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/PatternPathMotion.java
rename to transition/transition/src/main/java/androidx/transition/PatternPathMotion.java
diff --git a/transition/src/main/java/androidx/transition/PropertyValuesHolderUtils.java b/transition/transition/src/main/java/androidx/transition/PropertyValuesHolderUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/PropertyValuesHolderUtils.java
rename to transition/transition/src/main/java/androidx/transition/PropertyValuesHolderUtils.java
diff --git a/transition/src/main/java/androidx/transition/RectEvaluator.java b/transition/transition/src/main/java/androidx/transition/RectEvaluator.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/RectEvaluator.java
rename to transition/transition/src/main/java/androidx/transition/RectEvaluator.java
diff --git a/transition/src/main/java/androidx/transition/Scene.java b/transition/transition/src/main/java/androidx/transition/Scene.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/Scene.java
rename to transition/transition/src/main/java/androidx/transition/Scene.java
diff --git a/transition/src/main/java/androidx/transition/SidePropagation.java b/transition/transition/src/main/java/androidx/transition/SidePropagation.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/SidePropagation.java
rename to transition/transition/src/main/java/androidx/transition/SidePropagation.java
diff --git a/transition/src/main/java/androidx/transition/Slide.java b/transition/transition/src/main/java/androidx/transition/Slide.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/Slide.java
rename to transition/transition/src/main/java/androidx/transition/Slide.java
diff --git a/transition/src/main/java/androidx/transition/Styleable.java b/transition/transition/src/main/java/androidx/transition/Styleable.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/Styleable.java
rename to transition/transition/src/main/java/androidx/transition/Styleable.java
diff --git a/transition/src/main/java/androidx/transition/Transition.java b/transition/transition/src/main/java/androidx/transition/Transition.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/Transition.java
rename to transition/transition/src/main/java/androidx/transition/Transition.java
diff --git a/transition/src/main/java/androidx/transition/TransitionInflater.java b/transition/transition/src/main/java/androidx/transition/TransitionInflater.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionInflater.java
rename to transition/transition/src/main/java/androidx/transition/TransitionInflater.java
diff --git a/transition/src/main/java/androidx/transition/TransitionListenerAdapter.java b/transition/transition/src/main/java/androidx/transition/TransitionListenerAdapter.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionListenerAdapter.java
rename to transition/transition/src/main/java/androidx/transition/TransitionListenerAdapter.java
diff --git a/transition/src/main/java/androidx/transition/TransitionManager.java b/transition/transition/src/main/java/androidx/transition/TransitionManager.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionManager.java
rename to transition/transition/src/main/java/androidx/transition/TransitionManager.java
diff --git a/transition/src/main/java/androidx/transition/TransitionPropagation.java b/transition/transition/src/main/java/androidx/transition/TransitionPropagation.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionPropagation.java
rename to transition/transition/src/main/java/androidx/transition/TransitionPropagation.java
diff --git a/transition/src/main/java/androidx/transition/TransitionSet.java b/transition/transition/src/main/java/androidx/transition/TransitionSet.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionSet.java
rename to transition/transition/src/main/java/androidx/transition/TransitionSet.java
diff --git a/transition/src/main/java/androidx/transition/TransitionUtils.java b/transition/transition/src/main/java/androidx/transition/TransitionUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionUtils.java
rename to transition/transition/src/main/java/androidx/transition/TransitionUtils.java
diff --git a/transition/src/main/java/androidx/transition/TransitionValues.java b/transition/transition/src/main/java/androidx/transition/TransitionValues.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionValues.java
rename to transition/transition/src/main/java/androidx/transition/TransitionValues.java
diff --git a/transition/src/main/java/androidx/transition/TransitionValuesMaps.java b/transition/transition/src/main/java/androidx/transition/TransitionValuesMaps.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TransitionValuesMaps.java
rename to transition/transition/src/main/java/androidx/transition/TransitionValuesMaps.java
diff --git a/transition/src/main/java/androidx/transition/TranslationAnimationCreator.java b/transition/transition/src/main/java/androidx/transition/TranslationAnimationCreator.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/TranslationAnimationCreator.java
rename to transition/transition/src/main/java/androidx/transition/TranslationAnimationCreator.java
diff --git a/transition/src/main/java/androidx/transition/ViewGroupOverlayApi14.java b/transition/transition/src/main/java/androidx/transition/ViewGroupOverlayApi14.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewGroupOverlayApi14.java
rename to transition/transition/src/main/java/androidx/transition/ViewGroupOverlayApi14.java
diff --git a/transition/src/main/java/androidx/transition/ViewGroupOverlayApi18.java b/transition/transition/src/main/java/androidx/transition/ViewGroupOverlayApi18.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewGroupOverlayApi18.java
rename to transition/transition/src/main/java/androidx/transition/ViewGroupOverlayApi18.java
diff --git a/transition/src/main/java/androidx/transition/ViewGroupOverlayImpl.java b/transition/transition/src/main/java/androidx/transition/ViewGroupOverlayImpl.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewGroupOverlayImpl.java
rename to transition/transition/src/main/java/androidx/transition/ViewGroupOverlayImpl.java
diff --git a/transition/src/main/java/androidx/transition/ViewGroupUtils.java b/transition/transition/src/main/java/androidx/transition/ViewGroupUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewGroupUtils.java
rename to transition/transition/src/main/java/androidx/transition/ViewGroupUtils.java
diff --git a/transition/src/main/java/androidx/transition/ViewGroupUtilsApi14.java b/transition/transition/src/main/java/androidx/transition/ViewGroupUtilsApi14.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewGroupUtilsApi14.java
rename to transition/transition/src/main/java/androidx/transition/ViewGroupUtilsApi14.java
diff --git a/transition/src/main/java/androidx/transition/ViewOverlayApi14.java b/transition/transition/src/main/java/androidx/transition/ViewOverlayApi14.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewOverlayApi14.java
rename to transition/transition/src/main/java/androidx/transition/ViewOverlayApi14.java
diff --git a/transition/src/main/java/androidx/transition/ViewOverlayApi18.java b/transition/transition/src/main/java/androidx/transition/ViewOverlayApi18.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewOverlayApi18.java
rename to transition/transition/src/main/java/androidx/transition/ViewOverlayApi18.java
diff --git a/transition/src/main/java/androidx/transition/ViewOverlayImpl.java b/transition/transition/src/main/java/androidx/transition/ViewOverlayImpl.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewOverlayImpl.java
rename to transition/transition/src/main/java/androidx/transition/ViewOverlayImpl.java
diff --git a/transition/src/main/java/androidx/transition/ViewUtils.java b/transition/transition/src/main/java/androidx/transition/ViewUtils.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewUtils.java
rename to transition/transition/src/main/java/androidx/transition/ViewUtils.java
diff --git a/transition/src/main/java/androidx/transition/ViewUtilsApi19.java b/transition/transition/src/main/java/androidx/transition/ViewUtilsApi19.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewUtilsApi19.java
rename to transition/transition/src/main/java/androidx/transition/ViewUtilsApi19.java
diff --git a/transition/src/main/java/androidx/transition/ViewUtilsApi21.java b/transition/transition/src/main/java/androidx/transition/ViewUtilsApi21.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewUtilsApi21.java
rename to transition/transition/src/main/java/androidx/transition/ViewUtilsApi21.java
diff --git a/transition/src/main/java/androidx/transition/ViewUtilsApi22.java b/transition/transition/src/main/java/androidx/transition/ViewUtilsApi22.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewUtilsApi22.java
rename to transition/transition/src/main/java/androidx/transition/ViewUtilsApi22.java
diff --git a/transition/src/main/java/androidx/transition/ViewUtilsApi23.java b/transition/transition/src/main/java/androidx/transition/ViewUtilsApi23.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewUtilsApi23.java
rename to transition/transition/src/main/java/androidx/transition/ViewUtilsApi23.java
diff --git a/transition/src/main/java/androidx/transition/ViewUtilsApi29.java b/transition/transition/src/main/java/androidx/transition/ViewUtilsApi29.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewUtilsApi29.java
rename to transition/transition/src/main/java/androidx/transition/ViewUtilsApi29.java
diff --git a/transition/src/main/java/androidx/transition/ViewUtilsBase.java b/transition/transition/src/main/java/androidx/transition/ViewUtilsBase.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/ViewUtilsBase.java
rename to transition/transition/src/main/java/androidx/transition/ViewUtilsBase.java
diff --git a/transition/src/main/java/androidx/transition/Visibility.java b/transition/transition/src/main/java/androidx/transition/Visibility.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/Visibility.java
rename to transition/transition/src/main/java/androidx/transition/Visibility.java
diff --git a/transition/src/main/java/androidx/transition/VisibilityPropagation.java b/transition/transition/src/main/java/androidx/transition/VisibilityPropagation.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/VisibilityPropagation.java
rename to transition/transition/src/main/java/androidx/transition/VisibilityPropagation.java
diff --git a/transition/src/main/java/androidx/transition/WindowIdApi14.java b/transition/transition/src/main/java/androidx/transition/WindowIdApi14.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/WindowIdApi14.java
rename to transition/transition/src/main/java/androidx/transition/WindowIdApi14.java
diff --git a/transition/src/main/java/androidx/transition/WindowIdApi18.java b/transition/transition/src/main/java/androidx/transition/WindowIdApi18.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/WindowIdApi18.java
rename to transition/transition/src/main/java/androidx/transition/WindowIdApi18.java
diff --git a/transition/src/main/java/androidx/transition/WindowIdImpl.java b/transition/transition/src/main/java/androidx/transition/WindowIdImpl.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/WindowIdImpl.java
rename to transition/transition/src/main/java/androidx/transition/WindowIdImpl.java
diff --git a/transition/src/main/java/androidx/transition/package-info.java b/transition/transition/src/main/java/androidx/transition/package-info.java
similarity index 100%
rename from transition/src/main/java/androidx/transition/package-info.java
rename to transition/transition/src/main/java/androidx/transition/package-info.java
diff --git a/transition/src/main/res/values/ids.xml b/transition/transition/src/main/res/values/ids.xml
similarity index 100%
rename from transition/src/main/res/values/ids.xml
rename to transition/transition/src/main/res/values/ids.xml
diff --git a/ui/README.md b/ui/README.md
index 6db00fd..aafcf5c 100644
--- a/ui/README.md
+++ b/ui/README.md
@@ -21,12 +21,12 @@
 Also if you would like to build from the command line, all gradle commands need to be run from the `/ui` subfolder.  E.g. to build the demo app, run:
 
     cd path/to/checkout/frameworks/support/ui/
-    ./gradlew :ui-demos:assembleDebug
+    ./gradlew ui:integration-tests:demos:installDebug
 
 ## Currently available components
 Jetpack Compose is in very early stages of development. Developers wanting to build sample apps will probably want to include the material, layout and framework modules. You can see how to setup your dependencies in `material/integration-tests/material-studies/build.gradle`.
 
-Run the `ui-demos` app to see examples of individual components. 
+Run the `demos` app to see examples of individual components.
 
 A sample implementation of the [Material Rally app](https://material.io/design/material-studies/rally.html) is under `material/integration-tests/material-studies`.
 
@@ -39,41 +39,41 @@
 ## Structure
 Library code for Jetpack Compose lives under the `frameworks/support/ui` directory. Additionally, sample code can be found within each module in the `integration-tests` subdirectories and the compiler and runtime code can be found in `frameworks/support/compose`.
 
-The modules within UI are structured as follows
-* `android-text/`
+The modules within UI are structured as follows:
+* `ui-android-text/`
 
    Android specific text stack dependent implementations
-* `android-view/`
+* `ui-android-view/`
 
    Wrappers and adapters for existing Android Views
-* `animation/`
+* `ui-animation/`
 
    Animation components
-* `animation-core/`
+* `ui-animation-core/`
 
    Internal declarations for the animations system
-* `core/`
+* `ui-core/`
 
    Base classes used across the system covering primitives, graphics and drawing
-* `demos/`
+* `integration-tests/demos/`
 
    Module that collects all demos across ui and packages them into one demo APK
-* `framework/`
+* `ui-framework/`
 
    Base components exposed by the system as building blocks. This includes Draw, Layout, Text, etc.
-* `layout/`
+* `ui-layout/`
 
    Basic layout components
-* `material/`
+* `ui-material/`
 
    Set of UI components built according to the Material spec
-* `platform/`
+* `ui-platform/`
 
    Internal implementation that allows separation of android implementation from host-side tests
-* `test/`
+* `ui-test/`
 
    Testing framework
-* `text/`
+* `ui-text/`
 
    Text engine
 
diff --git a/ui/integration-tests/benchmark/build.gradle b/ui/integration-tests/benchmark/build.gradle
index a9052d9..3d0f974 100644
--- a/ui/integration-tests/benchmark/build.gradle
+++ b/ui/integration-tests/benchmark/build.gradle
@@ -28,13 +28,13 @@
 
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
-    androidTestImplementation(project(":ui-integration-tests"))
+    androidTestImplementation(project(":ui:integration-tests:test"))
     androidTestImplementation(project(":benchmark"))
-    androidTestImplementation(project(":ui-core"))
-    androidTestImplementation(project(":ui-test"))
-    androidTestImplementation(project(":ui-material"))
-    androidTestImplementation(project(":ui-platform"))
-    androidTestImplementation(project(":ui-framework"))
+    androidTestImplementation(project(":ui:ui-core"))
+    androidTestImplementation(project(":ui:ui-test"))
+    androidTestImplementation(project(":ui:ui-material"))
+    androidTestImplementation(project(":ui:ui-platform"))
+    androidTestImplementation(project(":ui:ui-framework"))
     androidTestImplementation(project(":compose:compose-runtime"))
     androidTestImplementation 'androidx.test.ext:junit:1.1.0'
     androidTestImplementation(KOTLIN_COMPOSE_STDLIB)
diff --git a/ui/demos/OWNERS b/ui/integration-tests/demos/OWNERS
similarity index 100%
rename from ui/demos/OWNERS
rename to ui/integration-tests/demos/OWNERS
diff --git a/ui/demos/build.gradle b/ui/integration-tests/demos/build.gradle
similarity index 62%
rename from ui/demos/build.gradle
rename to ui/integration-tests/demos/build.gradle
index 4fed58b..ca3b08d 100644
--- a/ui/demos/build.gradle
+++ b/ui/integration-tests/demos/build.gradle
@@ -9,15 +9,15 @@
 }
 
 dependencies {
-    implementation(project(":ui-android-view"))
-    implementation(project(":ui-animation:integration-tests:ui-animation-demos"))
-    implementation(project(":ui-framework:integration-tests:ui-framework-demos"))
-    implementation(project(":ui-layout:integration-tests:ui-layout-demos"))
-    implementation(project(":ui-material:integration-tests:ui-material-demos"))
-    implementation(project(":ui-text:integration-tests:ui-text-demos"))
+    implementation(project(":ui:ui-android-view"))
+    implementation(project(":ui:ui-animation:integration-tests:ui-animation-demos"))
+    implementation(project(":ui:ui-framework:integration-tests:ui-framework-demos"))
+    implementation(project(":ui:ui-layout:integration-tests:ui-layout-demos"))
+    implementation(project(":ui:ui-material:integration-tests:ui-material-demos"))
+    implementation(project(":ui:ui-text:integration-tests:ui-text-demos"))
     implementation(KOTLIN_COMPOSE_STDLIB)
 
-    androidTestImplementation project(':ui-test')
+    androidTestImplementation project(':ui:ui-test')
     androidTestImplementation(JUNIT)
     androidTestImplementation('androidx.test.ext:junit:1.1.0')
     androidTestImplementation(ANDROIDX_TEST_RULES)
diff --git a/ui/demos/src/main/AndroidManifest.xml b/ui/integration-tests/demos/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/demos/src/main/AndroidManifest.xml
rename to ui/integration-tests/demos/src/main/AndroidManifest.xml
diff --git a/ui/demos/src/main/ic_launcher-web.png b/ui/integration-tests/demos/src/main/ic_launcher-web.png
similarity index 100%
rename from ui/demos/src/main/ic_launcher-web.png
rename to ui/integration-tests/demos/src/main/ic_launcher-web.png
Binary files differ
diff --git a/ui/demos/src/main/java/androidx/ui/demos/MainActivity.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/MainActivity.kt
similarity index 100%
rename from ui/demos/src/main/java/androidx/ui/demos/MainActivity.kt
rename to ui/integration-tests/demos/src/main/java/androidx/ui/demos/MainActivity.kt
diff --git a/ui/demos/src/main/res/drawable-nodpi/test.png b/ui/integration-tests/demos/src/main/res/drawable-nodpi/test.png
similarity index 100%
rename from ui/demos/src/main/res/drawable-nodpi/test.png
rename to ui/integration-tests/demos/src/main/res/drawable-nodpi/test.png
Binary files differ
diff --git a/ui/demos/src/main/res/drawable-v24/ic_launcher_foreground.xml b/ui/integration-tests/demos/src/main/res/drawable-v24/ic_launcher_foreground.xml
similarity index 100%
rename from ui/demos/src/main/res/drawable-v24/ic_launcher_foreground.xml
rename to ui/integration-tests/demos/src/main/res/drawable-v24/ic_launcher_foreground.xml
diff --git a/ui/demos/src/main/res/drawable/ic_launcher_background.xml b/ui/integration-tests/demos/src/main/res/drawable/ic_launcher_background.xml
similarity index 100%
rename from ui/demos/src/main/res/drawable/ic_launcher_background.xml
rename to ui/integration-tests/demos/src/main/res/drawable/ic_launcher_background.xml
diff --git a/ui/demos/src/main/res/drawable/launch_background.xml b/ui/integration-tests/demos/src/main/res/drawable/launch_background.xml
similarity index 100%
rename from ui/demos/src/main/res/drawable/launch_background.xml
rename to ui/integration-tests/demos/src/main/res/drawable/launch_background.xml
diff --git a/ui/demos/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/ui/integration-tests/demos/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
similarity index 100%
rename from ui/demos/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
rename to ui/integration-tests/demos/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
diff --git a/ui/demos/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/ui/integration-tests/demos/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
similarity index 100%
rename from ui/demos/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
rename to ui/integration-tests/demos/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
diff --git a/ui/demos/src/main/res/mipmap-hdpi/ic_launcher.png b/ui/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-hdpi/ic_launcher.png
rename to ui/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-hdpi/ic_launcher_round.png b/ui/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher_round.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-hdpi/ic_launcher_round.png
rename to ui/integration-tests/demos/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-mdpi/ic_launcher.png b/ui/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-mdpi/ic_launcher.png
rename to ui/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-mdpi/ic_launcher_round.png b/ui/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher_round.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-mdpi/ic_launcher_round.png
rename to ui/integration-tests/demos/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-xhdpi/ic_launcher.png b/ui/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to ui/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/ui/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher_round.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-xhdpi/ic_launcher_round.png
rename to ui/integration-tests/demos/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-xxhdpi/ic_launcher.png b/ui/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to ui/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/ui/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
rename to ui/integration-tests/demos/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/ui/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to ui/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/ui/demos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/ui/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
similarity index 100%
rename from ui/demos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
rename to ui/integration-tests/demos/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/ui/integration-tests/build.gradle b/ui/integration-tests/test/build.gradle
similarity index 83%
rename from ui/integration-tests/build.gradle
rename to ui/integration-tests/test/build.gradle
index dd1e2b8..899c4ea 100644
--- a/ui/integration-tests/build.gradle
+++ b/ui/integration-tests/test/build.gradle
@@ -14,6 +14,9 @@
  * limitations under the License.
  */
 
+
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
 import static androidx.build.dependencies.DependenciesKt.*
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
@@ -28,11 +31,11 @@
 
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
-    implementation(project(":ui-core"))
-    implementation(project(":ui-test"))
-    implementation(project(":ui-material"))
-    implementation(project(":ui-platform"))
-    implementation(project(":ui-framework"))
+    implementation(project(":ui:ui-core"))
+    implementation(project(":ui:ui-test"))
+    implementation(project(":ui:ui-material"))
+    implementation(project(":ui:ui-platform"))
+    implementation(project(":ui:ui-framework"))
     implementation(project(":compose:compose-runtime"))
 
     androidTestImplementation 'androidx.test.ext:junit:1.1.0'
@@ -51,7 +54,7 @@
     description = "UI Integration Tests"
 }
 
-tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
+tasks.withType(KotlinCompile).all {
     kotlinOptions {
         useIR = true
     }
diff --git a/ui/integration-tests/src/androidTest/AndroidManifest.xml b/ui/integration-tests/test/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/integration-tests/src/androidTest/AndroidManifest.xml
rename to ui/integration-tests/test/src/androidTest/AndroidManifest.xml
diff --git a/ui/integration-tests/src/androidTest/java/androidx/ui/test/ColoredRectTest.kt b/ui/integration-tests/test/src/androidTest/java/androidx/ui/test/ColoredRectTest.kt
similarity index 100%
rename from ui/integration-tests/src/androidTest/java/androidx/ui/test/ColoredRectTest.kt
rename to ui/integration-tests/test/src/androidTest/java/androidx/ui/test/ColoredRectTest.kt
diff --git a/ui/integration-tests/src/main/AndroidManifest.xml b/ui/integration-tests/test/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/integration-tests/src/main/AndroidManifest.xml
rename to ui/integration-tests/test/src/main/AndroidManifest.xml
diff --git a/ui/integration-tests/src/main/java/androidx/ui/test/RectanglesInColumnTestCase.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/RectanglesInColumnTestCase.kt
similarity index 100%
rename from ui/integration-tests/src/main/java/androidx/ui/test/RectanglesInColumnTestCase.kt
rename to ui/integration-tests/test/src/main/java/androidx/ui/test/RectanglesInColumnTestCase.kt
diff --git a/ui/integration-tests/src/main/java/androidx/ui/test/TestUtils.kt b/ui/integration-tests/test/src/main/java/androidx/ui/test/TestUtils.kt
similarity index 100%
rename from ui/integration-tests/src/main/java/androidx/ui/test/TestUtils.kt
rename to ui/integration-tests/test/src/main/java/androidx/ui/test/TestUtils.kt
diff --git a/ui/platform/api/restricted_1.0.0-alpha01.txt b/ui/platform/api/restricted_1.0.0-alpha01.txt
deleted file mode 100644
index 1b582dc9..0000000
--- a/ui/platform/api/restricted_1.0.0-alpha01.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-// Signature format: 3.0
-package androidx.ui.core {
-
-  public final class AndroidCraneView extends android.view.ViewGroup implements androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
-  }
-
-}
-
diff --git a/ui/platform/api/restricted_current.txt b/ui/platform/api/restricted_current.txt
deleted file mode 100644
index 1b582dc9..0000000
--- a/ui/platform/api/restricted_current.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-// Signature format: 3.0
-package androidx.ui.core {
-
-  public final class AndroidCraneView extends android.view.ViewGroup implements androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
-  }
-
-}
-
diff --git a/ui/settings.gradle b/ui/settings.gradle
index 019d352..ae57da3 100644
--- a/ui/settings.gradle
+++ b/ui/settings.gradle
@@ -22,35 +22,36 @@
 includeProject(":annotation:annotation-sampled", "../annotation/annotation-sampled")
 includeProject(":benchmark", "../benchmark")
 includeProject(":benchmark:benchmark-gradle-plugin", "../benchmark/gradle-plugin")
-includeProject(":compose:compose-runtime", "../compose/compose-runtime")
+includeProject(":compose:compose-compiler", "../compose/compose-compiler")
 includeProject(":compose:compose-compiler-hosted", "../compose/compose-compiler-hosted")
 includeProject(":compose:compose-compiler-hosted:integration-tests", "../compose/compose-compiler-hosted/integration-tests")
-includeProject(":compose:compose-compiler", "../compose/compose-compiler")
 includeProject(":compose:compose-ide-plugin", "../compose/compose-ide-plugin")
-includeProject(":ui-android-text", "android-text")
-includeProject(":ui-text", "text")
-includeProject(":ui-text:integration-tests:ui-text-demos", "text/integration-tests/text-demos")
-includeProject(":ui-core", "core")
-includeProject(":ui-foundation", "foundation")
-includeProject(":ui-framework", "framework")
-includeProject(":ui-framework:integration-tests:ui-framework-demos", "framework/integration-tests/framework-demos")
-includeProject(":ui-material", "material")
-includeProject(":ui-material:integration-tests:ui-material-demos", "material/integration-tests/material-demos")
-includeProject(":ui-material:integration-tests:samples", "material/integration-tests/samples")
-includeProject(":ui-material:integration-tests:ui-material-studies", "material/integration-tests/material-studies")
-includeProject(":ui-platform", "platform")
-includeProject(":ui-test", "test")
-includeProject(":ui-android-view", "android-view")
-includeProject(":ui-android-view-non-ir", "android-view-non-ir")
-includeProject(":ui-layout", "layout")
-includeProject(":ui-layout:integration-tests:ui-layout-demos", "layout/integration-tests/layout-demos")
-includeProject(":ui-layout:integration-tests:samples", "layout/integration-tests/samples")
-includeProject(":ui-demos", "demos")
-includeProject(":ui-animation-core", "animation-core")
-includeProject(":ui-animation", "animation")
-includeProject(":ui-animation:integration-tests:ui-animation-demos", "animation/integration-tests/animation-demos")
-includeProject(":ui-integration-tests", "integration-tests")
-includeProject(":ui-integration-tests:benchmark", "integration-tests/benchmark")
+includeProject(":compose:compose-runtime", "../compose/compose-runtime")
+includeProject(":ui:integration-tests:benchmark", "integration-tests/benchmark")
+includeProject(":ui:integration-tests:demos", "integration-tests/demos")
+includeProject(":ui:integration-tests:test", "integration-tests/test")
+includeProject(":ui:ui-android-text", "ui-android-text")
+includeProject(":ui:ui-android-view", "ui-android-view")
+includeProject(":ui:ui-android-view-non-ir", "ui-android-view-non-ir")
+includeProject(":ui:ui-animation", "ui-animation")
+includeProject(":ui:ui-animation-core", "ui-animation-core")
+includeProject(":ui:ui-animation:integration-tests:ui-animation-demos", "ui-animation/integration-tests/animation-demos")
+includeProject(":ui:ui-core", "ui-core")
+includeProject(":ui:ui-foundation", "ui-foundation")
+includeProject(":ui:ui-framework", "ui-framework")
+includeProject(":ui:ui-framework:integration-tests:ui-framework-demos", "ui-framework/integration-tests/framework-demos")
+includeProject(":ui:ui-framework:integration-tests:samples", "ui-framework/integration-tests/samples")
+includeProject(":ui:ui-layout", "ui-layout")
+includeProject(":ui:ui-layout:integration-tests:samples", "ui-layout/integration-tests/samples")
+includeProject(":ui:ui-layout:integration-tests:ui-layout-demos", "ui-layout/integration-tests/layout-demos")
+includeProject(":ui:ui-material", "ui-material")
+includeProject(":ui:ui-material:integration-tests:samples", "ui-material/integration-tests/samples")
+includeProject(":ui:ui-material:integration-tests:ui-material-demos", "ui-material/integration-tests/material-demos")
+includeProject(":ui:ui-material:integration-tests:ui-material-studies", "ui-material/integration-tests/material-studies")
+includeProject(":ui:ui-platform", "ui-platform")
+includeProject(":ui:ui-test", "ui-test")
+includeProject(":ui:ui-text", "ui-text")
+includeProject(":ui:ui-text:integration-tests:ui-text-demos", "ui-text/integration-tests/text-demos")
 
 /////////////////////////////
 //
diff --git a/ui/text/api/restricted_current.txt b/ui/text/api/restricted_current.txt
deleted file mode 100644
index 0a43126..0000000
--- a/ui/text/api/restricted_current.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-// Signature format: 3.0
-package androidx.ui.input {
-
-
-
-
-
-
-
-
-  public final class EditorState {
-  }
-
-
-
-
-
-
-
-
-}
-
-package androidx.ui.text {
-
-  public final class TextPainter {
-  }
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class TextSpan {
-    ctor public TextSpan(androidx.ui.text.TextStyle? style, String? text, java.util.List<androidx.ui.text.TextSpan> children);
-    ctor public TextSpan();
-    method public java.util.List<androidx.ui.text.TextSpan> getChildren();
-    method public androidx.ui.text.TextStyle? getStyle();
-    method public String? getText();
-    method public String toPlainText();
-    method public boolean visitTextSpan(kotlin.jvm.functions.Function1<? super androidx.ui.text.TextSpan,java.lang.Boolean> visitor);
-  }
-
-  public final class TextSpanKt {
-    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.ui.text.AnnotatedString toAnnotatedString(androidx.ui.text.TextSpan);
-  }
-
-}
-
-package androidx.ui.text.platform {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class AndroidFontResourceLoader implements androidx.ui.text.font.Font.ResourceLoader<android.graphics.Typeface> {
-    ctor public AndroidFontResourceLoader(android.content.Context context);
-    method public android.content.Context getContext();
-    method public android.graphics.Typeface load(androidx.ui.text.font.Font font);
-  }
-
-}
-
diff --git a/ui/text/src/main/java/androidx/ui/text/style/ParagraphStyle.kt b/ui/text/src/main/java/androidx/ui/text/style/ParagraphStyle.kt
deleted file mode 100644
index 6d426e0..0000000
--- a/ui/text/src/main/java/androidx/ui/text/style/ParagraphStyle.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.ui.text.style
-
-/**
- * An opaque object that determines the configuration used by
- * [ParagraphBuilder] to position lines within a [Paragraph] of text.
- *
- * Creates a new ParagraphStyle object.
- *
- * @param textAlign The alignment of the text within the lines of the
- *   paragraph. If the last line is ellipsized (see `ellipsis` below), the
- *   alignment is applied to that line after it has been truncated but before
- *   the ellipsis has been added.
- *
- * @param textDirection The directionality of the text, left-to-right (e.g.
- *   Norwegian) or right-to-left (e.g. Hebrew). This controls the overall
- *   directionality of the paragraph, as well as the meaning of
- *   [TextAlign.Start] and [TextAlign.End] in the `textAlign` field.
- *
- * @param textIndent The amount of indentation applied to the affected paragraph. A paragraph is
- *   affected if any of its character is covered by the TextSpan.
- *
- * @param lineHeight The minimum height of the line boxes, as a multiple of the
- *   font size.
- *
- * @param maxLines The maximum number of lines painted. Lines beyond this
- *   number are silently dropped. For example, if `maxLines` is 1, then only
- *   one line is rendered.
- *
- * @param ellipsis Whether to ellipsize overflowing text. If `maxLines` is
- *   not null, ellipsis is applied to the last rendered line, if that line
- *   overflows the width constraints. If `maxLines` is null, it will never
- *   be applied. If ellipsis is null, the system default will be adopted.
- */
-// TODO(siyamed) will delete this class.
-data class ParagraphStyle constructor(
-    val textAlign: TextAlign? = null,
-    val textDirection: TextDirection? = null,
-    val textIndent: TextIndent? = null,
-    val lineHeight: Float? = null,
-    val maxLines: Int? = null,
-    val ellipsis: Boolean? = null
-) {
-    init {
-        lineHeight?.let {
-            assert(it >= 0f) {
-                "lineHeight can't be negative ($it)"
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/ui/android-text/OWNERS b/ui/ui-android-text/OWNERS
similarity index 100%
rename from ui/android-text/OWNERS
rename to ui/ui-android-text/OWNERS
diff --git a/ui/android-text/api/1.0.0-alpha01.txt b/ui/ui-android-text/api/1.0.0-alpha01.txt
similarity index 100%
rename from ui/android-text/api/1.0.0-alpha01.txt
rename to ui/ui-android-text/api/1.0.0-alpha01.txt
diff --git a/ui/android-text/api/current.txt b/ui/ui-android-text/api/current.txt
similarity index 100%
rename from ui/android-text/api/current.txt
rename to ui/ui-android-text/api/current.txt
diff --git a/ui/android-text/api/res-1.0.0-alpha01.txt b/ui/ui-android-text/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/android-text/api/res-1.0.0-alpha01.txt
rename to ui/ui-android-text/api/res-1.0.0-alpha01.txt
diff --git a/ui/android-text/api/restricted_1.0.0-alpha01.txt b/ui/ui-android-text/api/restricted_1.0.0-alpha01.txt
similarity index 100%
rename from ui/android-text/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-android-text/api/restricted_1.0.0-alpha01.txt
diff --git a/ui/android-text/api/restricted_current.txt b/ui/ui-android-text/api/restricted_current.txt
similarity index 100%
rename from ui/android-text/api/restricted_current.txt
rename to ui/ui-android-text/api/restricted_current.txt
diff --git a/ui/android-text/build.gradle b/ui/ui-android-text/build.gradle
similarity index 100%
rename from ui/android-text/build.gradle
rename to ui/ui-android-text/build.gradle
diff --git a/ui/android-text/lint-baseline.xml b/ui/ui-android-text/lint-baseline.xml
similarity index 100%
rename from ui/android-text/lint-baseline.xml
rename to ui/ui-android-text/lint-baseline.xml
diff --git a/ui/android-text/src/androidTest/AndroidManifest.xml b/ui/ui-android-text/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/android-text/src/androidTest/AndroidManifest.xml
rename to ui/ui-android-text/src/androidTest/AndroidManifest.xml
diff --git a/ui/android-text/src/androidTest/assets/sample_font.ttf b/ui/ui-android-text/src/androidTest/assets/sample_font.ttf
similarity index 100%
rename from ui/android-text/src/androidTest/assets/sample_font.ttf
rename to ui/ui-android-text/src/androidTest/assets/sample_font.ttf
Binary files differ
diff --git a/ui/android-text/src/androidTest/assets/sample_font.ttx b/ui/ui-android-text/src/androidTest/assets/sample_font.ttx
similarity index 100%
rename from ui/android-text/src/androidTest/assets/sample_font.ttx
rename to ui/ui-android-text/src/androidTest/assets/sample_font.ttx
diff --git a/ui/android-text/src/androidTest/java/androidx/text/BoringLayoutCompatTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/BoringLayoutCompatTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/BoringLayoutCompatTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/BoringLayoutCompatTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/StaticLayoutCompatTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/StaticLayoutCompatTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/StaticLayoutCompatTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/StaticLayoutCompatTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/TextLayoutSpanTest.kt b/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutSpanTest.kt
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/TextLayoutSpanTest.kt
rename to ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutSpanTest.kt
diff --git a/ui/android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt b/ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
rename to ui/ui-android-text/src/androidTest/java/androidx/text/TextLayoutTest.kt
diff --git a/ui/android-text/src/androidTest/java/androidx/text/selection/WordBoundaryTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/selection/WordBoundaryTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/selection/WordBoundaryTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/selection/WordBoundaryTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/selection/WordIteratorTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/selection/WordIteratorTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/selection/WordIteratorTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/selection/WordIteratorTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/style/BaselineShiftSpanTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/style/BaselineShiftSpanTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/style/BaselineShiftSpanTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/style/BaselineShiftSpanTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/style/FontFeatureSpanTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/style/FontFeatureSpanTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/style/FontFeatureSpanTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/style/FontFeatureSpanTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/style/LetterSpacingSpanTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/style/LetterSpacingSpanTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/style/LetterSpacingSpanTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/style/LetterSpacingSpanTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/style/ShadowSpanTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/style/ShadowSpanTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/style/ShadowSpanTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/style/ShadowSpanTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/style/SkewXSpanTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/style/SkewXSpanTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/style/SkewXSpanTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/style/SkewXSpanTest.java
diff --git a/ui/android-text/src/androidTest/java/androidx/text/style/TypefaceSpanTest.java b/ui/ui-android-text/src/androidTest/java/androidx/text/style/TypefaceSpanTest.java
similarity index 100%
rename from ui/android-text/src/androidTest/java/androidx/text/style/TypefaceSpanTest.java
rename to ui/ui-android-text/src/androidTest/java/androidx/text/style/TypefaceSpanTest.java
diff --git a/ui/android-text/src/main/AndroidManifest.xml b/ui/ui-android-text/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/android-text/src/main/AndroidManifest.xml
rename to ui/ui-android-text/src/main/AndroidManifest.xml
diff --git a/ui/android-text/src/main/java/androidx/text/BoringLayoutCompat.java b/ui/ui-android-text/src/main/java/androidx/text/BoringLayoutCompat.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/BoringLayoutCompat.java
rename to ui/ui-android-text/src/main/java/androidx/text/BoringLayoutCompat.java
diff --git a/ui/android-text/src/main/java/androidx/text/CharSequenceCharacterIterator.java b/ui/ui-android-text/src/main/java/androidx/text/CharSequenceCharacterIterator.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/CharSequenceCharacterIterator.java
rename to ui/ui-android-text/src/main/java/androidx/text/CharSequenceCharacterIterator.java
diff --git a/ui/android-text/src/main/java/androidx/text/LayoutCompat.java b/ui/ui-android-text/src/main/java/androidx/text/LayoutCompat.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/LayoutCompat.java
rename to ui/ui-android-text/src/main/java/androidx/text/LayoutCompat.java
diff --git a/ui/android-text/src/main/java/androidx/text/Preconditions.java b/ui/ui-android-text/src/main/java/androidx/text/Preconditions.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/Preconditions.java
rename to ui/ui-android-text/src/main/java/androidx/text/Preconditions.java
diff --git a/ui/android-text/src/main/java/androidx/text/StaticLayoutCompat.java b/ui/ui-android-text/src/main/java/androidx/text/StaticLayoutCompat.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/StaticLayoutCompat.java
rename to ui/ui-android-text/src/main/java/androidx/text/StaticLayoutCompat.java
diff --git a/ui/android-text/src/main/java/androidx/text/TextLayout.kt b/ui/ui-android-text/src/main/java/androidx/text/TextLayout.kt
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/TextLayout.kt
rename to ui/ui-android-text/src/main/java/androidx/text/TextLayout.kt
diff --git a/ui/android-text/src/main/java/androidx/text/selection/WordBoundary.java b/ui/ui-android-text/src/main/java/androidx/text/selection/WordBoundary.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/selection/WordBoundary.java
rename to ui/ui-android-text/src/main/java/androidx/text/selection/WordBoundary.java
diff --git a/ui/android-text/src/main/java/androidx/text/selection/WordIterator.java b/ui/ui-android-text/src/main/java/androidx/text/selection/WordIterator.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/selection/WordIterator.java
rename to ui/ui-android-text/src/main/java/androidx/text/selection/WordIterator.java
diff --git a/ui/android-text/src/main/java/androidx/text/style/BaselineShiftSpan.java b/ui/ui-android-text/src/main/java/androidx/text/style/BaselineShiftSpan.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/style/BaselineShiftSpan.java
rename to ui/ui-android-text/src/main/java/androidx/text/style/BaselineShiftSpan.java
diff --git a/ui/android-text/src/main/java/androidx/text/style/FontFeatureSpan.java b/ui/ui-android-text/src/main/java/androidx/text/style/FontFeatureSpan.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/style/FontFeatureSpan.java
rename to ui/ui-android-text/src/main/java/androidx/text/style/FontFeatureSpan.java
diff --git a/ui/android-text/src/main/java/androidx/text/style/LetterSpacingSpan.java b/ui/ui-android-text/src/main/java/androidx/text/style/LetterSpacingSpan.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/style/LetterSpacingSpan.java
rename to ui/ui-android-text/src/main/java/androidx/text/style/LetterSpacingSpan.java
diff --git a/ui/android-text/src/main/java/androidx/text/style/ShadowSpan.java b/ui/ui-android-text/src/main/java/androidx/text/style/ShadowSpan.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/style/ShadowSpan.java
rename to ui/ui-android-text/src/main/java/androidx/text/style/ShadowSpan.java
diff --git a/ui/android-text/src/main/java/androidx/text/style/SkewXSpan.java b/ui/ui-android-text/src/main/java/androidx/text/style/SkewXSpan.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/style/SkewXSpan.java
rename to ui/ui-android-text/src/main/java/androidx/text/style/SkewXSpan.java
diff --git a/ui/android-text/src/main/java/androidx/text/style/TypefaceSpan.java b/ui/ui-android-text/src/main/java/androidx/text/style/TypefaceSpan.java
similarity index 100%
rename from ui/android-text/src/main/java/androidx/text/style/TypefaceSpan.java
rename to ui/ui-android-text/src/main/java/androidx/text/style/TypefaceSpan.java
diff --git a/ui/android-view-non-ir/OWNERS b/ui/ui-android-view-non-ir/OWNERS
similarity index 100%
rename from ui/android-view-non-ir/OWNERS
rename to ui/ui-android-view-non-ir/OWNERS
diff --git a/ui/android-view-non-ir/build.gradle b/ui/ui-android-view-non-ir/build.gradle
similarity index 98%
rename from ui/android-view-non-ir/build.gradle
rename to ui/ui-android-view-non-ir/build.gradle
index 4bbe748..3dd4e30 100644
--- a/ui/android-view-non-ir/build.gradle
+++ b/ui/ui-android-view-non-ir/build.gradle
@@ -28,7 +28,7 @@
 }
 
 dependencies {
-    api project(":ui-core")
+    api project(":ui:ui-core")
     api project(":compose:compose-runtime")
     api(KOTLIN_COMPOSE_STDLIB)
     api(KOTLIN_COMPOSE_COROUTINES)
diff --git a/ui/android-view-non-ir/src/androidTest/AndroidManifest.xml b/ui/ui-android-view-non-ir/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/android-view-non-ir/src/androidTest/AndroidManifest.xml
rename to ui/ui-android-view-non-ir/src/androidTest/AndroidManifest.xml
diff --git a/ui/android-view-non-ir/src/main/AndroidManifest.xml b/ui/ui-android-view-non-ir/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/android-view-non-ir/src/main/AndroidManifest.xml
rename to ui/ui-android-view-non-ir/src/main/AndroidManifest.xml
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AdapterViewInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CalendarViewInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/CompoundButtonInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DatePickerInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DimensionExtensions.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DimensionExtensions.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DimensionExtensions.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/DimensionExtensions.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/EditTextInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/InputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/InputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/InputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/InputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutBuilder.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutBuilder.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutBuilder.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/LayoutBuilder.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/NumberPickerInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RadioGroupInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/RatingBarInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Ref.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Ref.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Ref.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Ref.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SearchViewInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SeekBarInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SwitchAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SwitchAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SwitchAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/SwitchAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TextViewAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TextViewAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TextViewAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TextViewAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerInputController.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerInputController.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerInputController.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/TimePickerInputController.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Utils.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Utils.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Utils.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/Utils.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ViewAttributeAdapter.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ViewAttributeAdapter.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ViewAttributeAdapter.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/adapters/ViewAttributeAdapter.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/ConflictsWith.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/ConflictsWith.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/ConflictsWith.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/ConflictsWith.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/Required.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/Required.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/Required.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/Required.kt
diff --git a/ui/android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/RequiresOneOf.kt b/ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/RequiresOneOf.kt
similarity index 100%
rename from ui/android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/RequiresOneOf.kt
rename to ui/ui-android-view-non-ir/src/main/java/androidx/ui/androidview/annotations/RequiresOneOf.kt
diff --git a/ui/android-view/OWNERS b/ui/ui-android-view/OWNERS
similarity index 100%
rename from ui/android-view/OWNERS
rename to ui/ui-android-view/OWNERS
diff --git a/ui/android-view/build.gradle b/ui/ui-android-view/build.gradle
similarity index 96%
rename from ui/android-view/build.gradle
rename to ui/ui-android-view/build.gradle
index 5efa05d..7f70b95 100644
--- a/ui/android-view/build.gradle
+++ b/ui/ui-android-view/build.gradle
@@ -31,9 +31,9 @@
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
-    api project(":ui-core")
+    api project(":ui:ui-core")
     api project(":compose:compose-runtime")
-    api project(":ui-android-view-non-ir")
+    api project(":ui:ui-android-view-non-ir")
     api(KOTLIN_COMPOSE_STDLIB)
     api(KOTLIN_COMPOSE_COROUTINES)
 
diff --git a/ui/android-view/src/androidTest/AndroidManifest.xml b/ui/ui-android-view/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/android-view/src/androidTest/AndroidManifest.xml
rename to ui/ui-android-view/src/androidTest/AndroidManifest.xml
diff --git a/ui/android-view/src/main/AndroidManifest.xml b/ui/ui-android-view/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/android-view/src/main/AndroidManifest.xml
rename to ui/ui-android-view/src/main/AndroidManifest.xml
diff --git a/ui/android-view/src/main/java/androidx/ui/androidview/WebComponent.kt b/ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponent.kt
similarity index 100%
rename from ui/android-view/src/main/java/androidx/ui/androidview/WebComponent.kt
rename to ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponent.kt
diff --git a/ui/android-view/src/main/java/androidx/ui/androidview/WebComponentActivity.kt b/ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponentActivity.kt
similarity index 100%
rename from ui/android-view/src/main/java/androidx/ui/androidview/WebComponentActivity.kt
rename to ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponentActivity.kt
diff --git a/ui/animation-core/OWNERS b/ui/ui-animation-core/OWNERS
similarity index 100%
rename from ui/animation-core/OWNERS
rename to ui/ui-animation-core/OWNERS
diff --git a/ui/animation-core/build.gradle b/ui/ui-animation-core/build.gradle
similarity index 98%
rename from ui/animation-core/build.gradle
rename to ui/ui-animation-core/build.gradle
index f23a8fe..a77691e 100644
--- a/ui/animation-core/build.gradle
+++ b/ui/ui-animation-core/build.gradle
@@ -31,7 +31,7 @@
 dependencies {
     api "androidx.annotation:annotation:1.0.0"
     api "androidx.dynamicanimation:dynamicanimation:1.0.0"
-    api project(':ui-core')
+    api project(':ui:ui-core')
     api(KOTLIN_COMPOSE_STDLIB)
 
     testImplementation(JUNIT)
diff --git a/ui/animation-core/src/androidTest/AndroidManifest.xml b/ui/ui-animation-core/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/animation-core/src/androidTest/AndroidManifest.xml
rename to ui/ui-animation-core/src/androidTest/AndroidManifest.xml
diff --git a/ui/animation-core/src/main/AndroidManifest.xml b/ui/ui-animation-core/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/animation-core/src/main/AndroidManifest.xml
rename to ui/ui-animation-core/src/main/AndroidManifest.xml
diff --git a/ui/animation-core/src/main/java/androidx/animation/AnimatedValue.kt b/ui/ui-animation-core/src/main/java/androidx/animation/AnimatedValue.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/AnimatedValue.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/AnimatedValue.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/Animation.kt b/ui/ui-animation-core/src/main/java/androidx/animation/Animation.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/Animation.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/Animation.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/AnimationBuilder.kt b/ui/ui-animation-core/src/main/java/androidx/animation/AnimationBuilder.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/AnimationBuilder.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/AnimationBuilder.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/DecayAnimation.kt b/ui/ui-animation-core/src/main/java/androidx/animation/DecayAnimation.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/DecayAnimation.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/DecayAnimation.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/DynamicTargetAnimation.kt b/ui/ui-animation-core/src/main/java/androidx/animation/DynamicTargetAnimation.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/DynamicTargetAnimation.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/DynamicTargetAnimation.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/Easing.kt b/ui/ui-animation-core/src/main/java/androidx/animation/Easing.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/Easing.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/Easing.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/SpringSimulation.kt b/ui/ui-animation-core/src/main/java/androidx/animation/SpringSimulation.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/SpringSimulation.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/SpringSimulation.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/TransitionAnimation.kt b/ui/ui-animation-core/src/main/java/androidx/animation/TransitionAnimation.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/TransitionAnimation.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/TransitionAnimation.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/TransitionDefinition.kt b/ui/ui-animation-core/src/main/java/androidx/animation/TransitionDefinition.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/TransitionDefinition.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/TransitionDefinition.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/TransitionState.kt b/ui/ui-animation-core/src/main/java/androidx/animation/TransitionState.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/TransitionState.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/TransitionState.kt
diff --git a/ui/animation-core/src/main/java/androidx/animation/ValueHolder.kt b/ui/ui-animation-core/src/main/java/androidx/animation/ValueHolder.kt
similarity index 100%
rename from ui/animation-core/src/main/java/androidx/animation/ValueHolder.kt
rename to ui/ui-animation-core/src/main/java/androidx/animation/ValueHolder.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/AnimationTestUtils.kt b/ui/ui-animation-core/src/test/java/androidx/animation/AnimationTestUtils.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/AnimationTestUtils.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/AnimationTestUtils.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/DecayAnimationTest.kt b/ui/ui-animation-core/src/test/java/androidx/animation/DecayAnimationTest.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/DecayAnimationTest.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/DecayAnimationTest.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/EasingTest.kt b/ui/ui-animation-core/src/test/java/androidx/animation/EasingTest.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/EasingTest.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/EasingTest.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/KeyframeAnimationTest.kt b/ui/ui-animation-core/src/test/java/androidx/animation/KeyframeAnimationTest.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/KeyframeAnimationTest.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/KeyframeAnimationTest.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/PhysicsAnimationTest.kt b/ui/ui-animation-core/src/test/java/androidx/animation/PhysicsAnimationTest.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/PhysicsAnimationTest.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/PhysicsAnimationTest.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/RepeatableAnimationTest.kt b/ui/ui-animation-core/src/test/java/androidx/animation/RepeatableAnimationTest.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/RepeatableAnimationTest.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/RepeatableAnimationTest.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/SnapAnimationTest.kt b/ui/ui-animation-core/src/test/java/androidx/animation/SnapAnimationTest.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/SnapAnimationTest.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/SnapAnimationTest.kt
diff --git a/ui/animation-core/src/test/java/androidx/animation/TweenAnimationTest.kt b/ui/ui-animation-core/src/test/java/androidx/animation/TweenAnimationTest.kt
similarity index 100%
rename from ui/animation-core/src/test/java/androidx/animation/TweenAnimationTest.kt
rename to ui/ui-animation-core/src/test/java/androidx/animation/TweenAnimationTest.kt
diff --git a/ui/animation/OWNERS b/ui/ui-animation/OWNERS
similarity index 100%
rename from ui/animation/OWNERS
rename to ui/ui-animation/OWNERS
diff --git a/ui/animation/build.gradle b/ui/ui-animation/build.gradle
similarity index 98%
rename from ui/animation/build.gradle
rename to ui/ui-animation/build.gradle
index 4ce26a6..cb3f55d 100644
--- a/ui/animation/build.gradle
+++ b/ui/ui-animation/build.gradle
@@ -31,7 +31,7 @@
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
-    api project(':ui-animation-core')
+    api project(':ui:ui-animation-core')
     api project(':compose:compose-runtime')
     api(KOTLIN_COMPOSE_STDLIB)
 
diff --git a/ui/animation/integration-tests/animation-demos/build.gradle b/ui/ui-animation/integration-tests/animation-demos/build.gradle
similarity index 84%
rename from ui/animation/integration-tests/animation-demos/build.gradle
rename to ui/ui-animation/integration-tests/animation-demos/build.gradle
index 4c05299..777120d 100644
--- a/ui/animation/integration-tests/animation-demos/build.gradle
+++ b/ui/ui-animation/integration-tests/animation-demos/build.gradle
@@ -20,10 +20,10 @@
 
     implementation(KOTLIN_COMPOSE_STDLIB)
     implementation project(":compose:compose-runtime")
-    implementation project(':ui-animation')
-    implementation project(":ui-framework")
-    implementation project(":ui-layout")
-    implementation project(":ui-text")
+    implementation project(':ui:ui-animation')
+    implementation project(":ui:ui-framework")
+    implementation project(":ui:ui-layout")
+    implementation project(":ui:ui-text")
 }
 
 androidx {
diff --git a/ui/animation/integration-tests/animation-demos/src/main/AndroidManifest.xml b/ui/ui-animation/integration-tests/animation-demos/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/AndroidManifest.xml
rename to ui/ui-animation/integration-tests/animation-demos/src/main/AndroidManifest.xml
diff --git a/ui/animation/integration-tests/animation-demos/src/main/ic_launcher-web.png b/ui/ui-animation/integration-tests/animation-demos/src/main/ic_launcher-web.png
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/ic_launcher-web.png
rename to ui/ui-animation/integration-tests/animation-demos/src/main/ic_launcher-web.png
Binary files differ
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/AnimatableSeekBar.kt
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/FancyScrolling.kt
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloAnimationActivity.kt
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/HelloGestureBasedAnimationActivity.kt
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/RepeatedRotationActivity.kt
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SpringBackScrolling.kt
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/StateBasedRippleAnimation.kt
diff --git a/ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt
similarity index 100%
rename from ui/animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt
rename to ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/ui/animation/demos/SwipeToDismiss.kt
diff --git a/ui/animation/src/main/AndroidManifest.xml b/ui/ui-animation/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/animation/src/main/AndroidManifest.xml
rename to ui/ui-animation/src/main/AndroidManifest.xml
diff --git a/ui/animation/src/main/java/androidx/ui/animation/AnimatedValueEffects.kt b/ui/ui-animation/src/main/java/androidx/ui/animation/AnimatedValueEffects.kt
similarity index 100%
rename from ui/animation/src/main/java/androidx/ui/animation/AnimatedValueEffects.kt
rename to ui/ui-animation/src/main/java/androidx/ui/animation/AnimatedValueEffects.kt
diff --git a/ui/animation/src/main/java/androidx/ui/animation/Transition.kt b/ui/ui-animation/src/main/java/androidx/ui/animation/Transition.kt
similarity index 100%
rename from ui/animation/src/main/java/androidx/ui/animation/Transition.kt
rename to ui/ui-animation/src/main/java/androidx/ui/animation/Transition.kt
diff --git a/ui/core/OWNERS b/ui/ui-core/OWNERS
similarity index 100%
rename from ui/core/OWNERS
rename to ui/ui-core/OWNERS
diff --git a/ui/core/api/1.0.0-alpha01.txt b/ui/ui-core/api/1.0.0-alpha01.txt
similarity index 100%
rename from ui/core/api/1.0.0-alpha01.txt
rename to ui/ui-core/api/1.0.0-alpha01.txt
diff --git a/ui/core/api/api_lint.ignore b/ui/ui-core/api/api_lint.ignore
similarity index 100%
rename from ui/core/api/api_lint.ignore
rename to ui/ui-core/api/api_lint.ignore
diff --git a/ui/core/api/current.txt b/ui/ui-core/api/current.txt
similarity index 100%
rename from ui/core/api/current.txt
rename to ui/ui-core/api/current.txt
diff --git a/ui/core/api/res-1.0.0-alpha01.txt b/ui/ui-core/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/core/api/res-1.0.0-alpha01.txt
rename to ui/ui-core/api/res-1.0.0-alpha01.txt
diff --git a/ui/core/api/restricted_1.0.0-alpha01.txt b/ui/ui-core/api/restricted_1.0.0-alpha01.txt
similarity index 100%
rename from ui/core/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-core/api/restricted_1.0.0-alpha01.txt
diff --git a/ui/core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
similarity index 100%
rename from ui/core/api/restricted_current.txt
rename to ui/ui-core/api/restricted_current.txt
diff --git a/ui/core/build.gradle b/ui/ui-core/build.gradle
similarity index 100%
rename from ui/core/build.gradle
rename to ui/ui-core/build.gradle
diff --git a/ui/core/src/androidTest/AndroidManifest.xml b/ui/ui-core/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/core/src/androidTest/AndroidManifest.xml
rename to ui/ui-core/src/androidTest/AndroidManifest.xml
diff --git a/ui/core/src/androidTest/java/androidx/ui/core/DpDeviceTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/DpDeviceTest.kt
similarity index 100%
rename from ui/core/src/androidTest/java/androidx/ui/core/DpDeviceTest.kt
rename to ui/ui-core/src/androidTest/java/androidx/ui/core/DpDeviceTest.kt
diff --git a/ui/core/src/androidTest/java/androidx/ui/core/ImageTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/ImageTest.kt
similarity index 92%
rename from ui/core/src/androidTest/java/androidx/ui/core/ImageTest.kt
rename to ui/ui-core/src/androidTest/java/androidx/ui/core/ImageTest.kt
index edeae09..c7113ec 100644
--- a/ui/core/src/androidTest/java/androidx/ui/core/ImageTest.kt
+++ b/ui/ui-core/src/androidTest/java/androidx/ui/core/ImageTest.kt
@@ -16,6 +16,7 @@
 
 package androidx.ui.core
 
+import androidx.test.filters.SmallTest
 import androidx.ui.graphics.ColorSpace
 import androidx.ui.painting.Image
 import androidx.ui.painting.ImageConfig
@@ -25,12 +26,13 @@
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
 
+@SmallTest
 @RunWith(JUnit4::class)
 class ImageTest {
 
     @Test
     fun testCreatedImage() {
-        val cs = ColorSpace.get(ColorSpace.Named.DisplayP3)
+        val cs = ColorSpace.get(ColorSpace.Named.Srgb)
         val image = Image(
             width = 10,
             height = 20,
diff --git a/ui/core/src/androidTest/java/androidx/ui/core/SpDeviceTest.kt b/ui/ui-core/src/androidTest/java/androidx/ui/core/SpDeviceTest.kt
similarity index 100%
rename from ui/core/src/androidTest/java/androidx/ui/core/SpDeviceTest.kt
rename to ui/ui-core/src/androidTest/java/androidx/ui/core/SpDeviceTest.kt
diff --git a/ui/core/src/main/AndroidManifest.xml b/ui/ui-core/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/core/src/main/AndroidManifest.xml
rename to ui/ui-core/src/main/AndroidManifest.xml
diff --git a/ui/core/src/main/java/androidx/ui/MathHelpers.kt b/ui/ui-core/src/main/java/androidx/ui/MathHelpers.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/MathHelpers.kt
rename to ui/ui-core/src/main/java/androidx/ui/MathHelpers.kt
diff --git a/ui/core/src/main/java/androidx/ui/VertexMode.kt b/ui/ui-core/src/main/java/androidx/ui/VertexMode.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/VertexMode.kt
rename to ui/ui-core/src/main/java/androidx/ui/VertexMode.kt
diff --git a/ui/core/src/main/java/androidx/ui/Vertices.kt b/ui/ui-core/src/main/java/androidx/ui/Vertices.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/Vertices.kt
rename to ui/ui-core/src/main/java/androidx/ui/Vertices.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Constraints.kt b/ui/ui-core/src/main/java/androidx/ui/core/Constraints.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Constraints.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Constraints.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Density.kt b/ui/ui-core/src/main/java/androidx/ui/core/Density.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Density.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Density.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Direction.kt b/ui/ui-core/src/main/java/androidx/ui/core/Direction.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Direction.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Direction.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Dp.kt b/ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Dp.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Dp.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Duration.kt b/ui/ui-core/src/main/java/androidx/ui/core/Duration.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Duration.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Duration.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/IntPx.kt b/ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/IntPx.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/IntPx.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/PointerInput.kt b/ui/ui-core/src/main/java/androidx/ui/core/PointerInput.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/PointerInput.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/PointerInput.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Px.kt b/ui/ui-core/src/main/java/androidx/ui/core/Px.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Px.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Px.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/RectHelper.kt b/ui/ui-core/src/main/java/androidx/ui/core/RectHelper.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/RectHelper.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/RectHelper.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Sp.kt b/ui/ui-core/src/main/java/androidx/ui/core/Sp.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Sp.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Sp.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Timestamp.kt b/ui/ui-core/src/main/java/androidx/ui/core/Timestamp.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Timestamp.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Timestamp.kt
diff --git a/ui/core/src/main/java/androidx/ui/core/Velocity.kt b/ui/ui-core/src/main/java/androidx/ui/core/Velocity.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/core/Velocity.kt
rename to ui/ui-core/src/main/java/androidx/ui/core/Velocity.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/Offset.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Offset.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/Offset.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/Offset.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/OffsetBase.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/OffsetBase.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/OffsetBase.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/OffsetBase.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/Outline.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Outline.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/Outline.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/Outline.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/RRect.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/RRect.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/RRect.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/RRect.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/Radius.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Radius.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/Radius.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/Radius.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/Rect.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Rect.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/Rect.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/Rect.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/Shape.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Shape.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/Shape.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/Shape.kt
diff --git a/ui/core/src/main/java/androidx/ui/engine/geometry/Size.kt b/ui/ui-core/src/main/java/androidx/ui/engine/geometry/Size.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/engine/geometry/Size.kt
rename to ui/ui-core/src/main/java/androidx/ui/engine/geometry/Size.kt
diff --git a/ui/core/src/main/java/androidx/ui/graphics/Color.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/Color.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/graphics/Color.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/Color.kt
diff --git a/ui/core/src/main/java/androidx/ui/graphics/ColorSpace.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/ColorSpace.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/graphics/ColorSpace.kt
rename to ui/ui-core/src/main/java/androidx/ui/graphics/ColorSpace.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/AndroidCanvas.kt b/ui/ui-core/src/main/java/androidx/ui/painting/AndroidCanvas.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/AndroidCanvas.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/AndroidCanvas.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/AndroidImage.kt b/ui/ui-core/src/main/java/androidx/ui/painting/AndroidImage.kt
similarity index 80%
rename from ui/core/src/main/java/androidx/ui/painting/AndroidImage.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/AndroidImage.kt
index 2036132..fbc5d1b 100644
--- a/ui/core/src/main/java/androidx/ui/painting/AndroidImage.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/painting/AndroidImage.kt
@@ -54,6 +54,7 @@
             height,
             bitmapConfig
         )
+        bitmap.setHasAlpha(hasAlpha)
     }
     return AndroidImage(bitmap)
 }
@@ -106,38 +107,44 @@
     }
 }
 
-internal fun ImageConfig.toBitmapConfig(): Bitmap.Config =
-    when (this) {
-        ImageConfig.Argb8888 -> Bitmap.Config.ARGB_8888
-        ImageConfig.Alpha8 -> Bitmap.Config.ALPHA_8
-        ImageConfig.Rgb565 -> Bitmap.Config.RGB_565
-        else -> Bitmap.Config.ARGB_8888
+internal fun ImageConfig.toBitmapConfig(): Bitmap.Config {
+    // Cannot utilize when statements with enums that may have different sets of supported
+    // values between the compiled SDK and the platform version of the device.
+    // As a workaround use if/else statements
+    // See https://youtrack.jetbrains.com/issue/KT-30473 for details
+    return if (this == ImageConfig.Argb8888) {
+        Bitmap.Config.ARGB_8888
+    } else if (this == ImageConfig.Alpha8) {
+        Bitmap.Config.ALPHA_8
+    } else if (this == ImageConfig.Rgb565) {
+        Bitmap.Config.RGB_565
+    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && this == ImageConfig.F16) {
+        Bitmap.Config.RGBA_F16
+    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && this == ImageConfig.Gpu) {
+        Bitmap.Config.HARDWARE
+    } else {
+        Bitmap.Config.ARGB_8888
     }
+}
 
 internal fun Bitmap.Config.toImageConfig(): ImageConfig {
-    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
-        @Suppress("DEPRECATION")
-        return when (this) {
-            Bitmap.Config.ALPHA_8 -> ImageConfig.Alpha8
-            Bitmap.Config.RGB_565 -> ImageConfig.Rgb565
-            Bitmap.Config.ARGB_4444 -> ImageConfig.Argb8888 // Always upgrade to Argb_8888
-            Bitmap.Config.ARGB_8888 -> ImageConfig.Argb8888
-            Bitmap.Config.RGBA_F16 -> ImageConfig.F16
-            Bitmap.Config.HARDWARE -> ImageConfig.Gpu
-            else -> ImageConfig.Argb8888
-        }
+    // Cannot utilize when statements with enums that may have different sets of supported
+    // values between the compiled SDK and the platform version of the device.
+    // As a workaround use if/else statements
+    // See https://youtrack.jetbrains.com/issue/KT-30473 for details
+    @Suppress("DEPRECATION")
+    return if (this == Bitmap.Config.ALPHA_8) {
+        ImageConfig.Alpha8
+    } else if (this == Bitmap.Config.RGB_565) {
+        ImageConfig.Rgb565
+    } else if (this == Bitmap.Config.ARGB_4444) {
+        ImageConfig.Argb8888 // Always upgrade to Argb_8888
+    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && this == Bitmap.Config.RGBA_F16) {
+        ImageConfig.F16
+    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && this == Bitmap.Config.HARDWARE) {
+        ImageConfig.Gpu
     } else {
-        // Re implement when statement for older OS versions that do not support hardware
-        // bitmaps to work around NoSuchFieldExceptions not being caught in Kotlin:
-        // https://youtrack.jetbrains.com/issue/KT-30473
-        @Suppress("DEPRECATION")
-        return when (this) {
-            Bitmap.Config.ALPHA_8 -> ImageConfig.Alpha8
-            Bitmap.Config.RGB_565 -> ImageConfig.Rgb565
-            Bitmap.Config.ARGB_4444 -> ImageConfig.Argb8888 // Always upgrade to Argb_8888
-            Bitmap.Config.ARGB_8888 -> ImageConfig.Argb8888
-            else -> ImageConfig.Argb8888
-        }
+        ImageConfig.Argb8888
     }
 }
 
diff --git a/ui/core/src/main/java/androidx/ui/painting/BlendMode.kt b/ui/ui-core/src/main/java/androidx/ui/painting/BlendMode.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/BlendMode.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/BlendMode.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/BlurStyle.kt b/ui/ui-core/src/main/java/androidx/ui/painting/BlurStyle.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/BlurStyle.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/BlurStyle.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Canvas.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Canvas.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Canvas.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Canvas.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/ClipOp.kt b/ui/ui-core/src/main/java/androidx/ui/painting/ClipOp.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/ClipOp.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/ClipOp.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/ColorFilter.kt b/ui/ui-core/src/main/java/androidx/ui/painting/ColorFilter.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/ColorFilter.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/ColorFilter.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/FilterQuality.kt b/ui/ui-core/src/main/java/androidx/ui/painting/FilterQuality.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/FilterQuality.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/FilterQuality.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Gradient.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Gradient.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Gradient.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Gradient.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Image.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Image.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Image.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Image.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/ImageByteFormat.kt b/ui/ui-core/src/main/java/androidx/ui/painting/ImageByteFormat.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/ImageByteFormat.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/ImageByteFormat.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/ImageRepeat.kt b/ui/ui-core/src/main/java/androidx/ui/painting/ImageRepeat.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/ImageRepeat.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/ImageRepeat.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/MaskFilter.kt b/ui/ui-core/src/main/java/androidx/ui/painting/MaskFilter.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/MaskFilter.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/MaskFilter.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Paint.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Paint.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Paint.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Paint.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/PaintingStyle.kt b/ui/ui-core/src/main/java/androidx/ui/painting/PaintingStyle.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/PaintingStyle.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/PaintingStyle.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Path.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Path.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Path.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Path.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/PathFillType.kt b/ui/ui-core/src/main/java/androidx/ui/painting/PathFillType.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/PathFillType.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/PathFillType.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/PathOperation.kt b/ui/ui-core/src/main/java/androidx/ui/painting/PathOperation.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/PathOperation.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/PathOperation.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Picture.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Picture.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Picture.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Picture.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/PictureRecorder.kt b/ui/ui-core/src/main/java/androidx/ui/painting/PictureRecorder.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/PictureRecorder.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/PictureRecorder.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/PointMode.kt b/ui/ui-core/src/main/java/androidx/ui/painting/PointMode.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/PointMode.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/PointMode.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Shader.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Shader.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Shader.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Shader.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/Shadow.kt b/ui/ui-core/src/main/java/androidx/ui/painting/Shadow.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/Shadow.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/Shadow.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/StrokeCap.kt b/ui/ui-core/src/main/java/androidx/ui/painting/StrokeCap.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/StrokeCap.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/StrokeCap.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/StrokeJoin.kt b/ui/ui-core/src/main/java/androidx/ui/painting/StrokeJoin.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/StrokeJoin.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/StrokeJoin.kt
diff --git a/ui/core/src/main/java/androidx/ui/painting/TileMode.kt b/ui/ui-core/src/main/java/androidx/ui/painting/TileMode.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/painting/TileMode.kt
rename to ui/ui-core/src/main/java/androidx/ui/painting/TileMode.kt
diff --git a/ui/core/src/main/java/androidx/ui/semantics/SemanticsActions.kt b/ui/ui-core/src/main/java/androidx/ui/semantics/SemanticsActions.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/semantics/SemanticsActions.kt
rename to ui/ui-core/src/main/java/androidx/ui/semantics/SemanticsActions.kt
diff --git a/ui/core/src/main/java/androidx/ui/testutils/PointerInputTestUtil.kt b/ui/ui-core/src/main/java/androidx/ui/testutils/PointerInputTestUtil.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/testutils/PointerInputTestUtil.kt
rename to ui/ui-core/src/main/java/androidx/ui/testutils/PointerInputTestUtil.kt
diff --git a/ui/core/src/main/java/androidx/ui/text/TextRange.kt b/ui/ui-core/src/main/java/androidx/ui/text/TextRange.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/text/TextRange.kt
rename to ui/ui-core/src/main/java/androidx/ui/text/TextRange.kt
diff --git a/ui/core/src/main/java/androidx/ui/text/TextSelection.kt b/ui/ui-core/src/main/java/androidx/ui/text/TextSelection.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/text/TextSelection.kt
rename to ui/ui-core/src/main/java/androidx/ui/text/TextSelection.kt
diff --git a/ui/core/src/main/java/androidx/ui/text/style/TextDirection.kt b/ui/ui-core/src/main/java/androidx/ui/text/style/TextDirection.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/text/style/TextDirection.kt
rename to ui/ui-core/src/main/java/androidx/ui/text/style/TextDirection.kt
diff --git a/ui/core/src/main/java/androidx/ui/util/Float16.kt b/ui/ui-core/src/main/java/androidx/ui/util/Float16.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/util/Float16.kt
rename to ui/ui-core/src/main/java/androidx/ui/util/Float16.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/Matrix2.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix2.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/Matrix2.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix2.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/Matrix3.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix3.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/Matrix3.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix3.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/Matrix4.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix4.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/Matrix4.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix4.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/MatrixColumn.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixColumn.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/MatrixColumn.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixColumn.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/Scalar.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Scalar.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/Scalar.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/Scalar.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/Vector2.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Vector2.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/Vector2.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/Vector2.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/Vector3.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Vector3.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/Vector3.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/Vector3.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/Vector4.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Vector4.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/Vector4.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/Vector4.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/VectorComponent.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorComponent.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/VectorComponent.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorComponent.kt
diff --git a/ui/core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt
similarity index 100%
rename from ui/core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt
rename to ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/ConstraintsTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/ConstraintsTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/ConstraintsTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/ConstraintsTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/DpTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/DpTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/DpTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/DpTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/DurationTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/DurationTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/DurationTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/DurationTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/IntPxTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/IntPxTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/IntPxTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/IntPxTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/PointerInputTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/PointerInputTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/PointerInputTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/PointerInputTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/PxTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/PxTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/PxTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/PxTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/SpTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/SpTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/SpTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/SpTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/TimestampTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/TimestampTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/TimestampTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/TimestampTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/core/VelocityTest.kt b/ui/ui-core/src/test/java/androidx/ui/core/VelocityTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/core/VelocityTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/core/VelocityTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/engine/geometry/RRectTest.kt b/ui/ui-core/src/test/java/androidx/ui/engine/geometry/RRectTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/engine/geometry/RRectTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/engine/geometry/RRectTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/engine/geometry/RectTest.kt b/ui/ui-core/src/test/java/androidx/ui/engine/geometry/RectTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/engine/geometry/RectTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/engine/geometry/RectTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/graphics/ColorSpaceTest.kt b/ui/ui-core/src/test/java/androidx/ui/graphics/ColorSpaceTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/graphics/ColorSpaceTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/graphics/ColorSpaceTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/graphics/ColorTest.kt b/ui/ui-core/src/test/java/androidx/ui/graphics/ColorTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/graphics/ColorTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/graphics/ColorTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/painting/ShadowTest.kt b/ui/ui-core/src/test/java/androidx/ui/painting/ShadowTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/painting/ShadowTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/painting/ShadowTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/text/TextRangeTest.kt b/ui/ui-core/src/test/java/androidx/ui/text/TextRangeTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/text/TextRangeTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/text/TextRangeTest.kt
diff --git a/ui/core/src/test/java/androidx/ui/text/TextSelectionTest.kt b/ui/ui-core/src/test/java/androidx/ui/text/TextSelectionTest.kt
similarity index 100%
rename from ui/core/src/test/java/androidx/ui/text/TextSelectionTest.kt
rename to ui/ui-core/src/test/java/androidx/ui/text/TextSelectionTest.kt
diff --git a/ui/foundation/OWNERS b/ui/ui-foundation/OWNERS
similarity index 100%
rename from ui/foundation/OWNERS
rename to ui/ui-foundation/OWNERS
diff --git a/ui/foundation/api/1.0.0-alpha01.txt b/ui/ui-foundation/api/1.0.0-alpha01.txt
similarity index 100%
rename from ui/foundation/api/1.0.0-alpha01.txt
rename to ui/ui-foundation/api/1.0.0-alpha01.txt
diff --git a/ui/foundation/api/current.txt b/ui/ui-foundation/api/current.txt
similarity index 100%
rename from ui/foundation/api/current.txt
rename to ui/ui-foundation/api/current.txt
diff --git a/ui/foundation/api/res-1.0.0-alpha01.txt b/ui/ui-foundation/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/foundation/api/res-1.0.0-alpha01.txt
rename to ui/ui-foundation/api/res-1.0.0-alpha01.txt
diff --git a/ui/foundation/api/restricted_1.0.0-alpha01.txt b/ui/ui-foundation/api/restricted_1.0.0-alpha01.txt
similarity index 100%
rename from ui/foundation/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-foundation/api/restricted_1.0.0-alpha01.txt
diff --git a/ui/foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
similarity index 100%
rename from ui/foundation/api/restricted_current.txt
rename to ui/ui-foundation/api/restricted_current.txt
diff --git a/ui/foundation/build.gradle b/ui/ui-foundation/build.gradle
similarity index 92%
rename from ui/foundation/build.gradle
rename to ui/ui-foundation/build.gradle
index c0a344a..50dc11e 100644
--- a/ui/foundation/build.gradle
+++ b/ui/ui-foundation/build.gradle
@@ -32,10 +32,10 @@
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
     api project(":compose:compose-runtime")
-    api project(":ui-core")
-    api project(':ui-framework')
-    api project(':ui-layout')
-    api project(':ui-text')
+    api project(":ui:ui-core")
+    api project(':ui:ui-framework')
+    api project(':ui:ui-layout')
+    api project(':ui:ui-text')
     api(KOTLIN_COMPOSE_STDLIB)
     testImplementation(JUNIT)
     testImplementation(MOCKITO_CORE)
@@ -45,7 +45,7 @@
         exclude group: 'org.mockito' // to keep control on the mockito version
     }
     testImplementation(TRUTH)
-    androidTestImplementation project(':ui-test')
+    androidTestImplementation project(':ui:ui-test')
     androidTestImplementation(JUNIT)
     androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
     androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
diff --git a/ui/foundation/src/androidTest/AndroidManifest.xml b/ui/ui-foundation/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/foundation/src/androidTest/AndroidManifest.xml
rename to ui/ui-foundation/src/androidTest/AndroidManifest.xml
diff --git a/ui/foundation/src/androidTest/java/androidx/ui/foundation/shape/RectangleShapeTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/shape/RectangleShapeTest.kt
similarity index 100%
rename from ui/foundation/src/androidTest/java/androidx/ui/foundation/shape/RectangleShapeTest.kt
rename to ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/shape/RectangleShapeTest.kt
diff --git a/ui/foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/CornerSizeTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/CornerSizeTest.kt
similarity index 100%
rename from ui/foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/CornerSizeTest.kt
rename to ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/CornerSizeTest.kt
diff --git a/ui/foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/RoundedCornerShapeTest.kt b/ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/RoundedCornerShapeTest.kt
similarity index 100%
rename from ui/foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/RoundedCornerShapeTest.kt
rename to ui/ui-foundation/src/androidTest/java/androidx/ui/foundation/shape/corner/RoundedCornerShapeTest.kt
diff --git a/ui/foundation/src/androidTest/res/values/styles.xml b/ui/ui-foundation/src/androidTest/res/values/styles.xml
similarity index 100%
rename from ui/foundation/src/androidTest/res/values/styles.xml
rename to ui/ui-foundation/src/androidTest/res/values/styles.xml
diff --git a/ui/foundation/src/main/AndroidManifest.xml b/ui/ui-foundation/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/foundation/src/main/AndroidManifest.xml
rename to ui/ui-foundation/src/main/AndroidManifest.xml
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/Clickable.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/Clickable.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/Clickable.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/Clickable.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/ColoredRect.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/DeterminateProgressIndicator.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/DeterminateProgressIndicator.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/DeterminateProgressIndicator.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/DeterminateProgressIndicator.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/SimpleImage.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/selection/MutuallyExclusiveSetItem.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/MutuallyExclusiveSetItem.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/selection/MutuallyExclusiveSetItem.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/MutuallyExclusiveSetItem.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/DrawShape.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/GenericShape.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/RectangleShape.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/RectangleShape.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/RectangleShape.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/RectangleShape.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/border/Border.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/Border.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/border/Border.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/Border.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/border/DrawBorder.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerBasedShape.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerBasedShape.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerBasedShape.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerBasedShape.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSize.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSize.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSize.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSize.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSizes.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSizes.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSizes.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/CornerSizes.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/PxCornerSizes.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/PxCornerSizes.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/PxCornerSizes.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/PxCornerSizes.kt
diff --git a/ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/RoundedCornerShape.kt b/ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/RoundedCornerShape.kt
similarity index 100%
rename from ui/foundation/src/main/java/androidx/ui/foundation/shape/corner/RoundedCornerShape.kt
rename to ui/ui-foundation/src/main/java/androidx/ui/foundation/shape/corner/RoundedCornerShape.kt
diff --git a/ui/foundation/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ui/ui-foundation/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
rename from ui/foundation/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
rename to ui/ui-foundation/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/ui/framework/OWNERS b/ui/ui-framework/OWNERS
similarity index 100%
rename from ui/framework/OWNERS
rename to ui/ui-framework/OWNERS
diff --git a/ui/framework/api/1.0.0-alpha01.txt b/ui/ui-framework/api/1.0.0-alpha01.txt
similarity index 99%
rename from ui/framework/api/1.0.0-alpha01.txt
rename to ui/ui-framework/api/1.0.0-alpha01.txt
index 917e705..bfa23f4 100644
--- a/ui/framework/api/1.0.0-alpha01.txt
+++ b/ui/ui-framework/api/1.0.0-alpha01.txt
@@ -95,6 +95,11 @@
     property public abstract Object? parentData;
   }
 
+  public final class OpacityKt {
+    ctor public OpacityKt();
+    method public static void Opacity(@FloatRange(from=0.0, to=1.0) float opacity, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
   public final class ParentDataKt {
     ctor public ParentDataKt();
     method public static void ParentData(Object data, kotlin.jvm.functions.Function0<kotlin.Unit> children);
diff --git a/ui/framework/api/api_lint.ignore b/ui/ui-framework/api/api_lint.ignore
similarity index 100%
rename from ui/framework/api/api_lint.ignore
rename to ui/ui-framework/api/api_lint.ignore
diff --git a/ui/framework/api/current.txt b/ui/ui-framework/api/current.txt
similarity index 99%
rename from ui/framework/api/current.txt
rename to ui/ui-framework/api/current.txt
index 917e705..bfa23f4 100644
--- a/ui/framework/api/current.txt
+++ b/ui/ui-framework/api/current.txt
@@ -95,6 +95,11 @@
     property public abstract Object? parentData;
   }
 
+  public final class OpacityKt {
+    ctor public OpacityKt();
+    method public static void Opacity(@FloatRange(from=0.0, to=1.0) float opacity, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
   public final class ParentDataKt {
     ctor public ParentDataKt();
     method public static void ParentData(Object data, kotlin.jvm.functions.Function0<kotlin.Unit> children);
diff --git a/ui/framework/api/res-1.0.0-alpha01.txt b/ui/ui-framework/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/framework/api/res-1.0.0-alpha01.txt
rename to ui/ui-framework/api/res-1.0.0-alpha01.txt
diff --git a/ui/framework/api/restricted_1.0.0-alpha01.txt b/ui/ui-framework/api/restricted_1.0.0-alpha01.txt
similarity index 100%
rename from ui/framework/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-framework/api/restricted_1.0.0-alpha01.txt
diff --git a/ui/framework/api/restricted_current.txt b/ui/ui-framework/api/restricted_current.txt
similarity index 100%
rename from ui/framework/api/restricted_current.txt
rename to ui/ui-framework/api/restricted_current.txt
diff --git a/ui/framework/build.gradle b/ui/ui-framework/build.gradle
similarity index 95%
rename from ui/framework/build.gradle
rename to ui/ui-framework/build.gradle
index fe7c989..9586e3c 100644
--- a/ui/framework/build.gradle
+++ b/ui/ui-framework/build.gradle
@@ -32,13 +32,13 @@
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
     api project(":compose:compose-runtime")
-    api project(":ui-core")
-    implementation project(":ui-platform")
+    api project(":ui:ui-core")
+    implementation project(":ui:ui-platform")
     api(KOTLIN_COMPOSE_STDLIB)
 
     // TODO: Non-Kotlin dependency, move to Android-specific code
     implementation "androidx.core:core:1.0.0"
-    implementation project(":ui-text")
+    implementation project(":ui:ui-text")
 
     testImplementation(JUNIT)
     testImplementation(MOCKITO_CORE)
diff --git a/ui/framework/integration-tests/framework-demos/build.gradle b/ui/ui-framework/integration-tests/framework-demos/build.gradle
similarity index 79%
rename from ui/framework/integration-tests/framework-demos/build.gradle
rename to ui/ui-framework/integration-tests/framework-demos/build.gradle
index 36e2667..8b5ea04 100644
--- a/ui/framework/integration-tests/framework-demos/build.gradle
+++ b/ui/ui-framework/integration-tests/framework-demos/build.gradle
@@ -19,10 +19,10 @@
     api(KOTLIN_COMPOSE_STDLIB)
     api project(":compose:compose-runtime")
 
-    implementation project(':ui-animation')
-    implementation project(':ui-framework')
-    implementation project(":ui-layout")
-    implementation project(':ui-material')
+    implementation project(':ui:ui-animation')
+    implementation project(':ui:ui-framework')
+    implementation project(":ui:ui-layout")
+    implementation project(':ui:ui-material')
 }
 
 android {
diff --git a/ui/framework/integration-tests/framework-demos/src/main/AndroidManifest.xml b/ui/ui-framework/integration-tests/framework-demos/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/AndroidManifest.xml
rename to ui/ui-framework/integration-tests/framework-demos/src/main/AndroidManifest.xml
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/AnimationGestureSemanticsActivity.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollect.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollectActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollectActivity.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollectActivity.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/MultipleCollectActivity.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL1.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL2.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL2.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL2.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL2.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL3.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL3.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL3.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/SemanticsL3.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/VectorGraphicsActivity.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/DragGestureDetectorDemo.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/DragGestureDetectorDemo.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/DragGestureDetectorDemo.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/DragGestureDetectorDemo.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/NestedScrollingDemo.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt b/ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt
rename to ui/ui-framework/integration-tests/framework-demos/src/main/java/androidx/ui/framework/demos/gestures/SimpleComposables.kt
diff --git a/ui/framework/integration-tests/framework-demos/src/main/res/drawable/ic_crane.xml b/ui/ui-framework/integration-tests/framework-demos/src/main/res/drawable/ic_crane.xml
similarity index 100%
rename from ui/framework/integration-tests/framework-demos/src/main/res/drawable/ic_crane.xml
rename to ui/ui-framework/integration-tests/framework-demos/src/main/res/drawable/ic_crane.xml
diff --git a/ui/layout/integration-tests/samples/build.gradle b/ui/ui-framework/integration-tests/samples/build.gradle
similarity index 92%
copy from ui/layout/integration-tests/samples/build.gradle
copy to ui/ui-framework/integration-tests/samples/build.gradle
index a465157..9492a34 100644
--- a/ui/layout/integration-tests/samples/build.gradle
+++ b/ui/ui-framework/integration-tests/samples/build.gradle
@@ -31,7 +31,8 @@
     api(KOTLIN_COMPOSE_STDLIB)
     implementation project(":annotation:annotation-sampled")
     api project(":compose:compose-runtime")
-    api project(":ui-layout")
+    implementation project(':ui:ui-framework')
+    implementation project(':ui:ui-foundation')
 }
 
 android {
diff --git a/ui/ui-framework/integration-tests/samples/src/main/AndroidManifest.xml b/ui/ui-framework/integration-tests/samples/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..74527227
--- /dev/null
+++ b/ui/ui-framework/integration-tests/samples/src/main/AndroidManifest.xml
@@ -0,0 +1,17 @@
+<!--
+  Copyright 2019 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<manifest package="androidx.ui.framework.samples" />
\ No newline at end of file
diff --git a/ui/ui-framework/integration-tests/samples/src/main/java/androidx/ui/framework/samples/OpacitySample.kt b/ui/ui-framework/integration-tests/samples/src/main/java/androidx/ui/framework/samples/OpacitySample.kt
new file mode 100644
index 0000000..85282e4
--- /dev/null
+++ b/ui/ui-framework/integration-tests/samples/src/main/java/androidx/ui/framework/samples/OpacitySample.kt
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.framework.samples
+
+import androidx.annotation.Sampled
+import androidx.compose.Composable
+import androidx.compose.composer
+import androidx.ui.core.Opacity
+import androidx.ui.foundation.shape.DrawShape
+import androidx.ui.foundation.shape.RectangleShape
+import androidx.ui.graphics.Color
+
+@Sampled
+@Composable
+fun OpacitySample() {
+    Opacity(opacity = 0.5f) {
+        DrawShape(RectangleShape, Color.Red)
+    }
+}
diff --git a/ui/framework/src/androidTest/AndroidManifest.xml b/ui/ui-framework/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/framework/src/androidTest/AndroidManifest.xml
rename to ui/ui-framework/src/androidTest/AndroidManifest.xml
diff --git a/ui/android-text/src/androidTest/assets/sample_font.ttx b/ui/ui-framework/src/androidTest/assets/sample_font.ttx
similarity index 100%
copy from ui/android-text/src/androidTest/assets/sample_font.ttx
copy to ui/ui-framework/src/androidTest/assets/sample_font.ttx
diff --git a/ui/framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
similarity index 100%
rename from ui/framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
rename to ui/ui-framework/src/androidTest/java/androidx/ui/core/test/AndroidLayoutDrawTest.kt
diff --git a/ui/framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
similarity index 100%
rename from ui/framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
rename to ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ClipTest.kt
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OpacityTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OpacityTest.kt
new file mode 100644
index 0000000..e32383f
--- /dev/null
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OpacityTest.kt
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.test
+
+import android.graphics.Bitmap
+import android.os.Build
+import androidx.compose.Composable
+import androidx.compose.Model
+import androidx.compose.composer
+import androidx.compose.setContent
+import androidx.test.filters.SdkSuppress
+import androidx.test.filters.SmallTest
+import androidx.test.rule.ActivityTestRule
+import androidx.ui.core.CraneWrapper
+import androidx.ui.core.Draw
+import androidx.ui.core.Layout
+import androidx.ui.core.Opacity
+import androidx.ui.core.ipx
+import androidx.ui.core.max
+import androidx.ui.core.toRect
+import androidx.ui.framework.test.TestActivity
+import androidx.ui.graphics.Color
+import androidx.ui.painting.Paint
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+
+@SmallTest
+@RunWith(JUnit4::class)
+class OpacityTest {
+
+    @get:Rule
+    val rule = ActivityTestRule<TestActivity>(TestActivity::class.java)
+    private lateinit var activity: TestActivity
+    private lateinit var drawLatch: CountDownLatch
+
+    @Before
+    fun setup() {
+        activity = rule.activity
+        activity.hasFocusLatch.await(5, TimeUnit.SECONDS)
+        drawLatch = CountDownLatch(1)
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    @Test
+    fun drawFullOpacity() {
+        val color = Color.LightGray
+        rule.runOnUiThreadIR {
+            activity.setContent {
+                CraneWrapper {
+                    FillColor(Color.White)
+                    Opacity(opacity = 1f) {
+                        AtLeastSize(size = 10.ipx) {
+                            FillColor(color)
+                        }
+                    }
+                }
+            }
+        }
+
+        takeScreenShot(10).apply {
+            assertRect(color)
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    @Test
+    fun drawZeroOpacity() {
+        val color = Color.LightGray
+        rule.runOnUiThreadIR {
+            activity.setContent {
+                CraneWrapper {
+                    FillColor(Color.White)
+                    Opacity(opacity = 0f) {
+                        AtLeastSize(size = 10.ipx) {
+                            FillColor(color)
+                        }
+                    }
+                }
+            }
+        }
+
+        takeScreenShot(10).apply {
+            assertRect(Color.White)
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    @Test
+    fun drawHalfOpacity() {
+        val color = Color.Red
+        rule.runOnUiThreadIR {
+            activity.setContent {
+                CraneWrapper {
+                    FillColor(Color.White)
+                    Row {
+                        Opacity(opacity = 0.5f) {
+                            AtLeastSize(size = 10.ipx) {
+                                FillColor(color)
+                            }
+                        }
+                        AtLeastSize(size = 10.ipx) {
+                            FillColor(color.copy(alpha = 0.5f))
+                        }
+                    }
+                }
+            }
+        }
+
+        takeScreenShot(20, 10).apply {
+            assertSimilar(color(5, 5), color(15, 5))
+        }
+    }
+
+    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.O)
+    @Test
+    fun switchFromHalfOpacityToFull() {
+        val color = Color.Lime
+        val model = OpacityModel(0.5f)
+
+        rule.runOnUiThreadIR {
+            activity.setContent {
+                CraneWrapper {
+                    FillColor(Color.White)
+                    Opacity(opacity = model.opacity) {
+                        AtLeastSize(size = 10.ipx) {
+                            FillColor(color)
+                        }
+                    }
+                }
+            }
+        }
+        assertTrue(drawLatch.await(1, TimeUnit.SECONDS))
+
+        drawLatch = CountDownLatch(1)
+        rule.runOnUiThreadIR {
+            model.opacity = 1f
+        }
+
+        takeScreenShot(10).apply {
+            assertRect(color)
+        }
+    }
+
+    @Composable
+    private fun FillColor(color: Color) {
+        Draw { canvas, parentSize ->
+            canvas.drawRect(parentSize.toRect(), Paint().apply {
+                    this.color = color
+                })
+            drawLatch.countDown()
+        }
+    }
+
+    private fun takeScreenShot(width: Int, height: Int = width): Bitmap {
+        assertTrue(drawLatch.await(1, TimeUnit.SECONDS))
+        val bitmap = rule.waitAndScreenShot()
+        assertEquals(width, bitmap.width)
+        assertEquals(height, bitmap.height)
+        return bitmap
+    }
+}
+
+@Composable
+fun Row(children: @Composable() () -> Unit) {
+    Layout(children) { measurables, constraints ->
+        val placeables = measurables.map { it.measure(constraints) }
+        var width = 0.ipx
+        var height = 0.ipx
+        placeables.forEach {
+            width += it.width
+            height = max(height, it.height)
+        }
+        layout(width, height) {
+            var offset = 0.ipx
+            placeables.forEach {
+                it.place(offset, 0.ipx)
+                offset += it.width
+            }
+        }
+    }
+}
+
+fun Bitmap.color(x: Int, y: Int): Color = Color(getPixel(x, y))
+
+fun assertSimilar(color1: Color, color2: Color) {
+    val errorString = "$color1 and $color2 are not similar!"
+    assertEquals(errorString, color1.red, color2.red, 0.01f)
+    assertEquals(errorString, color1.green, color2.green, 0.01f)
+    assertEquals(errorString, color1.blue, color2.blue, 0.01f)
+    assertEquals(errorString, color1.alpha, color2.alpha, 0.01f)
+}
+
+@Model
+private data class OpacityModel(var opacity: Float)
diff --git a/ui/framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt
similarity index 100%
rename from ui/framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt
rename to ui/ui-framework/src/androidTest/java/androidx/ui/core/test/ParentDataTest.kt
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextLayoutTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextLayoutTest.kt
new file mode 100644
index 0000000..063ba70
--- /dev/null
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/TextLayoutTest.kt
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core.test
+
+import androidx.compose.Children
+import androidx.compose.Composable
+import androidx.compose.composer
+import androidx.compose.setContent
+import androidx.test.filters.SmallTest
+import androidx.test.rule.ActivityTestRule
+import androidx.ui.core.ComplexLayout
+import androidx.ui.core.CraneWrapper
+import androidx.ui.core.Density
+import androidx.ui.core.IntPx
+import androidx.ui.core.Layout
+import androidx.ui.core.OnChildPositioned
+import androidx.ui.core.PxSize
+import androidx.ui.core.Ref
+import androidx.ui.core.Text
+import androidx.ui.core.ipx
+import androidx.ui.core.looseMin
+import androidx.ui.core.px
+import androidx.ui.core.round
+import androidx.ui.core.withDensity
+import androidx.ui.framework.test.TestActivity
+import androidx.ui.text.TextStyle
+import androidx.ui.text.font.Font
+import androidx.ui.text.font.FontStyle
+import androidx.ui.text.font.FontWeight
+import androidx.ui.text.font.asFontFamily
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import java.lang.UnsupportedOperationException
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit
+
+@RunWith(JUnit4::class)
+@SmallTest
+class TextLayoutTest {
+    @get:Rule
+    internal val activityTestRule = ActivityTestRule(TestActivity::class.java)
+    private val fontFamily = Font(
+        name = "sample_font.ttf",
+        weight = FontWeight.normal,
+        style = FontStyle.Normal
+    ).asFontFamily()
+    private lateinit var activity: TestActivity
+    private lateinit var density: Density
+
+    @Before
+    fun setup() {
+        activity = activityTestRule.activity
+        density = Density(activity)
+    }
+
+    @Test
+    fun testTextLayout() = withDensity(density) {
+        val layoutLatch = CountDownLatch(2)
+        val textSize = Ref<PxSize>()
+        val doubleTextSize = Ref<PxSize>()
+        show {
+            OnChildPositioned({ coordinates ->
+                textSize.value = coordinates.size
+                layoutLatch.countDown()
+            }) {
+                Text("aa", style = TextStyle(fontFamily = fontFamily))
+            }
+            OnChildPositioned({ coordinates ->
+                doubleTextSize.value = coordinates.size
+                layoutLatch.countDown()
+            }) {
+                Text("aaaa", style = TextStyle(fontFamily = fontFamily))
+            }
+        }
+        assertTrue(layoutLatch.await(1, TimeUnit.SECONDS))
+        assertNotNull(textSize.value)
+        assertNotNull(doubleTextSize.value)
+        assertTrue(textSize.value!!.width > 0.px)
+        assertTrue(textSize.value!!.height > 0.px)
+        assertEquals(textSize.value!!.width * 2, doubleTextSize.value!!.width)
+        assertEquals(textSize.value!!.height, doubleTextSize.value!!.height)
+    }
+
+    @Test
+    fun testTextLayout_intrinsicMeasurements() = withDensity(density) {
+        val layoutLatch = CountDownLatch(2)
+        val textSize = Ref<PxSize>()
+        val doubleTextSize = Ref<PxSize>()
+        show {
+            OnChildPositioned({ coordinates ->
+                textSize.value = coordinates.size
+                layoutLatch.countDown()
+            }) {
+                Text("aa", style = TextStyle(fontFamily = fontFamily))
+            }
+            OnChildPositioned({ coordinates ->
+                doubleTextSize.value = coordinates.size
+                layoutLatch.countDown()
+            }) {
+                Text("aaaa", style = TextStyle(fontFamily = fontFamily))
+            }
+        }
+        assertTrue(layoutLatch.await(1, TimeUnit.SECONDS))
+        val textWidth = textSize.value!!.width.round()
+        val textHeight = textSize.value!!.height.round()
+        val doubleTextWidth = doubleTextSize.value!!.width.round()
+
+        val intrinsicsLatch = CountDownLatch(1)
+        show {
+            val text = @Composable {
+                Text("aaaa", style = TextStyle(fontFamily = fontFamily))
+            }
+            ComplexLayout(text) {
+                layout { measurables, _ ->
+                    val textMeasurable = measurables.first()
+
+                    // Min width.
+                    var threw = false
+                    try {
+                        textMeasurable.minIntrinsicWidth(0.ipx)
+                    } catch(e: UnsupportedOperationException) {
+                        threw = true
+                    }
+                    assertTrue(threw)
+                    // Min height.
+                    assertTrue(textMeasurable.minIntrinsicHeight(textWidth) > textHeight)
+                    assertEquals(textHeight, textMeasurable.minIntrinsicHeight(doubleTextWidth))
+                    assertEquals(textHeight, textMeasurable.minIntrinsicHeight(IntPx.Infinity))
+                    // Max width.
+                    assertEquals(doubleTextWidth, textMeasurable.maxIntrinsicWidth(0.ipx))
+                    // Max height.
+                    assertTrue(textMeasurable.maxIntrinsicHeight(textWidth) > textHeight)
+                    assertEquals(textHeight, textMeasurable.maxIntrinsicHeight(doubleTextWidth))
+                    assertEquals(textHeight, textMeasurable.maxIntrinsicHeight(IntPx.Infinity))
+
+                    intrinsicsLatch.countDown()
+                }
+                minIntrinsicWidth { _, _ -> 0.ipx }
+                minIntrinsicHeight { _, _ -> 0.ipx }
+                maxIntrinsicWidth { _, _ -> 0.ipx }
+                maxIntrinsicHeight { _, _ -> 0.ipx }
+            }
+        }
+        assertTrue(intrinsicsLatch.await(1, TimeUnit.SECONDS))
+    }
+
+    private fun show(@Children composable: @Composable() () -> Unit) {
+        val runnable: Runnable = object : Runnable {
+            override fun run() {
+                activity.setContent {
+                    CraneWrapper {
+                        Layout(composable) { measurables, constraints ->
+                            val placeables = measurables.map { it.measure(constraints.looseMin()) }
+                            layout(constraints.maxWidth, constraints.maxHeight) {
+                                var top = 0.px
+                                placeables.forEach {
+                                    it.place(0.px, top)
+                                    top += it.height
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        activityTestRule.runOnUiThread(runnable)
+    }
+}
\ No newline at end of file
diff --git a/ui/framework/src/androidTest/java/androidx/ui/core/test/WrapperTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/WrapperTest.kt
similarity index 100%
rename from ui/framework/src/androidTest/java/androidx/ui/core/test/WrapperTest.kt
rename to ui/ui-framework/src/androidTest/java/androidx/ui/core/test/WrapperTest.kt
diff --git a/ui/framework/src/androidTest/java/androidx/ui/framework/test/TestActivity.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/framework/test/TestActivity.kt
similarity index 100%
rename from ui/framework/src/androidTest/java/androidx/ui/framework/test/TestActivity.kt
rename to ui/ui-framework/src/androidTest/java/androidx/ui/framework/test/TestActivity.kt
diff --git a/ui/text/src/androidTest/res/font/sample_font.ttf b/ui/ui-framework/src/androidTest/res/font/sample_font.ttf
similarity index 100%
copy from ui/text/src/androidTest/res/font/sample_font.ttf
copy to ui/ui-framework/src/androidTest/res/font/sample_font.ttf
Binary files differ
diff --git a/ui/framework/src/main/AndroidManifest.xml b/ui/ui-framework/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/framework/src/main/AndroidManifest.xml
rename to ui/ui-framework/src/main/AndroidManifest.xml
diff --git a/ui/framework/src/main/java/androidx/ui/core/Clip.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Clip.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/Clip.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Clip.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/Draw.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Draw.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/Draw.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Draw.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/InputField.kt b/ui/ui-framework/src/main/java/androidx/ui/core/InputField.kt
similarity index 97%
rename from ui/framework/src/main/java/androidx/ui/core/InputField.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/InputField.kt
index 35f67d8..964dbe2 100644
--- a/ui/framework/src/main/java/androidx/ui/core/InputField.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/InputField.kt
@@ -33,7 +33,6 @@
 import androidx.ui.text.AnnotatedString
 import androidx.ui.text.TextPainter
 import androidx.ui.text.TextStyle
-import androidx.ui.text.platform.AndroidFontResourceLoader
 
 /**
  * Data class holding text display attributes used for editors.
@@ -83,7 +82,7 @@
      *
      * Note that this input type is honored by IME and shows corresponding keyboard but this is not
      * guaranteed. For example, some IME may send non-ASCII character even if you set
-     * {@link KeyboardType.KEYBOARD_TYPE_ASCII}
+     * [KeyboardType.Ascii]
      */
     keyboardType: KeyboardType = KeyboardType.Text,
 
@@ -102,7 +101,7 @@
     processor.onNewState(value, textInputService)
 
     val density = +ambient(DensityAmbient)
-    val resourceLoader = AndroidFontResourceLoader(composer.composer.context)
+    val resourceLoader = +ambient(FontLoaderAmbient)
 
     // TODO(nona): Add parameter for text direction, softwrap, etc.
     val delegate = InputFieldDelegate(
diff --git a/ui/framework/src/main/java/androidx/ui/core/InputFieldDelegate.kt b/ui/ui-framework/src/main/java/androidx/ui/core/InputFieldDelegate.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/InputFieldDelegate.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/InputFieldDelegate.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/Layout.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Layout.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/Layout.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Layout.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/LayoutCoordinates.kt b/ui/ui-framework/src/main/java/androidx/ui/core/LayoutCoordinates.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/LayoutCoordinates.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/LayoutCoordinates.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/Measurable.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Measurable.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/Measurable.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Measurable.kt
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/Opacity.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Opacity.kt
new file mode 100644
index 0000000..7399e1a
--- /dev/null
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Opacity.kt
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.core
+
+import androidx.annotation.FloatRange
+import androidx.compose.Children
+import androidx.compose.Composable
+import androidx.compose.composer
+
+/**
+ * Makes its children partially transparent.
+ *
+ * Example usage:
+ *
+ * @sample androidx.ui.framework.samples.OpacitySample
+ *
+ * @param opacity the fraction of children's alpha value.
+ */
+@Composable
+fun Opacity(
+    @FloatRange(from = 0.0, to = 1.0) opacity: Float,
+    @Children children: @Composable() () -> Unit
+) {
+    <RepaintBoundaryNode name=null opacity=opacity>
+        children()
+    </RepaintBoundaryNode>
+}
\ No newline at end of file
diff --git a/ui/framework/src/main/java/androidx/ui/core/ParentData.kt b/ui/ui-framework/src/main/java/androidx/ui/core/ParentData.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/ParentData.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/ParentData.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/Placeable.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Placeable.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/Placeable.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Placeable.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt b/ui/ui-framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/PointerInputWrapper.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/PositioningBlockReceiver.kt b/ui/ui-framework/src/main/java/androidx/ui/core/PositioningBlockReceiver.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/PositioningBlockReceiver.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/PositioningBlockReceiver.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/RepaintBoundary.kt b/ui/ui-framework/src/main/java/androidx/ui/core/RepaintBoundary.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/RepaintBoundary.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/RepaintBoundary.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/Semantics.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Semantics.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/Semantics.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Semantics.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/TestTagProvider.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TestTagProvider.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/TestTagProvider.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/TestTagProvider.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/Text.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
similarity index 89%
rename from ui/framework/src/main/java/androidx/ui/core/Text.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
index 6fbd97a..537d85f 100644
--- a/ui/framework/src/main/java/androidx/ui/core/Text.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Text.kt
@@ -41,7 +41,6 @@
 import androidx.ui.text.TextPainter
 import androidx.ui.text.TextSpan
 import androidx.ui.text.TextStyle
-import androidx.ui.text.platform.AndroidFontResourceLoader
 import androidx.ui.text.toAnnotatedString
 import androidx.ui.text.style.TextOverflow
 
@@ -144,6 +143,9 @@
 /**
  * The Text widget displays text that uses multiple different styles. The text to display is
  * described using a [AnnotatedString].
+ *
+ * TODO(popam): fix this
+ * @throws UnsupportedOperationException
  */
 // TODO(migration/qqd): Add tests when text widget system is mature and testable.
 @Composable
@@ -189,11 +191,8 @@
     val themeStyle = +ambient(CurrentTextStyleAmbient)
     val mergedStyle = themeStyle.merge(style)
 
-    // TODO(Migration/siyamed): This is temporary and should be removed when resource
-    //  system is resolved.
     val density = +ambientDensity()
-
-    val resourceLoader = AndroidFontResourceLoader(composer.composer.context)
+    val resourceLoader = +ambient(FontLoaderAmbient)
 
     Semantics(label = text.text) {
         val textPainter = +memo(
@@ -229,10 +228,30 @@
                 textPainter.paint(canvas, Offset.zero)
             }
         }
-        Layout(children = children, layoutBlock = { _, constraints ->
-            textPainter.layout(constraints)
-            layout(textPainter.width.px.round(), textPainter.height.px.round()) {}
-        })
+        ComplexLayout(children) {
+            layout { _, constraints ->
+                textPainter.layout(constraints)
+                layoutResult(textPainter.width.px.round(), textPainter.height.px.round()) {}
+            }
+            minIntrinsicWidth { _, _ ->
+                // TODO(popam): discuss with the Text team about this
+                throw UnsupportedOperationException()
+                // textPainter.layout(Constraints(0.ipx, IntPx.Infinity, 0.ipx, h))
+                // textPainter.minIntrinsicWidth.px.round()
+            }
+            minIntrinsicHeight { _, w ->
+                textPainter.layout(Constraints(0.ipx, w, 0.ipx, IntPx.Infinity))
+                textPainter.height.px.round()
+            }
+            maxIntrinsicWidth { _, h ->
+                textPainter.layout(Constraints(0.ipx, IntPx.Infinity, 0.ipx, h))
+                textPainter.maxIntrinsicWidth.px.round()
+            }
+            maxIntrinsicHeight { _, w ->
+                textPainter.layout(Constraints(0.ipx, w, 0.ipx, IntPx.Infinity))
+                textPainter.height.px.round()
+            }
+        }
 
         +onCommit(
             text,
diff --git a/ui/framework/src/main/java/androidx/ui/core/TextSpanCompose.kt b/ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/TextSpanCompose.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/Wrapper.kt b/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
similarity index 93%
rename from ui/framework/src/main/java/androidx/ui/core/Wrapper.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
index ebc465e..27c6d0f9 100644
--- a/ui/framework/src/main/java/androidx/ui/core/Wrapper.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/Wrapper.kt
@@ -33,6 +33,8 @@
 import androidx.compose.effectOf
 import androidx.compose.memo
 import androidx.compose.unaryPlus
+import androidx.ui.core.text.AndroidFontResourceLoader
+import androidx.ui.text.font.Font
 
 @Composable
 fun CraneWrapper(@Children children: @Composable() () -> Unit) {
@@ -69,7 +71,9 @@
                 DensityAmbient.Provider(value = Density(context)) {
                     FocusManagerAmbient.Provider(value = focusManager) {
                         TextInputServiceAmbient.Provider(value = rootRef.value?.textInputService) {
-                            children()
+                            FontLoaderAmbient.Provider(value = AndroidFontResourceLoader(context)) {
+                                children()
+                            }
                         }
                     }
                 }
@@ -102,7 +106,9 @@
             DensityAmbient.Provider(value = Density(context)) {
                 FocusManagerAmbient.Provider(value = focusManager) {
                     TextInputServiceAmbient.Provider(value = craneView.textInputService) {
-                        children()
+                        FontLoaderAmbient.Provider(value = AndroidFontResourceLoader(context)) {
+                            children()
+                        }
                     }
                 }
             }
@@ -118,6 +124,8 @@
 
 internal val TextInputServiceAmbient = Ambient.of<TextInputService?>()
 
+internal val FontLoaderAmbient = Ambient.of<Font.ResourceLoader>()
+
 /**
  * [ambient] to get a [Density] object from an internal [DensityAmbient].
  *
diff --git a/ui/framework/src/main/java/androidx/ui/core/gesture/DragGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/DragGestureDetector.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/gesture/DragGestureDetector.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/gesture/DragGestureDetector.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/gesture/PressGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressGestureDetector.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/gesture/PressGestureDetector.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressGestureDetector.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressIndicatorGestureDetector.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/gesture/PressReleasedGestureDetector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressReleasedGestureDetector.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/gesture/PressReleasedGestureDetector.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/gesture/PressReleasedGestureDetector.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/gesture/constants.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/constants.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/gesture/constants.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/gesture/constants.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/gesture/util/PolyFitLeastSquares.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/util/PolyFitLeastSquares.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/gesture/util/PolyFitLeastSquares.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/gesture/util/PolyFitLeastSquares.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/gesture/util/VelocityTracker.kt b/ui/ui-framework/src/main/java/androidx/ui/core/gesture/util/VelocityTracker.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/gesture/util/VelocityTracker.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/gesture/util/VelocityTracker.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/input/FocusManager.kt b/ui/ui-framework/src/main/java/androidx/ui/core/input/FocusManager.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/input/FocusManager.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/input/FocusManager.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/selection/Selection.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/Selection.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/selection/Selection.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/selection/Selection.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/selection/SelectionContainer.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionContainer.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/selection/SelectionContainer.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionContainer.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionManager.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/selection/SelectionMode.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionMode.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/selection/SelectionMode.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionMode.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/selection/SelectionRegistrar.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionRegistrar.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/selection/SelectionRegistrar.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/selection/SelectionRegistrar.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/selection/TextSelectionHandler.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/TextSelectionHandler.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/selection/TextSelectionHandler.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/selection/TextSelectionHandler.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/selection/TextSelectionProcessor.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/TextSelectionProcessor.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/selection/TextSelectionProcessor.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/selection/TextSelectionProcessor.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/Brush.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/Brush.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/Brush.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/Brush.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathBuilder.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathBuilder.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathBuilder.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathBuilder.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathCommand.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathCommand.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathCommand.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathCommand.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathNode.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathNode.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathNode.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathNode.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathParser.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathParser.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/PathParser.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/PathParser.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/Vector.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/Vector.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/Vector.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/Vector.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/compat/AndroidVectorResources.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/compat/AndroidVectorResources.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/compat/AndroidVectorResources.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/compat/AndroidVectorResources.kt
diff --git a/ui/framework/src/main/java/androidx/ui/core/vectorgraphics/compat/VectorResource.kt b/ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/compat/VectorResource.kt
similarity index 100%
rename from ui/framework/src/main/java/androidx/ui/core/vectorgraphics/compat/VectorResource.kt
rename to ui/ui-framework/src/main/java/androidx/ui/core/vectorgraphics/compat/VectorResource.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/DragEventTrackerTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/DragEventTrackerTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/DragEventTrackerTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/DragEventTrackerTest.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/InputFieldDelegateTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/InputFieldDelegateTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/InputFieldDelegateTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/InputFieldDelegateTest.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/gesture/DragGestureDetectorTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/gesture/DragGestureDetectorTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/gesture/DragGestureDetectorTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/gesture/DragGestureDetectorTest.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressIndicatorGestureDetectorTest.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/gesture/PressReleasedGestureDetectorTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressReleasedGestureDetectorTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/gesture/PressReleasedGestureDetectorTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/gesture/PressReleasedGestureDetectorTest.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/gesture/util/PolyFitLeastSquaresTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/gesture/util/PolyFitLeastSquaresTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/gesture/util/PolyFitLeastSquaresTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/gesture/util/PolyFitLeastSquaresTest.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/gesture/util/VelocityTrackerTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
diff --git a/ui/framework/src/test/java/androidx/ui/core/input/FocusManagerTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/input/FocusManagerTest.kt
similarity index 100%
rename from ui/framework/src/test/java/androidx/ui/core/input/FocusManagerTest.kt
rename to ui/ui-framework/src/test/java/androidx/ui/core/input/FocusManagerTest.kt
diff --git a/ui/framework/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ui/ui-framework/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
rename from ui/framework/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
rename to ui/ui-framework/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/ui/layout/OWNERS b/ui/ui-layout/OWNERS
similarity index 100%
rename from ui/layout/OWNERS
rename to ui/ui-layout/OWNERS
diff --git a/ui/layout/api/1.0.0-alpha01.txt b/ui/ui-layout/api/1.0.0-alpha01.txt
similarity index 100%
rename from ui/layout/api/1.0.0-alpha01.txt
rename to ui/ui-layout/api/1.0.0-alpha01.txt
diff --git a/ui/layout/api/api_lint.ignore b/ui/ui-layout/api/api_lint.ignore
similarity index 100%
rename from ui/layout/api/api_lint.ignore
rename to ui/ui-layout/api/api_lint.ignore
diff --git a/ui/layout/api/current.txt b/ui/ui-layout/api/current.txt
similarity index 100%
rename from ui/layout/api/current.txt
rename to ui/ui-layout/api/current.txt
diff --git a/ui/layout/api/res-1.0.0-alpha01.txt b/ui/ui-layout/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/layout/api/res-1.0.0-alpha01.txt
rename to ui/ui-layout/api/res-1.0.0-alpha01.txt
diff --git a/ui/layout/api/restricted_1.0.0-alpha01.txt b/ui/ui-layout/api/restricted_1.0.0-alpha01.txt
similarity index 100%
rename from ui/layout/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-layout/api/restricted_1.0.0-alpha01.txt
diff --git a/ui/layout/api/restricted_current.txt b/ui/ui-layout/api/restricted_current.txt
similarity index 100%
rename from ui/layout/api/restricted_current.txt
rename to ui/ui-layout/api/restricted_current.txt
diff --git a/ui/layout/build.gradle b/ui/ui-layout/build.gradle
similarity index 94%
rename from ui/layout/build.gradle
rename to ui/ui-layout/build.gradle
index fc303bf..4ba9c59 100644
--- a/ui/layout/build.gradle
+++ b/ui/ui-layout/build.gradle
@@ -32,8 +32,8 @@
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
-    api project(":ui-core")
-    api project(":ui-framework")
+    api project(":ui:ui-core")
+    api project(":ui:ui-framework")
     api(KOTLIN_COMPOSE_STDLIB)
 
     testImplementation(JUNIT)
@@ -53,7 +53,7 @@
     androidTestImplementation MOCKITO_KOTLIN, {
         exclude group: 'org.mockito' // to keep control on the mockito version
     }
-    androidTestImplementation project(path: ':ui-platform')
+    androidTestImplementation project(path: ':ui:ui-platform')
     androidTestImplementation(TRUTH)
     androidTestImplementation(project(":benchmark"))
 }
diff --git a/ui/layout/integration-tests/layout-demos/build.gradle b/ui/ui-layout/integration-tests/layout-demos/build.gradle
similarity index 86%
rename from ui/layout/integration-tests/layout-demos/build.gradle
rename to ui/ui-layout/integration-tests/layout-demos/build.gradle
index b94046e..3d29893 100644
--- a/ui/layout/integration-tests/layout-demos/build.gradle
+++ b/ui/ui-layout/integration-tests/layout-demos/build.gradle
@@ -34,10 +34,10 @@
     api(KOTLIN_COMPOSE_STDLIB)
     api(KOTLIN_COMPOSE_COROUTINES)
     implementation project(":compose:compose-runtime")
-    implementation project(":ui-framework")
-    implementation project(":ui-layout")
-    implementation project(":ui-text")
-    implementation project(":ui-layout:integration-tests:samples")
+    implementation project(":ui:ui-framework")
+    implementation project(":ui:ui-layout")
+    implementation project(":ui:ui-text")
+    implementation project(":ui:ui-layout:integration-tests:samples")
 }
 
 android {
diff --git a/ui/layout/integration-tests/layout-demos/src/main/AndroidManifest.xml b/ui/ui-layout/integration-tests/layout-demos/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/layout/integration-tests/layout-demos/src/main/AndroidManifest.xml
rename to ui/ui-layout/integration-tests/layout-demos/src/main/AndroidManifest.xml
diff --git a/ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutActivity.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutActivity.kt
similarity index 100%
rename from ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutActivity.kt
rename to ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutActivity.kt
diff --git a/ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
similarity index 100%
rename from ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
rename to ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ComplexLayoutDemos.kt
diff --git a/ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
similarity index 100%
rename from ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
rename to ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/LayoutActivity.kt
diff --git a/ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ScrollerActivity.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ScrollerActivity.kt
similarity index 100%
rename from ui/layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ScrollerActivity.kt
rename to ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/ui/layout/demos/ScrollerActivity.kt
diff --git a/ui/layout/integration-tests/samples/build.gradle b/ui/ui-layout/integration-tests/samples/build.gradle
similarity index 97%
rename from ui/layout/integration-tests/samples/build.gradle
rename to ui/ui-layout/integration-tests/samples/build.gradle
index a465157..ec35d2b 100644
--- a/ui/layout/integration-tests/samples/build.gradle
+++ b/ui/ui-layout/integration-tests/samples/build.gradle
@@ -31,7 +31,7 @@
     api(KOTLIN_COMPOSE_STDLIB)
     implementation project(":annotation:annotation-sampled")
     api project(":compose:compose-runtime")
-    api project(":ui-layout")
+    api project(":ui:ui-layout")
 }
 
 android {
diff --git a/ui/layout/integration-tests/samples/src/main/AndroidManifest.xml b/ui/ui-layout/integration-tests/samples/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/layout/integration-tests/samples/src/main/AndroidManifest.xml
rename to ui/ui-layout/integration-tests/samples/src/main/AndroidManifest.xml
diff --git a/ui/layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutSamples.kt b/ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutSamples.kt
similarity index 100%
rename from ui/layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutSamples.kt
rename to ui/ui-layout/integration-tests/samples/src/main/java/androidx/ui/layout/samples/LayoutSamples.kt
diff --git a/ui/layout/src/androidTest/AndroidManifest.xml b/ui/ui-layout/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/layout/src/androidTest/AndroidManifest.xml
rename to ui/ui-layout/src/androidTest/AndroidManifest.xml
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AlignTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/AspectRatioTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ConstrainedBoxTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ContainerTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/FlexTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/IntrinsicTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/IntrinsicTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/IntrinsicTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/IntrinsicTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/LayoutTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/LayoutTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/LayoutTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/OnPositionedTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/PaddingTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/ScrollerPerformance.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ScrollerPerformance.kt
similarity index 99%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/ScrollerPerformance.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ScrollerPerformance.kt
index fe060a2..2fe1e4d 100644
--- a/ui/layout/src/androidTest/java/androidx/ui/layout/test/ScrollerPerformance.kt
+++ b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ScrollerPerformance.kt
@@ -27,6 +27,7 @@
 import androidx.compose.setContent
 import androidx.compose.unaryPlus
 import androidx.test.filters.FlakyTest
+import androidx.test.filters.LargeTest
 import androidx.ui.core.CraneWrapper
 import androidx.ui.core.Draw
 import androidx.ui.core.dp
@@ -46,6 +47,7 @@
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
 
+@LargeTest
 @RunWith(JUnit4::class)
 class ScrollerPerformance : LayoutTest() {
     @get:Rule
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/ScrollerTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ScrollerTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/ScrollerTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/ScrollerTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/SpacerTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/StackTest.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/TestActivity.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TestActivity.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/TestActivity.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/TestActivity.kt
diff --git a/ui/layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt b/ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
similarity index 100%
rename from ui/layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
rename to ui/ui-layout/src/androidTest/java/androidx/ui/layout/test/WrapTest.kt
diff --git a/ui/layout/src/main/AndroidManifest.xml b/ui/ui-layout/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/layout/src/main/AndroidManifest.xml
rename to ui/ui-layout/src/main/AndroidManifest.xml
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Align.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Align.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Align.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/AspectRatio.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/AspectRatio.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/AspectRatio.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/ConstrainedBox.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/ConstrainedBox.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/ConstrainedBox.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/ConstrainedBox.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Container.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Container.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Container.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Container.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/DpConstraints.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/DpConstraints.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/DpConstraints.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/DpConstraints.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Flex.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Flex.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Flex.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Intrinsic.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Intrinsic.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Intrinsic.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Padding.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Padding.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Padding.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Scroller.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Scroller.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Scroller.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Scroller.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Spacer.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Spacer.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Spacer.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Stack.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Stack.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Stack.kt
diff --git a/ui/layout/src/main/java/androidx/ui/layout/Wrap.kt b/ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
similarity index 100%
rename from ui/layout/src/main/java/androidx/ui/layout/Wrap.kt
rename to ui/ui-layout/src/main/java/androidx/ui/layout/Wrap.kt
diff --git a/ui/layout/src/test/java/androidx/ui/layout/test/DpConstraintsTest.kt b/ui/ui-layout/src/test/java/androidx/ui/layout/test/DpConstraintsTest.kt
similarity index 100%
rename from ui/layout/src/test/java/androidx/ui/layout/test/DpConstraintsTest.kt
rename to ui/ui-layout/src/test/java/androidx/ui/layout/test/DpConstraintsTest.kt
diff --git a/ui/material/OWNERS b/ui/ui-material/OWNERS
similarity index 100%
rename from ui/material/OWNERS
rename to ui/ui-material/OWNERS
diff --git a/ui/material/api/1.0.0-alpha01.txt b/ui/ui-material/api/1.0.0-alpha01.txt
similarity index 100%
rename from ui/material/api/1.0.0-alpha01.txt
rename to ui/ui-material/api/1.0.0-alpha01.txt
diff --git a/ui/material/api/api_lint.ignore b/ui/ui-material/api/api_lint.ignore
similarity index 100%
rename from ui/material/api/api_lint.ignore
rename to ui/ui-material/api/api_lint.ignore
diff --git a/ui/material/api/current.txt b/ui/ui-material/api/current.txt
similarity index 100%
rename from ui/material/api/current.txt
rename to ui/ui-material/api/current.txt
diff --git a/ui/material/api/res-1.0.0-alpha01.txt b/ui/ui-material/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/material/api/res-1.0.0-alpha01.txt
rename to ui/ui-material/api/res-1.0.0-alpha01.txt
diff --git a/ui/material/api/restricted_1.0.0-alpha01.txt b/ui/ui-material/api/restricted_1.0.0-alpha01.txt
similarity index 100%
rename from ui/material/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-material/api/restricted_1.0.0-alpha01.txt
diff --git a/ui/material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
similarity index 100%
rename from ui/material/api/restricted_current.txt
rename to ui/ui-material/api/restricted_current.txt
diff --git a/ui/material/build.gradle b/ui/ui-material/build.gradle
similarity index 87%
rename from ui/material/build.gradle
rename to ui/ui-material/build.gradle
index ef46503..8a07242 100644
--- a/ui/material/build.gradle
+++ b/ui/ui-material/build.gradle
@@ -32,12 +32,12 @@
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
     api project(":compose:compose-runtime")
-    api project(":ui-core")
-    api project(':ui-framework')
-    api project(':ui-layout')
-    api project(':ui-text')
-    api project(':ui-animation')
-    api project(':ui-foundation')
+    api project(":ui:ui-core")
+    api project(':ui:ui-framework')
+    api project(':ui:ui-layout')
+    api project(':ui:ui-text')
+    api project(':ui:ui-animation')
+    api project(':ui:ui-foundation')
     api(KOTLIN_COMPOSE_STDLIB)
     testImplementation(JUNIT)
     testImplementation(MOCKITO_CORE)
@@ -47,8 +47,8 @@
         exclude group: 'org.mockito' // to keep control on the mockito version
     }
     testImplementation(TRUTH)
-    androidTestImplementation project(':ui-material:integration-tests:samples')
-    androidTestImplementation project(':ui-test')
+    androidTestImplementation project(':ui:ui-material:integration-tests:samples')
+    androidTestImplementation project(':ui:ui-test')
     androidTestImplementation(JUNIT)
     androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
     androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
diff --git a/ui/material/integration-tests/material-demos/build.gradle b/ui/ui-material/integration-tests/material-demos/build.gradle
similarity index 84%
rename from ui/material/integration-tests/material-demos/build.gradle
rename to ui/ui-material/integration-tests/material-demos/build.gradle
index dff8146..bf91ec0 100644
--- a/ui/material/integration-tests/material-demos/build.gradle
+++ b/ui/ui-material/integration-tests/material-demos/build.gradle
@@ -20,10 +20,10 @@
     api(KOTLIN_COMPOSE_STDLIB)
     api(KOTLIN_COMPOSE_COROUTINES)
     api project(":compose:compose-runtime")
-    api project(':ui-material')
-    api project(':ui-android-view-non-ir')
-    implementation project(":ui-layout")
-    implementation project(":ui-material:integration-tests:samples")
+    api project(':ui:ui-material')
+    api project(':ui:ui-android-view-non-ir')
+    implementation project(":ui:ui-layout")
+    implementation project(":ui:ui-material:integration-tests:samples")
 }
 
 android {
diff --git a/ui/material/integration-tests/material-demos/src/main/AndroidManifest.xml b/ui/ui-material/integration-tests/material-demos/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/AndroidManifest.xml
rename to ui/ui-material/integration-tests/material-demos/src/main/AndroidManifest.xml
diff --git a/ui/material/integration-tests/material-demos/src/main/ic_launcher-web.png b/ui/ui-material/integration-tests/material-demos/src/main/ic_launcher-web.png
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/ic_launcher-web.png
rename to ui/ui-material/integration-tests/material-demos/src/main/ic_launcher-web.png
Binary files differ
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomDrawerActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomDrawerActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomDrawerActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomDrawerActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/CustomShapeActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersDemo.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DividersSpacersDemo.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonDemo.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/FloatingActionButtonDemo.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ModalDrawerActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ModalDrawerActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ModalDrawerActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ModalDrawerActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleDemo.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/RippleDemo.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionsControlsDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionsControlsDemo.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionsControlsDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionsControlsDemo.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/StaticDrawerActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/StaticDrawerActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/StaticDrawerActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/StaticDrawerActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TextActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TextActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TextActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TextActivity.kt
diff --git a/ui/material/integration-tests/material-demos/src/main/res/drawable-hdpi/ic_favorite.png b/ui/ui-material/integration-tests/material-demos/src/main/res/drawable-hdpi/ic_favorite.png
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/res/drawable-hdpi/ic_favorite.png
rename to ui/ui-material/integration-tests/material-demos/src/main/res/drawable-hdpi/ic_favorite.png
Binary files differ
diff --git a/ui/material/integration-tests/material-demos/src/main/res/drawable-mdpi/ic_favorite.png b/ui/ui-material/integration-tests/material-demos/src/main/res/drawable-mdpi/ic_favorite.png
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/res/drawable-mdpi/ic_favorite.png
rename to ui/ui-material/integration-tests/material-demos/src/main/res/drawable-mdpi/ic_favorite.png
Binary files differ
diff --git a/ui/material/integration-tests/material-demos/src/main/res/drawable-xhdpi/ic_favorite.png b/ui/ui-material/integration-tests/material-demos/src/main/res/drawable-xhdpi/ic_favorite.png
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/res/drawable-xhdpi/ic_favorite.png
rename to ui/ui-material/integration-tests/material-demos/src/main/res/drawable-xhdpi/ic_favorite.png
Binary files differ
diff --git a/ui/material/integration-tests/material-demos/src/main/res/drawable-xxhdpi/ic_favorite.png b/ui/ui-material/integration-tests/material-demos/src/main/res/drawable-xxhdpi/ic_favorite.png
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/res/drawable-xxhdpi/ic_favorite.png
rename to ui/ui-material/integration-tests/material-demos/src/main/res/drawable-xxhdpi/ic_favorite.png
Binary files differ
diff --git a/ui/material/integration-tests/material-demos/src/main/res/drawable/ripple.xml b/ui/ui-material/integration-tests/material-demos/src/main/res/drawable/ripple.xml
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/res/drawable/ripple.xml
rename to ui/ui-material/integration-tests/material-demos/src/main/res/drawable/ripple.xml
diff --git a/ui/material/integration-tests/material-demos/src/main/res/drawable/ripple_shape.xml b/ui/ui-material/integration-tests/material-demos/src/main/res/drawable/ripple_shape.xml
similarity index 100%
rename from ui/material/integration-tests/material-demos/src/main/res/drawable/ripple_shape.xml
rename to ui/ui-material/integration-tests/material-demos/src/main/res/drawable/ripple_shape.xml
diff --git a/ui/material/integration-tests/material-studies/OWNERS b/ui/ui-material/integration-tests/material-studies/OWNERS
similarity index 100%
rename from ui/material/integration-tests/material-studies/OWNERS
rename to ui/ui-material/integration-tests/material-studies/OWNERS
diff --git a/ui/material/integration-tests/material-studies/build.gradle b/ui/ui-material/integration-tests/material-studies/build.gradle
similarity index 90%
rename from ui/material/integration-tests/material-studies/build.gradle
rename to ui/ui-material/integration-tests/material-studies/build.gradle
index 2cf94ea..0567fe5 100644
--- a/ui/material/integration-tests/material-studies/build.gradle
+++ b/ui/ui-material/integration-tests/material-studies/build.gradle
@@ -33,9 +33,9 @@
     implementation "androidx.activity:activity:1.0.0-alpha01"
     implementation(KOTLIN_COMPOSE_STDLIB)
     implementation(project(":compose:compose-runtime"))
-    implementation project(':ui-material')
-    implementation project(":ui-framework")
-    implementation project(":ui-layout")
+    implementation project(':ui:ui-material')
+    implementation project(":ui:ui-framework")
+    implementation project(":ui:ui-layout")
 }
 
 android {
diff --git a/ui/material/integration-tests/material-studies/src/main/AndroidManifest.xml b/ui/ui-material/integration-tests/material-studies/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/AndroidManifest.xml
rename to ui/ui-material/integration-tests/material-studies/src/main/AndroidManifest.xml
diff --git a/ui/material/integration-tests/material-studies/src/main/ic_launcher-web.png b/ui/ui-material/integration-tests/material-studies/src/main/ic_launcher-web.png
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/ic_launcher-web.png
rename to ui/ui-material/integration-tests/material-studies/src/main/ic_launcher-web.png
Binary files differ
diff --git a/ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MainActivity.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MainActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MainActivity.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MainActivity.kt
diff --git a/ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MissingMaterialComponents.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MissingMaterialComponents.kt
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MissingMaterialComponents.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MissingMaterialComponents.kt
diff --git a/ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
diff --git a/ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyCards.kt
diff --git a/ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
diff --git a/ui/material/integration-tests/material-studies/src/main/res/drawable/material_logo.xml b/ui/ui-material/integration-tests/material-studies/src/main/res/drawable/material_logo.xml
similarity index 100%
rename from ui/material/integration-tests/material-studies/src/main/res/drawable/material_logo.xml
rename to ui/ui-material/integration-tests/material-studies/src/main/res/drawable/material_logo.xml
diff --git a/ui/material/integration-tests/samples/build.gradle b/ui/ui-material/integration-tests/samples/build.gradle
similarity index 97%
rename from ui/material/integration-tests/samples/build.gradle
rename to ui/ui-material/integration-tests/samples/build.gradle
index 4febfd7..24f50aa 100644
--- a/ui/material/integration-tests/samples/build.gradle
+++ b/ui/ui-material/integration-tests/samples/build.gradle
@@ -32,7 +32,7 @@
 
     api(KOTLIN_COMPOSE_STDLIB)
     api project(":compose:compose-runtime")
-    api project(':ui-material')
+    api project(':ui:ui-material')
 }
 
 android {
diff --git a/ui/material/integration-tests/samples/src/main/AndroidManifest.xml b/ui/ui-material/integration-tests/samples/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/material/integration-tests/samples/src/main/AndroidManifest.xml
rename to ui/ui-material/integration-tests/samples/src/main/AndroidManifest.xml
diff --git a/ui/material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
similarity index 100%
rename from ui/material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
rename to ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
diff --git a/ui/material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt b/ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
similarity index 100%
rename from ui/material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
rename to ui/ui-material/integration-tests/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
diff --git a/ui/material/src/androidTest/AndroidManifest.xml b/ui/ui-material/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/material/src/androidTest/AndroidManifest.xml
rename to ui/ui-material/src/androidTest/AndroidManifest.xml
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/ButtonUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/ButtonUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/ColoredRectUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/ColoredRectUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/ColoredRectUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/ColoredRectUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/DividerUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/DividerUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/DividerUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/DividerUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/DrawerTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/DrawerTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/DrawerTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/DrawerTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/FloatingActionButtonUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/MaterialTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/MaterialTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/MaterialTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/MaterialTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/ProgressIndicatorTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/ProgressIndicatorTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/ProgressIndicatorTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/ProgressIndicatorTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/RadioGroupUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/RadioGroupUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/RadioGroupUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/RadioGroupUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/RippleEffectTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/SwitchUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/TabTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/TabTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/TabTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/TopAppBarUiTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/TopAppBarUiTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/TopAppBarUiTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/TopAppBarUiTest.kt
diff --git a/ui/material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt b/ui/ui-material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt
similarity index 100%
rename from ui/material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt
rename to ui/ui-material/src/androidTest/java/androidx/ui/material/shape/CutCornerShapeTest.kt
diff --git a/ui/material/src/androidTest/res/values/styles.xml b/ui/ui-material/src/androidTest/res/values/styles.xml
similarity index 100%
rename from ui/material/src/androidTest/res/values/styles.xml
rename to ui/ui-material/src/androidTest/res/values/styles.xml
diff --git a/ui/material/src/main/AndroidManifest.xml b/ui/ui-material/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/material/src/main/AndroidManifest.xml
rename to ui/ui-material/src/main/AndroidManifest.xml
diff --git a/ui/material/src/main/java/androidx/ui/material/AppBar.kt b/ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/AppBar.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/Button.kt b/ui/ui-material/src/main/java/androidx/ui/material/Button.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/Button.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/Button.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/Checkbox.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/Checkbox.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/Divider.kt b/ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/Divider.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/Divider.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/Drawer.kt b/ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/Drawer.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/Drawer.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/FloatingActionButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/FloatingActionButton.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/FloatingActionButton.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/MaterialTheme.kt b/ui/ui-material/src/main/java/androidx/ui/material/MaterialTheme.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/MaterialTheme.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/MaterialTheme.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/ProgressIndicator.kt b/ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/ProgressIndicator.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/ProgressIndicator.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/RadioButton.kt b/ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/RadioButton.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/RadioButton.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/Switch.kt b/ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/Switch.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/Switch.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/Tab.kt b/ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/Tab.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/Tab.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/Text.kt b/ui/ui-material/src/main/java/androidx/ui/material/Text.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/Text.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/Text.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/ripple/DefaultRippleEffect.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/ripple/Ripple.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/Ripple.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/ripple/Ripple.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/ripple/Ripple.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffect.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/ripple/RippleEffectFactory.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffectFactory.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/ripple/RippleEffectFactory.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleEffectFactory.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/ripple/RippleSurface.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleSurface.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/ripple/RippleSurface.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleSurface.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/ripple/RippleTheme.kt b/ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleTheme.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/ripple/RippleTheme.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/ripple/RippleTheme.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt b/ui/ui-material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/shape/CutCornerShape.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/surface/Card.kt b/ui/ui-material/src/main/java/androidx/ui/material/surface/Card.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/surface/Card.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/surface/Card.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/surface/DrawShadow.kt b/ui/ui-material/src/main/java/androidx/ui/material/surface/DrawShadow.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/surface/DrawShadow.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/surface/DrawShadow.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/surface/Surface.kt b/ui/ui-material/src/main/java/androidx/ui/material/surface/Surface.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/surface/Surface.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/surface/Surface.kt
diff --git a/ui/material/src/main/java/androidx/ui/material/surface/TransparentSurface.kt b/ui/ui-material/src/main/java/androidx/ui/material/surface/TransparentSurface.kt
similarity index 100%
rename from ui/material/src/main/java/androidx/ui/material/surface/TransparentSurface.kt
rename to ui/ui-material/src/main/java/androidx/ui/material/surface/TransparentSurface.kt
diff --git a/ui/material/src/test/java/androidx/ui/material/ripple/DefaultRippleEffectTest.kt b/ui/ui-material/src/test/java/androidx/ui/material/ripple/DefaultRippleEffectTest.kt
similarity index 100%
rename from ui/material/src/test/java/androidx/ui/material/ripple/DefaultRippleEffectTest.kt
rename to ui/ui-material/src/test/java/androidx/ui/material/ripple/DefaultRippleEffectTest.kt
diff --git a/ui/material/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ui/ui-material/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
rename from ui/material/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
rename to ui/ui-material/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/ui/platform/OWNERS b/ui/ui-platform/OWNERS
similarity index 100%
rename from ui/platform/OWNERS
rename to ui/ui-platform/OWNERS
diff --git a/ui/platform/api/1.0.0-alpha01.txt b/ui/ui-platform/api/1.0.0-alpha01.txt
similarity index 99%
rename from ui/platform/api/1.0.0-alpha01.txt
rename to ui/ui-platform/api/1.0.0-alpha01.txt
index 06101dc..5ff761a 100644
--- a/ui/platform/api/1.0.0-alpha01.txt
+++ b/ui/ui-platform/api/1.0.0-alpha01.txt
@@ -200,18 +200,21 @@
     method public androidx.ui.core.IntPx getLayoutX();
     method public androidx.ui.core.IntPx getLayoutY();
     method public String? getName();
+    method public float getOpacity();
     method public androidx.ui.engine.geometry.Shape? getShape();
     method public void setClipToShape(boolean value);
     method public void setContainerX(androidx.ui.core.IntPx p);
     method public void setContainerY(androidx.ui.core.IntPx p);
     method public void setLayoutX(androidx.ui.core.IntPx p);
     method public void setLayoutY(androidx.ui.core.IntPx p);
+    method public void setOpacity(float value);
     method public void setShape(androidx.ui.engine.geometry.Shape? value);
     property public final boolean clipToShape;
     property public final androidx.ui.core.IntPx containerX;
     property public final androidx.ui.core.IntPx containerY;
     property public final androidx.ui.core.IntPx layoutX;
     property public final androidx.ui.core.IntPx layoutY;
+    property public final float opacity;
     property public androidx.ui.core.RepaintBoundaryNode? repaintBoundary;
     property public final androidx.ui.engine.geometry.Shape? shape;
   }
diff --git a/ui/platform/api/api_lint.ignore b/ui/ui-platform/api/api_lint.ignore
similarity index 100%
rename from ui/platform/api/api_lint.ignore
rename to ui/ui-platform/api/api_lint.ignore
diff --git a/ui/platform/api/current.txt b/ui/ui-platform/api/current.txt
similarity index 99%
rename from ui/platform/api/current.txt
rename to ui/ui-platform/api/current.txt
index 06101dc..5ff761a 100644
--- a/ui/platform/api/current.txt
+++ b/ui/ui-platform/api/current.txt
@@ -200,18 +200,21 @@
     method public androidx.ui.core.IntPx getLayoutX();
     method public androidx.ui.core.IntPx getLayoutY();
     method public String? getName();
+    method public float getOpacity();
     method public androidx.ui.engine.geometry.Shape? getShape();
     method public void setClipToShape(boolean value);
     method public void setContainerX(androidx.ui.core.IntPx p);
     method public void setContainerY(androidx.ui.core.IntPx p);
     method public void setLayoutX(androidx.ui.core.IntPx p);
     method public void setLayoutY(androidx.ui.core.IntPx p);
+    method public void setOpacity(float value);
     method public void setShape(androidx.ui.engine.geometry.Shape? value);
     property public final boolean clipToShape;
     property public final androidx.ui.core.IntPx containerX;
     property public final androidx.ui.core.IntPx containerY;
     property public final androidx.ui.core.IntPx layoutX;
     property public final androidx.ui.core.IntPx layoutY;
+    property public final float opacity;
     property public androidx.ui.core.RepaintBoundaryNode? repaintBoundary;
     property public final androidx.ui.engine.geometry.Shape? shape;
   }
diff --git a/ui/platform/api/res-1.0.0-alpha01.txt b/ui/ui-platform/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/platform/api/res-1.0.0-alpha01.txt
rename to ui/ui-platform/api/res-1.0.0-alpha01.txt
diff --git a/ui/ui-platform/api/restricted_1.0.0-alpha01.txt b/ui/ui-platform/api/restricted_1.0.0-alpha01.txt
new file mode 100644
index 0000000..719bbb6
--- /dev/null
+++ b/ui/ui-platform/api/restricted_1.0.0-alpha01.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.ui.core {
+
+  public final class AndroidCraneView extends android.view.ViewGroup implements androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
+  }
+
+}
+
+package androidx.ui.core.text {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class AndroidFontResourceLoader implements androidx.ui.text.font.Font.ResourceLoader {
+    ctor public AndroidFontResourceLoader(android.content.Context context);
+    method public android.graphics.Typeface load(androidx.ui.text.font.Font font);
+  }
+
+}
+
diff --git a/ui/ui-platform/api/restricted_current.txt b/ui/ui-platform/api/restricted_current.txt
new file mode 100644
index 0000000..719bbb6
--- /dev/null
+++ b/ui/ui-platform/api/restricted_current.txt
@@ -0,0 +1,17 @@
+// Signature format: 3.0
+package androidx.ui.core {
+
+  public final class AndroidCraneView extends android.view.ViewGroup implements androidx.ui.core.Owner androidx.ui.core.SemanticsTreeProvider {
+  }
+
+}
+
+package androidx.ui.core.text {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class AndroidFontResourceLoader implements androidx.ui.text.font.Font.ResourceLoader {
+    ctor public AndroidFontResourceLoader(android.content.Context context);
+    method public android.graphics.Typeface load(androidx.ui.text.font.Font font);
+  }
+
+}
+
diff --git a/ui/platform/build.gradle b/ui/ui-platform/build.gradle
similarity index 97%
rename from ui/platform/build.gradle
rename to ui/ui-platform/build.gradle
index 5e66748..13dd9c6 100644
--- a/ui/platform/build.gradle
+++ b/ui/ui-platform/build.gradle
@@ -30,8 +30,8 @@
 
 dependencies {
     api project(":compose:compose-runtime")
-    api project(":ui-core")
-    api project(":ui-text")
+    api project(":ui:ui-core")
+    api project(":ui:ui-text")
     api(KOTLIN_COMPOSE_STDLIB)
 
     testImplementation(JUNIT)
diff --git a/ui/platform/src/androidTest/AndroidManifest.xml b/ui/ui-platform/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/platform/src/androidTest/AndroidManifest.xml
rename to ui/ui-platform/src/androidTest/AndroidManifest.xml
diff --git a/ui/platform/src/androidTest/java/androidx/ui/core/input/RecordingInputConnectionTest.kt b/ui/ui-platform/src/androidTest/java/androidx/ui/core/input/RecordingInputConnectionTest.kt
similarity index 100%
rename from ui/platform/src/androidTest/java/androidx/ui/core/input/RecordingInputConnectionTest.kt
rename to ui/ui-platform/src/androidTest/java/androidx/ui/core/input/RecordingInputConnectionTest.kt
diff --git a/ui/platform/src/androidTest/java/androidx/ui/core/pointerinput/MotionEventAdapterTest.kt b/ui/ui-platform/src/androidTest/java/androidx/ui/core/pointerinput/MotionEventAdapterTest.kt
similarity index 100%
rename from ui/platform/src/androidTest/java/androidx/ui/core/pointerinput/MotionEventAdapterTest.kt
rename to ui/ui-platform/src/androidTest/java/androidx/ui/core/pointerinput/MotionEventAdapterTest.kt
diff --git a/ui/platform/src/main/AndroidManifest.xml b/ui/ui-platform/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/platform/src/main/AndroidManifest.xml
rename to ui/ui-platform/src/main/AndroidManifest.xml
diff --git a/ui/platform/src/main/java/androidx/ui/core/AndroidOwner.kt b/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
similarity index 97%
rename from ui/platform/src/main/java/androidx/ui/core/AndroidOwner.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
index 8d01367..d33321f 100644
--- a/ui/platform/src/main/java/androidx/ui/core/AndroidOwner.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/AndroidOwner.kt
@@ -579,9 +579,6 @@
         nodeToModels.remove(node).forEach { model ->
             modelToNodes.remove(model, node)
         }
-        if (node is LayoutNode) {
-            relayoutNodes.remove(node)
-        }
     }
 
     private inner class DrawNodeScopeImpl(
@@ -763,6 +760,7 @@
             clipPath = outlineResolver.manualClipPath
             dirty = true
         }
+        alpha = repaintBoundaryNode.opacity
     }
 }
 
@@ -812,16 +810,18 @@
     }
 
     override fun callDraw(canvas: Canvas) {
-        val androidCanvas = canvas.nativeCanvas
-        if (androidCanvas.isHardwareAccelerated) {
-            updateDisplayList()
-            androidCanvas.drawRenderNode(renderNode)
-        } else {
-            canvas.save()
-            canvas.translate(renderNode.left.toFloat(), renderNode.top.toFloat())
-            ownerView.callChildDraw(androidCanvas, repaintBoundaryNode)
-            canvas.restore()
-            dirty = false
+        if (renderNode.alpha > 0f) {
+            val androidCanvas = canvas.nativeCanvas
+            if (androidCanvas.isHardwareAccelerated) {
+                updateDisplayList()
+                androidCanvas.drawRenderNode(renderNode)
+            } else {
+                canvas.save()
+                canvas.translate(renderNode.left.toFloat(), renderNode.top.toFloat())
+                ownerView.callChildDraw(androidCanvas, repaintBoundaryNode)
+                canvas.restore()
+                dirty = false
+            }
         }
     }
 
@@ -850,6 +850,7 @@
             clipPath = outlineResolver.manualClipPath
             dirty = true
         }
+        renderNode.alpha = repaintBoundaryNode.opacity
         ownerView.invalidate()
     }
 }
diff --git a/ui/platform/src/main/java/androidx/ui/core/ComponentNodes.kt b/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
similarity index 98%
rename from ui/platform/src/main/java/androidx/ui/core/ComponentNodes.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
index 98f92da..b370f38 100644
--- a/ui/platform/src/main/java/androidx/ui/core/ComponentNodes.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/ComponentNodes.kt
@@ -316,6 +316,18 @@
             }
         }
 
+    /**
+     * The fraction of children's alpha value.
+     */
+    var opacity: Float = 1f
+        set(value) {
+            if (field != value) {
+                require(value in 0f..1f) { "Opacity should be within [0, 1] range" }
+                field = value
+                owner?.onRepaintBoundaryParamsChange(this)
+            }
+        }
+
     override val repaintBoundary: RepaintBoundaryNode? get() = this
 }
 
diff --git a/ui/platform/src/main/java/androidx/ui/core/DebugUtils.kt b/ui/ui-platform/src/main/java/androidx/ui/core/DebugUtils.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/DebugUtils.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/DebugUtils.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/ErrorMessages.kt b/ui/ui-platform/src/main/java/androidx/ui/core/ErrorMessages.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/ErrorMessages.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/ErrorMessages.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/SemanticsTreeNode.kt b/ui/ui-platform/src/main/java/androidx/ui/core/SemanticsTreeNode.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/SemanticsTreeNode.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/SemanticsTreeNode.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/SemanticsTreeNodeImpl.kt b/ui/ui-platform/src/main/java/androidx/ui/core/SemanticsTreeNodeImpl.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/SemanticsTreeNodeImpl.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/SemanticsTreeNodeImpl.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/Unicode.kt b/ui/ui-platform/src/main/java/androidx/ui/core/Unicode.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/Unicode.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/Unicode.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/input/InputState.kt b/ui/ui-platform/src/main/java/androidx/ui/core/input/InputState.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/input/InputState.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/input/InputState.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/input/OWNERS b/ui/ui-platform/src/main/java/androidx/ui/core/input/OWNERS
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/input/OWNERS
rename to ui/ui-platform/src/main/java/androidx/ui/core/input/OWNERS
diff --git a/ui/platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt b/ui/ui-platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/input/RecordingInputConnection.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/input/TextInputServiceAndroid.kt b/ui/ui-platform/src/main/java/androidx/ui/core/input/TextInputServiceAndroid.kt
similarity index 98%
rename from ui/platform/src/main/java/androidx/ui/core/input/TextInputServiceAndroid.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/input/TextInputServiceAndroid.kt
index 6d6e0d5..776a15f 100644
--- a/ui/platform/src/main/java/androidx/ui/core/input/TextInputServiceAndroid.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/input/TextInputServiceAndroid.kt
@@ -119,13 +119,13 @@
     private fun fillEditorInfo(keyboardType: KeyboardType, outInfo: EditorInfo) {
         when (keyboardType) {
             KeyboardType.Text -> outInfo.inputType = InputType.TYPE_CLASS_TEXT
-            KeyboardType.ASCII -> {
+            KeyboardType.Ascii -> {
                 outInfo.inputType = InputType.TYPE_CLASS_TEXT
                 outInfo.imeOptions = EditorInfo.IME_FLAG_FORCE_ASCII
             }
             KeyboardType.Number -> outInfo.inputType = InputType.TYPE_CLASS_NUMBER
             KeyboardType.Phone -> outInfo.inputType = InputType.TYPE_CLASS_PHONE
-            KeyboardType.URI ->
+            KeyboardType.Uri ->
                 outInfo.inputType = InputType.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_VARIATION_URI
             KeyboardType.Email ->
                 outInfo.inputType =
diff --git a/ui/platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/HitPathTracker.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/pointerinput/MotionEventAdapter.kt b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/MotionEventAdapter.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/pointerinput/MotionEventAdapter.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/MotionEventAdapter.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEvent.kt b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEvent.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEvent.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEvent.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt b/ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/pointerinput/PointerInputEventProcessor.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsConfiguration.kt b/ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsConfiguration.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsConfiguration.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsConfiguration.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsFlag.kt b/ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsFlag.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsFlag.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsFlag.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsHintOverrides.kt b/ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsHintOverrides.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsHintOverrides.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsHintOverrides.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsNode.kt b/ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsNode.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsNode.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsNode.kt
diff --git a/ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsOwner.kt b/ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsOwner.kt
similarity index 100%
rename from ui/platform/src/main/java/androidx/ui/core/semantics/SemanticsOwner.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/semantics/SemanticsOwner.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/platform/AndroidFontResourceLoader.kt b/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
similarity index 73%
rename from ui/text/src/main/java/androidx/ui/text/platform/AndroidFontResourceLoader.kt
rename to ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
index 683ba66..e92cac8 100644
--- a/ui/text/src/main/java/androidx/ui/text/platform/AndroidFontResourceLoader.kt
+++ b/ui/ui-platform/src/main/java/androidx/ui/core/text/AndroidFontResourceLoader.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.platform
+package androidx.ui.core.text
 
 import android.content.Context
 import android.graphics.Typeface
@@ -28,7 +28,7 @@
  * @hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-class AndroidFontResourceLoader(val context: Context) : Font.ResourceLoader<Typeface> {
+class AndroidFontResourceLoader(private val context: Context) : Font.ResourceLoader {
     override fun load(font: Font): Typeface {
         // TODO(siyamed): This is an expensive operation and discouraged in the API Docs
         // remove when alternative resource loading system is defined.
@@ -38,17 +38,6 @@
             context.packageName
         )
 
-        val typeface = try {
-            ResourcesCompat.getFont(context, resId)
-        } catch (e: Throwable) {
-            null
-        }
-
-        if (typeface == null) {
-            throw IllegalStateException(
-                "Cannot create Typeface from $font with resource id $resId"
-            )
-        }
-        return typeface
+        return ResourcesCompat.getFont(context, resId)!!
     }
 }
diff --git a/ui/platform/src/test/java/androidx/ui/core/ComponentNodeTest.kt b/ui/ui-platform/src/test/java/androidx/ui/core/ComponentNodeTest.kt
similarity index 100%
rename from ui/platform/src/test/java/androidx/ui/core/ComponentNodeTest.kt
rename to ui/ui-platform/src/test/java/androidx/ui/core/ComponentNodeTest.kt
diff --git a/ui/platform/src/test/java/androidx/ui/core/input/RecordingInputConnectionUpdateInputStateTest.kt b/ui/ui-platform/src/test/java/androidx/ui/core/input/RecordingInputConnectionUpdateInputStateTest.kt
similarity index 100%
rename from ui/platform/src/test/java/androidx/ui/core/input/RecordingInputConnectionUpdateInputStateTest.kt
rename to ui/ui-platform/src/test/java/androidx/ui/core/input/RecordingInputConnectionUpdateInputStateTest.kt
diff --git a/ui/platform/src/test/java/androidx/ui/core/input/TextInputServiceAndroidTest.kt b/ui/ui-platform/src/test/java/androidx/ui/core/input/TextInputServiceAndroidTest.kt
similarity index 98%
rename from ui/platform/src/test/java/androidx/ui/core/input/TextInputServiceAndroidTest.kt
rename to ui/ui-platform/src/test/java/androidx/ui/core/input/TextInputServiceAndroidTest.kt
index ccb7425..3609daa9 100644
--- a/ui/platform/src/test/java/androidx/ui/core/input/TextInputServiceAndroidTest.kt
+++ b/ui/ui-platform/src/test/java/androidx/ui/core/input/TextInputServiceAndroidTest.kt
@@ -68,7 +68,7 @@
     fun test_fill_editor_info_ascii() {
         textInputService.startInput(
             EditorState(""),
-            KeyboardType.ASCII,
+            KeyboardType.Ascii,
             onEditCommand = {},
             onEditorActionPerformed = {})
 
@@ -111,7 +111,7 @@
     fun test_fill_editor_info_uri() {
         textInputService.startInput(
             EditorState(""),
-            KeyboardType.URI,
+            KeyboardType.Uri,
             onEditCommand = {},
             onEditorActionPerformed = {})
 
diff --git a/ui/platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
similarity index 100%
rename from ui/platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
rename to ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
diff --git a/ui/platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
similarity index 100%
rename from ui/platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
rename to ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
diff --git a/ui/platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt b/ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt
similarity index 100%
rename from ui/platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt
rename to ui/ui-platform/src/test/java/androidx/ui/core/pointerinput/TestUtils.kt
diff --git a/ui/test/OWNERS b/ui/ui-test/OWNERS
similarity index 100%
rename from ui/test/OWNERS
rename to ui/ui-test/OWNERS
diff --git a/ui/test/api/1.0.0-alpha01.txt b/ui/ui-test/api/1.0.0-alpha01.txt
similarity index 100%
rename from ui/test/api/1.0.0-alpha01.txt
rename to ui/ui-test/api/1.0.0-alpha01.txt
diff --git a/ui/test/api/api_lint.ignore b/ui/ui-test/api/api_lint.ignore
similarity index 100%
rename from ui/test/api/api_lint.ignore
rename to ui/ui-test/api/api_lint.ignore
diff --git a/ui/test/api/current.txt b/ui/ui-test/api/current.txt
similarity index 100%
rename from ui/test/api/current.txt
rename to ui/ui-test/api/current.txt
diff --git a/ui/test/api/res-1.0.0-alpha01.txt b/ui/ui-test/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/test/api/res-1.0.0-alpha01.txt
rename to ui/ui-test/api/res-1.0.0-alpha01.txt
diff --git a/ui/test/api/restricted_1.0.0-alpha01.txt b/ui/ui-test/api/restricted_1.0.0-alpha01.txt
similarity index 100%
rename from ui/test/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-test/api/restricted_1.0.0-alpha01.txt
diff --git a/ui/test/api/restricted_current.txt b/ui/ui-test/api/restricted_current.txt
similarity index 100%
rename from ui/test/api/restricted_current.txt
rename to ui/ui-test/api/restricted_current.txt
diff --git a/ui/test/build.gradle b/ui/ui-test/build.gradle
similarity index 90%
rename from ui/test/build.gradle
rename to ui/ui-test/build.gradle
index 7991d1e..d3db6ca 100644
--- a/ui/test/build.gradle
+++ b/ui/ui-test/build.gradle
@@ -31,10 +31,10 @@
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
-    api project(":ui-core")
-    api project(":ui-platform")
-    api project(":ui-framework")
-    api project(":ui-animation")
+    api project(":ui:ui-core")
+    api project(":ui:ui-platform")
+    api project(":ui:ui-framework")
+    api project(":ui:ui-animation")
     api project(":compose:compose-runtime")
 
     api(JUNIT)
@@ -51,7 +51,7 @@
 
     androidTestImplementation(TRUTH)
     androidTestImplementation(JUNIT)
-    androidTestImplementation project(':ui-material')
+    androidTestImplementation project(':ui:ui-material')
 }
 
 android {
diff --git a/ui/test/src/androidTest/AndroidManifest.xml b/ui/ui-test/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/test/src/androidTest/AndroidManifest.xml
rename to ui/ui-test/src/androidTest/AndroidManifest.xml
diff --git a/ui/test/src/androidTest/java/androidx/ui/test/FindAllTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
similarity index 100%
rename from ui/test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
rename to ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
diff --git a/ui/test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
similarity index 100%
rename from ui/test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
rename to ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
diff --git a/ui/test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
similarity index 100%
rename from ui/test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
rename to ui/ui-test/src/androidTest/java/androidx/ui/test/RecompositionDetectionTest.kt
diff --git a/ui/test/src/main/AndroidManifest.xml b/ui/ui-test/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/test/src/main/AndroidManifest.xml
rename to ui/ui-test/src/main/AndroidManifest.xml
diff --git a/ui/test/src/main/java/androidx/ui/test/Actions.kt b/ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/Actions.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/Assertions.kt b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/Assertions.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/ComposeTestRule.kt b/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/ComposeTestRule.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/DisableTransitions.kt b/ui/ui-test/src/main/java/androidx/ui/test/DisableTransitions.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/DisableTransitions.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/DisableTransitions.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/Filters.kt b/ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/Filters.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/Finders.kt b/ui/ui-test/src/main/java/androidx/ui/test/Finders.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/Finders.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/Finders.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/GoldenSemantics.kt b/ui/ui-test/src/main/java/androidx/ui/test/GoldenSemantics.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/GoldenSemantics.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/GoldenSemantics.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/Output.kt b/ui/ui-test/src/main/java/androidx/ui/test/Output.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/Output.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/Output.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt b/ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/SemanticsNodeInteraction.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/SemanticsTreeInteraction.kt b/ui/ui-test/src/main/java/androidx/ui/test/SemanticsTreeInteraction.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/SemanticsTreeInteraction.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/SemanticsTreeInteraction.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
diff --git a/ui/test/src/main/java/androidx/ui/test/android/AndroidSemanticsTreeInteraction.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidSemanticsTreeInteraction.kt
similarity index 100%
rename from ui/test/src/main/java/androidx/ui/test/android/AndroidSemanticsTreeInteraction.kt
rename to ui/ui-test/src/main/java/androidx/ui/test/android/AndroidSemanticsTreeInteraction.kt
diff --git a/ui/test/src/test/java/androidx/ui/test/AssertsTests.kt b/ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
similarity index 100%
rename from ui/test/src/test/java/androidx/ui/test/AssertsTests.kt
rename to ui/ui-test/src/test/java/androidx/ui/test/AssertsTests.kt
diff --git a/ui/test/src/test/java/androidx/ui/test/FindersTests.kt b/ui/ui-test/src/test/java/androidx/ui/test/FindersTests.kt
similarity index 100%
rename from ui/test/src/test/java/androidx/ui/test/FindersTests.kt
rename to ui/ui-test/src/test/java/androidx/ui/test/FindersTests.kt
diff --git a/ui/test/src/test/java/androidx/ui/test/SemanticsTreeNodeStub.kt b/ui/ui-test/src/test/java/androidx/ui/test/SemanticsTreeNodeStub.kt
similarity index 100%
rename from ui/test/src/test/java/androidx/ui/test/SemanticsTreeNodeStub.kt
rename to ui/ui-test/src/test/java/androidx/ui/test/SemanticsTreeNodeStub.kt
diff --git a/ui/test/src/test/java/androidx/ui/test/helpers/FakeSemanticsTreeInteraction.kt b/ui/ui-test/src/test/java/androidx/ui/test/helpers/FakeSemanticsTreeInteraction.kt
similarity index 100%
rename from ui/test/src/test/java/androidx/ui/test/helpers/FakeSemanticsTreeInteraction.kt
rename to ui/ui-test/src/test/java/androidx/ui/test/helpers/FakeSemanticsTreeInteraction.kt
diff --git a/ui/text/OWNERS b/ui/ui-text/OWNERS
similarity index 100%
rename from ui/text/OWNERS
rename to ui/ui-text/OWNERS
diff --git a/ui/text/api/1.0.0-alpha01.txt b/ui/ui-text/api/1.0.0-alpha01.txt
similarity index 91%
rename from ui/text/api/1.0.0-alpha01.txt
rename to ui/ui-text/api/1.0.0-alpha01.txt
index aa58066..af495da 100644
--- a/ui/text/api/1.0.0-alpha01.txt
+++ b/ui/ui-text/api/1.0.0-alpha01.txt
@@ -12,12 +12,12 @@
   }
 
   public enum KeyboardType {
-    enum_constant public static final androidx.ui.input.KeyboardType ASCII;
+    enum_constant public static final androidx.ui.input.KeyboardType Ascii;
     enum_constant public static final androidx.ui.input.KeyboardType Email;
     enum_constant public static final androidx.ui.input.KeyboardType Number;
     enum_constant public static final androidx.ui.input.KeyboardType Phone;
     enum_constant public static final androidx.ui.input.KeyboardType Text;
-    enum_constant public static final androidx.ui.input.KeyboardType URI;
+    enum_constant public static final androidx.ui.input.KeyboardType Uri;
   }
 
 }
@@ -100,7 +100,7 @@
 
   public final class ParagraphKt {
     ctor public ParagraphKt();
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.style.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader<?> resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphStyle {
@@ -118,7 +118,7 @@
   }
 
   public final class TextPainter {
-    ctor public TextPainter(androidx.ui.text.AnnotatedString? text, androidx.ui.text.TextStyle? style, androidx.ui.text.ParagraphStyle? paragraphStyle, Integer? maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.text.Locale? locale, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader<?> resourceLoader);
+    ctor public TextPainter(androidx.ui.text.AnnotatedString? text, androidx.ui.text.TextStyle? style, androidx.ui.text.ParagraphStyle? paragraphStyle, Integer? maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.text.Locale? locale, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.ui.core.Density getDensity();
     method public boolean getDidExceedMaxLines();
     method public float getHeight();
@@ -130,7 +130,7 @@
     method public androidx.ui.text.ParagraphStyle? getParagraphStyle();
     method public int getPositionForOffset(androidx.ui.engine.geometry.Offset offset);
     method public float getPreferredLineHeight();
-    method public androidx.ui.text.font.Font.ResourceLoader<java.lang.Object> getResourceLoader();
+    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public androidx.ui.engine.geometry.Size getSize();
     method public boolean getSoftWrap();
     method public androidx.ui.text.TextStyle? getStyle();
@@ -217,8 +217,8 @@
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
-  public static interface Font.ResourceLoader<T> {
-    method public T! load(androidx.ui.text.font.Font font);
+  public static interface Font.ResourceLoader {
+    method public Object load(androidx.ui.text.font.Font font);
   }
 
   public final class FontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
@@ -343,24 +343,6 @@
     property public final androidx.ui.text.style.BaselineShift Superscript;
   }
 
-  public final class ParagraphStyle {
-    ctor public ParagraphStyle(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, androidx.ui.text.style.TextIndent? textIndent, Float? lineHeight, Integer? maxLines, Boolean? ellipsis);
-    ctor public ParagraphStyle();
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
-    method public androidx.ui.text.style.TextIndent? component3();
-    method public Float? component4();
-    method public Integer? component5();
-    method public Boolean? component6();
-    method public androidx.ui.text.style.ParagraphStyle copy(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, androidx.ui.text.style.TextIndent? textIndent, Float? lineHeight, Integer? maxLines, Boolean? ellipsis);
-    method public Boolean? getEllipsis();
-    method public Float? getLineHeight();
-    method public Integer? getMaxLines();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-  }
-
   public enum TextAlign {
     enum_constant public static final androidx.ui.text.style.TextAlign Center;
     enum_constant public static final androidx.ui.text.style.TextAlign End;
@@ -415,12 +397,6 @@
     method public androidx.ui.text.style.TextIndent copy(androidx.ui.core.Px firstLine, androidx.ui.core.Px restLine);
     method public androidx.ui.core.Px getFirstLine();
     method public androidx.ui.core.Px getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion! Companion;
-  }
-
-  public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNONE();
-    property public final androidx.ui.text.style.TextIndent NONE;
   }
 
   public final class TextIndentKt {
diff --git a/ui/text/api/api_lint.ignore b/ui/ui-text/api/api_lint.ignore
similarity index 80%
rename from ui/text/api/api_lint.ignore
rename to ui/ui-text/api/api_lint.ignore
index f89d672b..3a74369 100644
--- a/ui/text/api/api_lint.ignore
+++ b/ui/ui-text/api/api_lint.ignore
@@ -3,6 +3,8 @@
     Acronyms should not be capitalized in method names: was `getNONE`, should this be `getNone`?
 
 
+AutoBoxing: androidx.ui.text.ParagraphKt#Paragraph(String, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>>, Integer, Boolean, androidx.ui.core.Density, androidx.ui.text.font.Font.ResourceLoader) parameter #4:
+    Must avoid boxed primitives (`java.lang.Integer`)
 AutoBoxing: androidx.ui.text.ParagraphStyle#ParagraphStyle(androidx.ui.text.style.TextAlign, androidx.ui.text.style.TextDirection, Float, androidx.ui.text.style.TextIndent) parameter #2:
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.ParagraphStyle#component3():
@@ -11,7 +13,7 @@
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.ParagraphStyle#getLineHeight():
     Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.TextPainter#TextPainter(androidx.ui.text.AnnotatedString, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, Integer, boolean, androidx.ui.text.style.TextOverflow, androidx.ui.text.Locale, androidx.ui.core.Density, androidx.ui.text.font.Font.ResourceLoader<?>) parameter #3:
+AutoBoxing: androidx.ui.text.TextPainter#TextPainter(androidx.ui.text.AnnotatedString, androidx.ui.text.TextStyle, androidx.ui.text.ParagraphStyle, Integer, boolean, androidx.ui.text.style.TextOverflow, androidx.ui.text.Locale, androidx.ui.core.Density, androidx.ui.text.font.Font.ResourceLoader) parameter #3:
     Must avoid boxed primitives (`java.lang.Integer`)
 AutoBoxing: androidx.ui.text.TextPainter#getMaxLines():
     Must avoid boxed primitives (`java.lang.Integer`)
@@ -31,22 +33,6 @@
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.TextStyle#getLetterSpacing():
     Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#ParagraphStyle(androidx.ui.text.style.TextAlign, androidx.ui.text.style.TextDirection, androidx.ui.text.style.TextIndent, Float, Integer, Boolean) parameter #3:
-    Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#ParagraphStyle(androidx.ui.text.style.TextAlign, androidx.ui.text.style.TextDirection, androidx.ui.text.style.TextIndent, Float, Integer, Boolean) parameter #4:
-    Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#component4():
-    Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#component5():
-    Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#copy(androidx.ui.text.style.TextAlign, androidx.ui.text.style.TextDirection, androidx.ui.text.style.TextIndent, Float, Integer, Boolean) parameter #3:
-    Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#copy(androidx.ui.text.style.TextAlign, androidx.ui.text.style.TextDirection, androidx.ui.text.style.TextIndent, Float, Integer, Boolean) parameter #4:
-    Must avoid boxed primitives (`java.lang.Integer`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#getLineHeight():
-    Must avoid boxed primitives (`java.lang.Float`)
-AutoBoxing: androidx.ui.text.style.ParagraphStyle#getMaxLines():
-    Must avoid boxed primitives (`java.lang.Integer`)
 AutoBoxing: androidx.ui.text.style.TextGeometricTransform#TextGeometricTransform(Float, Float) parameter #0:
     Must avoid boxed primitives (`java.lang.Float`)
 AutoBoxing: androidx.ui.text.style.TextGeometricTransform#TextGeometricTransform(Float, Float) parameter #1:
diff --git a/ui/text/api/current.txt b/ui/ui-text/api/current.txt
similarity index 91%
rename from ui/text/api/current.txt
rename to ui/ui-text/api/current.txt
index aa58066..af495da 100644
--- a/ui/text/api/current.txt
+++ b/ui/ui-text/api/current.txt
@@ -12,12 +12,12 @@
   }
 
   public enum KeyboardType {
-    enum_constant public static final androidx.ui.input.KeyboardType ASCII;
+    enum_constant public static final androidx.ui.input.KeyboardType Ascii;
     enum_constant public static final androidx.ui.input.KeyboardType Email;
     enum_constant public static final androidx.ui.input.KeyboardType Number;
     enum_constant public static final androidx.ui.input.KeyboardType Phone;
     enum_constant public static final androidx.ui.input.KeyboardType Text;
-    enum_constant public static final androidx.ui.input.KeyboardType URI;
+    enum_constant public static final androidx.ui.input.KeyboardType Uri;
   }
 
 }
@@ -100,7 +100,7 @@
 
   public final class ParagraphKt {
     ctor public ParagraphKt();
-    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.style.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader<?> resourceLoader);
+    method public static androidx.ui.text.Paragraph Paragraph(String text, androidx.ui.text.TextStyle style, androidx.ui.text.ParagraphStyle paragraphStyle, java.util.List<androidx.ui.text.AnnotatedString.Item<androidx.ui.text.TextStyle>> textStyles, Integer? maxLines = null, Boolean? ellipsis = null, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphStyle {
@@ -118,7 +118,7 @@
   }
 
   public final class TextPainter {
-    ctor public TextPainter(androidx.ui.text.AnnotatedString? text, androidx.ui.text.TextStyle? style, androidx.ui.text.ParagraphStyle? paragraphStyle, Integer? maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.text.Locale? locale, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader<?> resourceLoader);
+    ctor public TextPainter(androidx.ui.text.AnnotatedString? text, androidx.ui.text.TextStyle? style, androidx.ui.text.ParagraphStyle? paragraphStyle, Integer? maxLines, boolean softWrap, androidx.ui.text.style.TextOverflow overflow, androidx.ui.text.Locale? locale, androidx.ui.core.Density density, androidx.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.ui.core.Density getDensity();
     method public boolean getDidExceedMaxLines();
     method public float getHeight();
@@ -130,7 +130,7 @@
     method public androidx.ui.text.ParagraphStyle? getParagraphStyle();
     method public int getPositionForOffset(androidx.ui.engine.geometry.Offset offset);
     method public float getPreferredLineHeight();
-    method public androidx.ui.text.font.Font.ResourceLoader<java.lang.Object> getResourceLoader();
+    method public androidx.ui.text.font.Font.ResourceLoader getResourceLoader();
     method public androidx.ui.engine.geometry.Size getSize();
     method public boolean getSoftWrap();
     method public androidx.ui.text.TextStyle? getStyle();
@@ -217,8 +217,8 @@
     method public androidx.ui.text.font.FontWeight getWeight();
   }
 
-  public static interface Font.ResourceLoader<T> {
-    method public T! load(androidx.ui.text.font.Font font);
+  public static interface Font.ResourceLoader {
+    method public Object load(androidx.ui.text.font.Font font);
   }
 
   public final class FontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.ui.text.font.Font> {
@@ -343,24 +343,6 @@
     property public final androidx.ui.text.style.BaselineShift Superscript;
   }
 
-  public final class ParagraphStyle {
-    ctor public ParagraphStyle(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, androidx.ui.text.style.TextIndent? textIndent, Float? lineHeight, Integer? maxLines, Boolean? ellipsis);
-    ctor public ParagraphStyle();
-    method public androidx.ui.text.style.TextAlign? component1();
-    method public androidx.ui.text.style.TextDirection? component2();
-    method public androidx.ui.text.style.TextIndent? component3();
-    method public Float? component4();
-    method public Integer? component5();
-    method public Boolean? component6();
-    method public androidx.ui.text.style.ParagraphStyle copy(androidx.ui.text.style.TextAlign? textAlign, androidx.ui.text.style.TextDirection? textDirection, androidx.ui.text.style.TextIndent? textIndent, Float? lineHeight, Integer? maxLines, Boolean? ellipsis);
-    method public Boolean? getEllipsis();
-    method public Float? getLineHeight();
-    method public Integer? getMaxLines();
-    method public androidx.ui.text.style.TextAlign? getTextAlign();
-    method public androidx.ui.text.style.TextDirection? getTextDirection();
-    method public androidx.ui.text.style.TextIndent? getTextIndent();
-  }
-
   public enum TextAlign {
     enum_constant public static final androidx.ui.text.style.TextAlign Center;
     enum_constant public static final androidx.ui.text.style.TextAlign End;
@@ -415,12 +397,6 @@
     method public androidx.ui.text.style.TextIndent copy(androidx.ui.core.Px firstLine, androidx.ui.core.Px restLine);
     method public androidx.ui.core.Px getFirstLine();
     method public androidx.ui.core.Px getRestLine();
-    field public static final androidx.ui.text.style.TextIndent.Companion! Companion;
-  }
-
-  public static final class TextIndent.Companion {
-    method public androidx.ui.text.style.TextIndent getNONE();
-    property public final androidx.ui.text.style.TextIndent NONE;
   }
 
   public final class TextIndentKt {
diff --git a/ui/text/api/res-1.0.0-alpha01.txt b/ui/ui-text/api/res-1.0.0-alpha01.txt
similarity index 100%
rename from ui/text/api/res-1.0.0-alpha01.txt
rename to ui/ui-text/api/res-1.0.0-alpha01.txt
diff --git a/ui/text/api/restricted_1.0.0-alpha01.txt b/ui/ui-text/api/restricted_1.0.0-alpha01.txt
similarity index 68%
rename from ui/text/api/restricted_1.0.0-alpha01.txt
rename to ui/ui-text/api/restricted_1.0.0-alpha01.txt
index 0a43126..b744bc0 100644
--- a/ui/text/api/restricted_1.0.0-alpha01.txt
+++ b/ui/ui-text/api/restricted_1.0.0-alpha01.txt
@@ -41,13 +41,3 @@
 
 }
 
-package androidx.ui.text.platform {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class AndroidFontResourceLoader implements androidx.ui.text.font.Font.ResourceLoader<android.graphics.Typeface> {
-    ctor public AndroidFontResourceLoader(android.content.Context context);
-    method public android.content.Context getContext();
-    method public android.graphics.Typeface load(androidx.ui.text.font.Font font);
-  }
-
-}
-
diff --git a/ui/text/api/restricted_1.0.0-alpha01.txt b/ui/ui-text/api/restricted_current.txt
similarity index 68%
copy from ui/text/api/restricted_1.0.0-alpha01.txt
copy to ui/ui-text/api/restricted_current.txt
index 0a43126..b744bc0 100644
--- a/ui/text/api/restricted_1.0.0-alpha01.txt
+++ b/ui/ui-text/api/restricted_current.txt
@@ -41,13 +41,3 @@
 
 }
 
-package androidx.ui.text.platform {
-
-  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class AndroidFontResourceLoader implements androidx.ui.text.font.Font.ResourceLoader<android.graphics.Typeface> {
-    ctor public AndroidFontResourceLoader(android.content.Context context);
-    method public android.content.Context getContext();
-    method public android.graphics.Typeface load(androidx.ui.text.font.Font font);
-  }
-
-}
-
diff --git a/ui/text/build.gradle b/ui/ui-text/build.gradle
similarity index 97%
rename from ui/text/build.gradle
rename to ui/ui-text/build.gradle
index d54db49..d83c6f6 100644
--- a/ui/text/build.gradle
+++ b/ui/ui-text/build.gradle
@@ -31,8 +31,8 @@
 dependencies {
     kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")
 
-    api project(":ui-android-text")
-    api project(":ui-core")
+    api project(":ui:ui-android-text")
+    api project(":ui:ui-core")
     api "androidx.collection:collection:1.0.0"
     api project(":compose:compose-runtime")
     api(KOTLIN_COMPOSE_STDLIB)
diff --git a/ui/text/integration-tests/text-demos/build.gradle b/ui/ui-text/integration-tests/text-demos/build.gradle
similarity index 83%
rename from ui/text/integration-tests/text-demos/build.gradle
rename to ui/ui-text/integration-tests/text-demos/build.gradle
index ccfcab7..01d249d 100644
--- a/ui/text/integration-tests/text-demos/build.gradle
+++ b/ui/ui-text/integration-tests/text-demos/build.gradle
@@ -16,9 +16,9 @@
     api "androidx.activity:activity:1.0.0-alpha01"
     api(KOTLIN_COMPOSE_STDLIB)
     api project(":compose:compose-runtime")
-    implementation project(':ui-text')
-    implementation project(':ui-framework')
-    implementation project(':ui-layout')
+    implementation project(':ui:ui-text')
+    implementation project(':ui:ui-framework')
+    implementation project(':ui:ui-layout')
 }
 
 android {
diff --git a/ui/text/integration-tests/text-demos/src/main/AndroidManifest.xml b/ui/ui-text/integration-tests/text-demos/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/text/integration-tests/text-demos/src/main/AndroidManifest.xml
rename to ui/ui-text/integration-tests/text-demos/src/main/AndroidManifest.xml
diff --git a/ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputField.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputField.kt
similarity index 98%
rename from ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputField.kt
rename to ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputField.kt
index 75dcf29..a7e2235 100644
--- a/ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputField.kt
+++ b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputField.kt
@@ -33,7 +33,7 @@
 
 val KEYBOARD_TYPES = listOf(
     Pair(KeyboardType.Text, "Text"),
-    Pair(KeyboardType.ASCII, "ASCII"),
+    Pair(KeyboardType.Ascii, "Ascii"),
     Pair(KeyboardType.Number, "Number"),
     Pair(KeyboardType.Email, "Email"),
     Pair(KeyboardType.Phone, "Phone")
diff --git a/ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputFieldActivity.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputFieldActivity.kt
similarity index 100%
rename from ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputFieldActivity.kt
rename to ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneInputFieldActivity.kt
diff --git a/ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneText.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneText.kt
similarity index 100%
rename from ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneText.kt
rename to ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneText.kt
diff --git a/ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneTextActivity.kt b/ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneTextActivity.kt
similarity index 100%
rename from ui/text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneTextActivity.kt
rename to ui/ui-text/integration-tests/text-demos/src/main/java/androidx/ui/text/demos/CraneTextActivity.kt
diff --git a/ui/text/src/androidTest/AndroidManifest.xml b/ui/ui-text/src/androidTest/AndroidManifest.xml
similarity index 100%
rename from ui/text/src/androidTest/AndroidManifest.xml
rename to ui/ui-text/src/androidTest/AndroidManifest.xml
diff --git a/ui/text/src/androidTest/font_ttx/kern_font.ttx b/ui/ui-text/src/androidTest/font_ttx/kern_font.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/kern_font.ttx
rename to ui/ui-text/src/androidTest/font_ttx/kern_font.ttx
diff --git a/ui/text/src/androidTest/font_ttx/sample_font.ttx b/ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/sample_font.ttx
rename to ui/ui-text/src/androidTest/font_ttx/sample_font.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_100_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_100_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_100_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_100_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_100_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_100_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_100_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_100_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_200_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_200_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_200_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_200_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_200_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_200_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_200_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_200_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_300_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_300_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_300_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_300_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_300_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_300_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_300_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_300_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_400_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_400_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_400_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_400_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_400_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_400_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_400_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_400_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_500_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_500_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_500_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_500_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_500_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_500_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_500_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_500_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_600_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_600_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_600_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_600_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_600_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_600_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_600_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_600_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_700_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_700_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_700_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_700_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_700_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_700_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_700_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_700_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_800_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_800_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_800_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_800_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_800_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_800_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_800_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_800_regular.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_900_italic.ttx b/ui/ui-text/src/androidTest/font_ttx/test_900_italic.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_900_italic.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_900_italic.ttx
diff --git a/ui/text/src/androidTest/font_ttx/test_900_regular.ttx b/ui/ui-text/src/androidTest/font_ttx/test_900_regular.ttx
similarity index 100%
rename from ui/text/src/androidTest/font_ttx/test_900_regular.ttx
rename to ui/ui-text/src/androidTest/font_ttx/test_900_regular.ttx
diff --git a/ui/text/src/androidTest/java/androidx/ui/input/BackspaceKeyEditOpTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/input/BackspaceKeyEditOpTest.kt
similarity index 97%
rename from ui/text/src/androidTest/java/androidx/ui/input/BackspaceKeyEditOpTest.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/input/BackspaceKeyEditOpTest.kt
index fd1f785..6558120 100644
--- a/ui/text/src/androidTest/java/androidx/ui/input/BackspaceKeyEditOpTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/input/BackspaceKeyEditOpTest.kt
@@ -15,6 +15,7 @@
  */
 package androidx.ui.input
 
+import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.text.TextRange
 import org.junit.Assert.assertEquals
@@ -117,6 +118,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 26)
     fun test_delete_with_composition_zwj_emoji() {
         val eb = EditingBuffer(
             "$ZWJ_EMOJI$ZWJ_EMOJI",
diff --git a/ui/text/src/androidTest/java/androidx/ui/input/MoveCursorEditOpTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/input/MoveCursorEditOpTest.kt
similarity index 97%
rename from ui/text/src/androidTest/java/androidx/ui/input/MoveCursorEditOpTest.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/input/MoveCursorEditOpTest.kt
index b1d31fa..5918079 100644
--- a/ui/text/src/androidTest/java/androidx/ui/input/MoveCursorEditOpTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/input/MoveCursorEditOpTest.kt
@@ -16,6 +16,7 @@
 
 package androidx.ui.input
 
+import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.text.TextRange
 import org.junit.Assert.assertEquals
@@ -147,6 +148,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 26)
     fun test_left_emoji() {
         val eb = EditingBuffer("$FAMILY$FAMILY", TextRange(FAMILY.length, FAMILY.length))
 
@@ -158,6 +160,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 26)
     fun test_right_emoji() {
         val eb = EditingBuffer("$FAMILY$FAMILY", TextRange(FAMILY.length, FAMILY.length))
 
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/FontTestData.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/FontTestData.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/FontTestData.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/FontTestData.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
similarity index 99%
rename from ui/text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
index aa2d420..b937a37 100644
--- a/ui/text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/ParagraphIntegrationTest.kt
@@ -17,6 +17,7 @@
 
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
+import androidx.test.filters.Suppress
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.Density
 import androidx.ui.core.Sp
@@ -37,8 +38,6 @@
 import androidx.ui.painting.Path
 import androidx.ui.painting.PathOperation
 import androidx.ui.painting.Shadow
-import androidx.ui.text.platform.AndroidFontResourceLoader
-import androidx.ui.text.style.ParagraphStyle
 import androidx.ui.text.style.TextAlign
 import androidx.ui.text.style.TextIndent
 import com.nhaarman.mockitokotlin2.mock
@@ -60,9 +59,7 @@
     private val context = InstrumentationRegistry.getInstrumentation().context
     private val defaultDensity = Density(density = 1f)
 
-    // TODO(Migration/haoyuchang): These native calls should be removed after the
-    // counterparts are implemented in crane.
-    private val resourceLoader = AndroidFontResourceLoader(context)
+    private val resourceLoader = TestFontResourceLoader(context)
 
     @Test
     fun empty_string() {
@@ -415,6 +412,8 @@
         }
     }
 
+    // TODO(qqd) on API 23 this test causes test to be blocked and wait indefinitely. Please fix.
+    @Suppress
     @Test(expected = java.lang.IndexOutOfBoundsException::class)
     fun getBoundingBox_ltr_textPosition_larger_than_length_throw_exception() {
         withDensity(defaultDensity) {
@@ -2000,11 +1999,11 @@
                 textIndent = textIndent,
                 textAlign = textAlign,
                 textDirection = textDirection,
-                maxLines = maxLines,
                 lineHeight = lineHeight
             ),
+            maxLines = maxLines,
             density = density ?: defaultDensity,
-            resourceLoader = AndroidFontResourceLoader(context)
+            resourceLoader = TestFontResourceLoader(context)
         )
     }
 }
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/TextPainterIntegrationTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextPainterIntegrationTest.kt
similarity index 99%
rename from ui/text/src/androidTest/java/androidx/ui/text/TextPainterIntegrationTest.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/TextPainterIntegrationTest.kt
index a120e3f..3e43115 100644
--- a/ui/text/src/androidTest/java/androidx/ui/text/TextPainterIntegrationTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextPainterIntegrationTest.kt
@@ -34,7 +34,6 @@
 import androidx.ui.text.matchers.equalToBitmap
 import androidx.ui.painting.Canvas
 import androidx.ui.painting.Paint
-import androidx.ui.text.platform.AndroidFontResourceLoader
 import androidx.ui.text.style.TextOverflow
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
@@ -50,7 +49,7 @@
     private val fontFamily = BASIC_MEASURE_FONT.asFontFamily()
     private val density = Density(density = 1f)
     private val context = InstrumentationRegistry.getInstrumentation().context
-    private val resourceLoader = AndroidFontResourceLoader(context)
+    private val resourceLoader = TestFontResourceLoader(context)
 
     @Test
     fun preferredLineHeight_style_set() {
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
similarity index 68%
rename from ui/text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
index 5369bb2..8d2746b 100644
--- a/ui/text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/TextTestExtensions.kt
@@ -15,8 +15,12 @@
  */
 package androidx.ui.text
 
+import android.content.Context
 import android.graphics.Bitmap
 import android.graphics.Canvas
+import android.graphics.Typeface
+import androidx.core.content.res.ResourcesCompat
+import androidx.ui.text.font.Font
 import kotlin.math.ceil
 
 // TODO(Migration/siyamed): This should return platform independent bitmap but we dont have it yet
@@ -28,4 +32,16 @@
     )
     this.paint(androidx.ui.painting.Canvas(Canvas(bitmap)), 0.0f, 0.0f)
     return bitmap
-}
\ No newline at end of file
+}
+
+class TestFontResourceLoader(val context: Context) : Font.ResourceLoader {
+    override fun load(font: Font): Typeface {
+        val resId = context.resources.getIdentifier(
+            font.name.substringBefore("."),
+            "font",
+            context.packageName
+        )
+
+        return ResourcesCompat.getFont(context, resId)!!
+    }
+}
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/matchers/CraneMatchers.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/CraneMatchers.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/matchers/CraneMatchers.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/CraneMatchers.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/matchers/HasSpan.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/HasSpan.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/matchers/HasSpan.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/HasSpan.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/matchers/HasSpanOnTop.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/HasSpanOnTop.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/matchers/HasSpanOnTop.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/HasSpanOnTop.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/matchers/IsEqualBitmap.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/IsEqualBitmap.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/matchers/IsEqualBitmap.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/IsEqualBitmap.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/matchers/IsTypefaceOf.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/IsTypefaceOf.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/matchers/IsTypefaceOf.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/IsTypefaceOf.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/matchers/NotHasSpan.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/NotHasSpan.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/matchers/NotHasSpan.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/matchers/NotHasSpan.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
similarity index 99%
rename from ui/text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
index f0e9da8..ef5b100 100644
--- a/ui/text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/AndroidParagraphTest.kt
@@ -31,7 +31,6 @@
 import androidx.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.ui.text.font.FontWeight
 import androidx.ui.text.ParagraphConstraints
-import androidx.ui.text.style.ParagraphStyle
 import androidx.ui.text.style.TextAlign
 import androidx.ui.text.style.TextDecoration
 import androidx.ui.text.style.TextGeometricTransform
@@ -45,6 +44,8 @@
 import androidx.ui.text.matchers.hasSpanOnTop
 import androidx.ui.text.AnnotatedString
 import androidx.ui.painting.Shadow
+import androidx.ui.text.ParagraphStyle
+import androidx.ui.text.TestFontResourceLoader
 import androidx.ui.text.TextStyle
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.eq
@@ -1272,15 +1273,15 @@
             style = TextStyle().merge(textStyle),
             paragraphStyle = ParagraphStyle(
                 textAlign = textAlign,
-                textIndent = textIndent,
-                ellipsis = ellipsis,
-                maxLines = maxLines
+                textIndent = textIndent
             ),
+            maxLines = maxLines,
+            ellipsis = ellipsis,
             density = Density(density = 1f)
         )
     }
 
     private fun TypefaceAdapter() = TypefaceAdapter(
-        resourceLoader = AndroidFontResourceLoader(context)
+        resourceLoader = TestFontResourceLoader(context)
     )
 }
\ No newline at end of file
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt
similarity index 100%
rename from ui/text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TextTestExtensions.kt
diff --git a/ui/text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
similarity index 99%
rename from ui/text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
rename to ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
index e937ddf..c384abe 100644
--- a/ui/text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
+++ b/ui/ui-text/src/androidTest/java/androidx/ui/text/platform/TypefaceAdapterTest.kt
@@ -40,6 +40,7 @@
 import androidx.ui.text.FontTestData.Companion.FONT_800_REGULAR
 import androidx.ui.text.FontTestData.Companion.FONT_900_ITALIC
 import androidx.ui.text.FontTestData.Companion.FONT_900_REGULAR
+import androidx.ui.text.TestFontResourceLoader
 import androidx.ui.text.font.FontWeight
 import androidx.ui.text.font.Font
 import androidx.ui.text.font.FontFamily
@@ -66,7 +67,7 @@
     // TODO(Migration/siyamed): These native calls should be removed after the
     // counterparts are implemented in crane.
     private val context = InstrumentationRegistry.getInstrumentation().context
-    private val resourceLoader = AndroidFontResourceLoader(context)
+    private val resourceLoader = TestFontResourceLoader(context)
 
     private fun TypefaceAdapter() = TypefaceAdapter(resourceLoader = resourceLoader)
 
diff --git a/ui/text/src/androidTest/res/font/invalid_font.ttf b/ui/ui-text/src/androidTest/res/font/invalid_font.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/invalid_font.ttf
rename to ui/ui-text/src/androidTest/res/font/invalid_font.ttf
diff --git a/ui/text/src/androidTest/res/font/kern_font.ttf b/ui/ui-text/src/androidTest/res/font/kern_font.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/kern_font.ttf
rename to ui/ui-text/src/androidTest/res/font/kern_font.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/sample_font.ttf b/ui/ui-text/src/androidTest/res/font/sample_font.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/sample_font.ttf
rename to ui/ui-text/src/androidTest/res/font/sample_font.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_100_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_100_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_100_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_100_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_100_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_100_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_100_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_100_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_200_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_200_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_200_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_200_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_200_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_200_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_200_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_200_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_300_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_300_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_300_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_300_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_300_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_300_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_300_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_300_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_400_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_400_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_400_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_400_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_400_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_400_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_400_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_400_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_500_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_500_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_500_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_500_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_500_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_500_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_500_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_500_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_600_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_600_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_600_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_600_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_600_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_600_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_600_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_600_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_700_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_700_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_700_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_700_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_700_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_700_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_700_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_700_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_800_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_800_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_800_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_800_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_800_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_800_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_800_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_800_regular.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_900_italic.ttf b/ui/ui-text/src/androidTest/res/font/test_900_italic.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_900_italic.ttf
rename to ui/ui-text/src/androidTest/res/font/test_900_italic.ttf
Binary files differ
diff --git a/ui/text/src/androidTest/res/font/test_900_regular.ttf b/ui/ui-text/src/androidTest/res/font/test_900_regular.ttf
similarity index 100%
rename from ui/text/src/androidTest/res/font/test_900_regular.ttf
rename to ui/ui-text/src/androidTest/res/font/test_900_regular.ttf
Binary files differ
diff --git a/ui/text/src/main/AndroidManifest.xml b/ui/ui-text/src/main/AndroidManifest.xml
similarity index 100%
rename from ui/text/src/main/AndroidManifest.xml
rename to ui/ui-text/src/main/AndroidManifest.xml
diff --git a/ui/text/src/main/java/androidx/ui/input/EditOperation.kt b/ui/ui-text/src/main/java/androidx/ui/input/EditOperation.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/EditOperation.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/EditOperation.kt
diff --git a/ui/text/src/main/java/androidx/ui/input/EditProcessor.kt b/ui/ui-text/src/main/java/androidx/ui/input/EditProcessor.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/EditProcessor.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/EditProcessor.kt
diff --git a/ui/text/src/main/java/androidx/ui/input/EditingBuffer.kt b/ui/ui-text/src/main/java/androidx/ui/input/EditingBuffer.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/EditingBuffer.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/EditingBuffer.kt
diff --git a/ui/text/src/main/java/androidx/ui/input/EditorState.kt b/ui/ui-text/src/main/java/androidx/ui/input/EditorState.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/EditorState.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/EditorState.kt
diff --git a/ui/text/src/main/java/androidx/ui/input/GapBuffer.kt b/ui/ui-text/src/main/java/androidx/ui/input/GapBuffer.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/GapBuffer.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/GapBuffer.kt
diff --git a/ui/text/src/main/java/androidx/ui/input/InputEventListener.kt b/ui/ui-text/src/main/java/androidx/ui/input/InputEventListener.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/InputEventListener.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/InputEventListener.kt
diff --git a/ui/text/src/main/java/androidx/ui/input/KeyboardType.kt b/ui/ui-text/src/main/java/androidx/ui/input/KeyboardType.kt
similarity index 79%
rename from ui/text/src/main/java/androidx/ui/input/KeyboardType.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/KeyboardType.kt
index afd9574..1cd2750 100644
--- a/ui/text/src/main/java/androidx/ui/input/KeyboardType.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/input/KeyboardType.kt
@@ -28,7 +28,7 @@
     /**
      * A keyboard type used to request an IME that is capable of inputting ASCII characters.
      */
-    ASCII,
+    Ascii,
 
     /**
      * A keyboard type used to request an that is capable of inputting digits.
@@ -36,17 +36,17 @@
     Number,
 
     /**
-     * A keyboard type used to request an IME is capable of inputting phone numbers.
+     * A keyboard type used to request an IME that is capable of inputting phone numbers.
      */
     Phone,
 
     /**
-     * A keyboard type used to request an IME is capable of inputting URIs.
+     * A keyboard type used to request an IME that is capable of inputting URIs.
      */
-    URI,
+    Uri,
 
     /**
-     * A keyboard type used to request an IME is capable of inputting email addresses.
+     * A keyboard type used to request an IME that is capable of inputting email addresses.
      */
     Email
 }
diff --git a/ui/text/src/main/java/androidx/ui/input/OWNERS b/ui/ui-text/src/main/java/androidx/ui/input/OWNERS
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/OWNERS
rename to ui/ui-text/src/main/java/androidx/ui/input/OWNERS
diff --git a/ui/text/src/main/java/androidx/ui/input/TextInputService.kt b/ui/ui-text/src/main/java/androidx/ui/input/TextInputService.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/input/TextInputService.kt
rename to ui/ui-text/src/main/java/androidx/ui/input/TextInputService.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/AnnotatedString.kt b/ui/ui-text/src/main/java/androidx/ui/text/AnnotatedString.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/AnnotatedString.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/AnnotatedString.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/Locale.kt b/ui/ui-text/src/main/java/androidx/ui/text/Locale.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/Locale.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/Locale.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/Paragraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
similarity index 95%
rename from ui/text/src/main/java/androidx/ui/text/Paragraph.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
index 9b9e0a53..12814b0 100644
--- a/ui/text/src/main/java/androidx/ui/text/Paragraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/Paragraph.kt
@@ -21,10 +21,8 @@
 import androidx.ui.painting.Canvas
 import androidx.ui.painting.Path
 import androidx.ui.text.font.Font
-import androidx.ui.text.platform.AndroidFontResourceLoader
 import androidx.ui.text.platform.AndroidParagraph
 import androidx.ui.text.platform.TypefaceAdapter
-import androidx.ui.text.style.ParagraphStyle
 
 /**
  * A paragraph of text.
@@ -148,16 +146,20 @@
     style: TextStyle,
     paragraphStyle: ParagraphStyle,
     textStyles: List<AnnotatedString.Item<TextStyle>>,
+    maxLines: Int? = null,
+    ellipsis: Boolean? = null,
     density: Density,
-    resourceLoader: Font.ResourceLoader<Any>
+    resourceLoader: Font.ResourceLoader
 ): Paragraph {
     return AndroidParagraph(
         text = text,
         style = style,
         paragraphStyle = paragraphStyle,
         textStyles = textStyles,
+        maxLines = maxLines,
+        ellipsis = ellipsis,
         typefaceAdapter = TypefaceAdapter(
-            resourceLoader = resourceLoader as AndroidFontResourceLoader
+            resourceLoader = resourceLoader
         ),
         density = density
     )
diff --git a/ui/text/src/main/java/androidx/ui/text/ParagraphConstraints.kt b/ui/ui-text/src/main/java/androidx/ui/text/ParagraphConstraints.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/ParagraphConstraints.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/ParagraphConstraints.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/ParagraphStyle.kt b/ui/ui-text/src/main/java/androidx/ui/text/ParagraphStyle.kt
similarity index 93%
rename from ui/text/src/main/java/androidx/ui/text/ParagraphStyle.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/ParagraphStyle.kt
index 15c2707..dd7c248 100644
--- a/ui/text/src/main/java/androidx/ui/text/ParagraphStyle.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/ParagraphStyle.kt
@@ -39,6 +39,13 @@
     val lineHeight: Float? = null,
     val textIndent: TextIndent? = null
 ) {
+    init {
+        lineHeight?.let {
+            assert(it >= 0f) {
+                "lineHeight can't be negative ($it)"
+            }
+        }
+    }
     // TODO(siyamed) uncomment
 //    /**
 //     * Returns a new paragraph style that is a combination of this style and the given [other] style.
diff --git a/ui/text/src/main/java/androidx/ui/text/RenderComparison.kt b/ui/ui-text/src/main/java/androidx/ui/text/RenderComparison.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/RenderComparison.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/RenderComparison.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/TextBox.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/TextBox.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/TextBox.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/TextPainter.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextPainter.kt
similarity index 97%
rename from ui/text/src/main/java/androidx/ui/text/TextPainter.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/TextPainter.kt
index 880f4d3..e6e5b4d 100644
--- a/ui/text/src/main/java/androidx/ui/text/TextPainter.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/TextPainter.kt
@@ -30,7 +30,6 @@
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.engine.geometry.Rect
 import androidx.ui.engine.geometry.Size
-import androidx.ui.text.style.ParagraphStyle
 import androidx.ui.text.style.TextAlign
 import androidx.ui.text.style.TextDirection
 import androidx.ui.graphics.Color
@@ -105,13 +104,13 @@
 class TextPainter(
     text: AnnotatedString? = null,
     val style: TextStyle? = null,
-    val paragraphStyle: androidx.ui.text.ParagraphStyle? = null,
+    val paragraphStyle: ParagraphStyle? = null,
     val maxLines: Int? = null,
     val softWrap: Boolean = true,
     val overflow: TextOverflow = TextOverflow.Clip,
     val locale: Locale? = null,
     val density: Density,
-    val resourceLoader: Font.ResourceLoader<Any>
+    val resourceLoader: Font.ResourceLoader
 ) {
     init {
         assert(maxLines == null || maxLines > 0)
@@ -156,6 +155,8 @@
     internal val textDirection: TextDirection? =
         paragraphStyle?.textDirection ?: DefaultTextDirection
 
+    private val isEllipsis = (overflow == TextOverflow.Ellipsis)
+
     private fun createTextStyle(): TextStyle {
         return textStyle.copy(
             fontSize = (textStyle.fontSize ?: DefaultFontSize)
@@ -167,9 +168,7 @@
             textAlign = textAlign,
             textDirection = textDirection,
             textIndent = paragraphStyle?.textIndent,
-            lineHeight = paragraphStyle?.lineHeight,
-            maxLines = maxLines,
-            ellipsis = overflow == TextOverflow.Ellipsis
+            lineHeight = paragraphStyle?.lineHeight
         )
     }
 
@@ -194,6 +193,8 @@
                     // direction doesn't matter, text is just a space
                     paragraphStyle = createParagraphStyle(),
                     textStyles = listOf(),
+                    maxLines = maxLines,
+                    ellipsis = isEllipsis,
                     density = density,
                     resourceLoader = resourceLoader
                 )
@@ -312,6 +313,8 @@
                 style = createTextStyle(),
                 paragraphStyle = createParagraphStyle(),
                 textStyles = text!!.textStyles,
+                maxLines = maxLines,
+                ellipsis = isEllipsis,
                 density = density,
                 resourceLoader = resourceLoader
             )
diff --git a/ui/text/src/main/java/androidx/ui/text/TextSpan.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextSpan.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/TextSpan.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/TextSpan.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/TextStyle.kt b/ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/TextStyle.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/TextStyle.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/font/Font.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
similarity index 90%
rename from ui/text/src/main/java/androidx/ui/text/font/Font.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
index a2a74e4..8a5dbae 100644
--- a/ui/text/src/main/java/androidx/ui/text/font/Font.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/font/Font.kt
@@ -74,8 +74,15 @@
     /**
      * Interface used to load a font resource.
      */
-    interface ResourceLoader<out T> {
-        fun load(font: Font): T
+    interface ResourceLoader {
+        /**
+         * Loads resource represented by the [Font] object.
+         *
+         * @param font [Font] to be loaded
+         * @return platform specific font
+         */
+        // TODO(siyamed) when expect/actual is enabled return a typealias
+        fun load(font: Font): Any
     }
 }
 
diff --git a/ui/text/src/main/java/androidx/ui/text/font/FontFamily.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontFamily.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/font/FontFamily.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/font/FontFamily.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/font/FontFamilyList.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontFamilyList.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/font/FontFamilyList.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/font/FontFamilyList.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/font/FontMatcher.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontMatcher.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/font/FontMatcher.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/font/FontMatcher.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/font/FontStyle.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontStyle.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/font/FontStyle.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/font/FontStyle.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/font/FontSynthesis.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontSynthesis.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/font/FontSynthesis.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/font/FontSynthesis.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/font/FontWeight.kt b/ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/font/FontWeight.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/font/FontWeight.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
similarity index 97%
rename from ui/text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
index 413f0c7..c54d32b 100644
--- a/ui/text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/AndroidParagraph.kt
@@ -62,7 +62,6 @@
 import androidx.ui.text.font.FontWeight
 import androidx.ui.text.Paragraph
 import androidx.ui.text.ParagraphConstraints
-import androidx.ui.text.style.ParagraphStyle
 import androidx.ui.text.style.TextAlign
 import androidx.ui.text.style.TextDecoration
 import androidx.ui.text.style.TextDirection
@@ -70,6 +69,7 @@
 import androidx.ui.text.AnnotatedString
 import androidx.ui.painting.Canvas
 import androidx.ui.painting.Path
+import androidx.ui.text.ParagraphStyle
 import androidx.ui.text.TextStyle
 import java.util.Locale
 import kotlin.math.floor
@@ -83,6 +83,8 @@
     val style: TextStyle,
     val paragraphStyle: ParagraphStyle,
     val textStyles: List<AnnotatedString.Item<TextStyle>>,
+    val maxLines: Int?,
+    val ellipsis: Boolean?,
     val typefaceAdapter: TypefaceAdapter,
     val density: Density
 ) : Paragraph {
@@ -99,11 +101,11 @@
         get() = layout?.let {
             // TODO(Migration/haoyuchang): Figure out a way to add bottomPadding properly
             val lineCount = it.lineCount
-            if (paragraphStyle.maxLines != null &&
-                paragraphStyle.maxLines >= 0 &&
-                paragraphStyle.maxLines < lineCount
+            if (maxLines != null &&
+                maxLines >= 0 &&
+                maxLines < lineCount
             ) {
-                it.layout.getLineBottom(paragraphStyle.maxLines - 1).toFloat()
+                it.layout.getLineBottom(maxLines - 1).toFloat()
             } else {
                 it.layout.height.toFloat()
             }
@@ -173,7 +175,7 @@
             else -> DEFAULT_TEXT_DIRECTION
         }
 
-        val maxLines = paragraphStyle.maxLines ?: DEFAULT_MAX_LINES
+        val maxLines = maxLines ?: DEFAULT_MAX_LINES
         val justificationMode = when (paragraphStyle.textAlign) {
             TextAlign.Justify -> JUSTIFICATION_MODE_INTER_WORD
             else -> DEFAULT_JUSTIFICATION_MODE
@@ -181,7 +183,7 @@
 
         val lineSpacingMultiplier = paragraphStyle.lineHeight ?: DEFAULT_LINESPACING_MULTIPLIER
 
-        val ellipsize = if (paragraphStyle.ellipsis == true) {
+        val ellipsize = if (ellipsis == true) {
             TextUtils.TruncateAt.END
         } else {
             null
diff --git a/ui/text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt b/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
similarity index 96%
rename from ui/text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
index 0244cae..395f4c7 100644
--- a/ui/text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/platform/TypefaceAdapter.kt
@@ -16,7 +16,6 @@
 
 package androidx.ui.text.platform
 
-import android.content.Context
 import android.graphics.Typeface
 import android.os.Build
 import androidx.collection.LruCache
@@ -32,12 +31,14 @@
  *
  * @param fontMatcher [FontMatcher] class to be used to match given [FontWeight] and [FontStyle]
  *                    constraints to select a [Font] from a [FontFamily]
+ *
+ * @param resourceLoader [Font.ResourceLoader] for Android.
  */
 // TODO(Migration/siyamed): font matcher should be at an upper layer such as Paragraph, whoever
 // will call TypefaceAdapter can know about a single font
 internal open class TypefaceAdapter(
     val fontMatcher: FontMatcher = FontMatcher(),
-    val resourceLoader: AndroidFontResourceLoader
+    val resourceLoader: Font.ResourceLoader
 ) {
 
     data class CacheKey(
@@ -157,7 +158,6 @@
      * @param fontStyle the font style to create the typeface in
      * @param fontWeight the font weight to create the typeface in
      * @param fontFamily [FontFamily] that contains the list of [Font]s
-     * @param context [Context] instance
      * @param fontSynthesis [FontSynthesis] which attributes of the font family to synthesize
      *        custom fonts for if they are not already present in the font family
      */
@@ -172,7 +172,11 @@
 
         val font = fontMatcher.matchFont(fontFamily, fontWeight, fontStyle)
 
-        val typeface = resourceLoader.load(font)
+        val typeface = try {
+            resourceLoader.load(font) as Typeface
+        } catch (e: Exception) {
+            throw IllegalStateException("Cannot create Typeface from $font")
+        }
 
         val loadedFontIsSameAsRequest = fontWeight == font.weight && fontStyle == font.style
         // if synthesis is not requested or there is an exact match we don't need synthesis
diff --git a/ui/text/src/main/java/androidx/ui/text/style/BaselineShift.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/style/BaselineShift.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/style/BaselineShift.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/style/TextAlign.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/TextAlign.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/style/TextAlign.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/style/TextAlign.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/style/TextDecoration.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/TextDecoration.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/style/TextDecoration.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/style/TextDecoration.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/style/TextGeometricTransform.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/TextGeometricTransform.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/style/TextGeometricTransform.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/style/TextGeometricTransform.kt
diff --git a/ui/text/src/main/java/androidx/ui/text/style/TextIndent.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/TextIndent.kt
similarity index 93%
rename from ui/text/src/main/java/androidx/ui/text/style/TextIndent.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/style/TextIndent.kt
index 502e362..fee85c0 100644
--- a/ui/text/src/main/java/androidx/ui/text/style/TextIndent.kt
+++ b/ui/ui-text/src/main/java/androidx/ui/text/style/TextIndent.kt
@@ -29,11 +29,7 @@
 data class TextIndent(
     val firstLine: Px = 0.px,
     val restLine: Px = 0.px
-) {
-    companion object {
-        val NONE = TextIndent(0.px, 0.px)
-    }
-}
+)
 
 fun lerp(a: TextIndent, b: TextIndent, t: Float): TextIndent {
     return TextIndent(
diff --git a/ui/text/src/main/java/androidx/ui/text/style/TextOverflow.kt b/ui/ui-text/src/main/java/androidx/ui/text/style/TextOverflow.kt
similarity index 100%
rename from ui/text/src/main/java/androidx/ui/text/style/TextOverflow.kt
rename to ui/ui-text/src/main/java/androidx/ui/text/style/TextOverflow.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/CommitTextEditOpTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/CommitTextEditOpTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/CommitTextEditOpTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/CommitTextEditOpTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/DeleteSurroundingTextEditOpTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/DeleteSurroundingTextEditOpTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/DeleteSurroundingTextEditOpTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/DeleteSurroundingTextEditOpTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/DeleteSurroundingTextInCodePointsEditOpTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/DeleteSurroundingTextInCodePointsEditOpTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/EditProcessorTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/EditProcessorTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/EditProcessorTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/EditProcessorTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/EditingBufferTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/EditingBufferTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/EditingBufferTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/EditingBufferTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/FinishComposingTextEditOpTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/FinishComposingTextEditOpTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/FinishComposingTextEditOpTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/FinishComposingTextEditOpTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/GapBufferTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/GapBufferTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/GapBufferTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/GapBufferTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/SetComposingRegionEditOpTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/SetComposingRegionEditOpTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/SetComposingRegionEditOpTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/SetComposingRegionEditOpTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/SetComposingTextEditOpTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/SetComposingTextEditOpTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/SetComposingTextEditOpTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/SetComposingTextEditOpTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/input/SetSelectionEditOpTest.kt b/ui/ui-text/src/test/java/androidx/ui/input/SetSelectionEditOpTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/input/SetSelectionEditOpTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/input/SetSelectionEditOpTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/ParagraphConstraintsTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/ParagraphConstraintsTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/ParagraphConstraintsTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/ParagraphConstraintsTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/style/ParagraphStyleTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/ParagraphStyleTest.kt
similarity index 96%
rename from ui/text/src/test/java/androidx/ui/text/style/ParagraphStyleTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/ParagraphStyleTest.kt
index a0c0dbb..4cc16c2 100644
--- a/ui/text/src/test/java/androidx/ui/text/style/ParagraphStyleTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/ParagraphStyleTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.text.style
+package androidx.ui.text
 
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/text/src/test/java/androidx/ui/text/TextBoxTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/TextBoxTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/TextBoxTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/TextPainterTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextPainterTest.kt
similarity index 84%
rename from ui/text/src/test/java/androidx/ui/text/TextPainterTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/TextPainterTest.kt
index 1d35609..0738a48 100644
--- a/ui/text/src/test/java/androidx/ui/text/TextPainterTest.kt
+++ b/ui/ui-text/src/test/java/androidx/ui/text/TextPainterTest.kt
@@ -18,7 +18,6 @@
 
 import androidx.ui.core.Constraints
 import androidx.ui.core.Density
-import androidx.ui.core.sp
 import androidx.ui.engine.geometry.Offset
 import androidx.ui.painting.Canvas
 import androidx.ui.text.font.Font
@@ -34,7 +33,7 @@
 @RunWith(JUnit4::class)
 class TextPainterTest() {
     private val density = Density(density = 1f)
-    private val resourceLoader = mock<Font.ResourceLoader<Any>>()
+    private val resourceLoader = mock<Font.ResourceLoader>()
 
     @Test
     fun `constructor with default values`() {
@@ -156,38 +155,6 @@
 
         assertThat(paragraphStyle.textAlign).isEqualTo(TextAlign.Center)
         assertThat(paragraphStyle.textDirection).isEqualTo(TextDirection.Rtl)
-        assertThat(paragraphStyle.maxLines).isEqualTo(maxLines)
-        assertThat(paragraphStyle.ellipsis).isEqualTo(true)
-    }
-
-    @Test
-    fun `createParagraphStyle with defaultTextDirection`() {
-        val fontSize = 15.sp
-        val maxLines = 5
-        val overflow = TextOverflow.Ellipsis
-        val locale = Locale("en", "US")
-        val textStyle = TextStyle(fontSize = fontSize)
-        val text = AnnotatedString(text = "Hello")
-        val textPainter = TextPainter(
-            text = text,
-            style = textStyle,
-            paragraphStyle = ParagraphStyle(
-                textAlign = TextAlign.Center,
-                textDirection = TextDirection.Rtl
-            ),
-            maxLines = maxLines,
-            overflow = overflow,
-            locale = locale,
-            density = density,
-            resourceLoader = resourceLoader
-        )
-
-        val paragraphStyle = textPainter.createParagraphStyle()
-
-        assertThat(paragraphStyle.textAlign).isEqualTo(TextAlign.Center)
-        assertThat(paragraphStyle.textDirection).isEqualTo(TextDirection.Rtl)
-        assertThat(paragraphStyle.maxLines).isEqualTo(maxLines)
-        assertThat(paragraphStyle.ellipsis).isEqualTo(true)
     }
 
     @Test
diff --git a/ui/text/src/test/java/androidx/ui/text/TextSpanTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextSpanTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/TextSpanTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/TextSpanTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/TextStyleTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/TextStyleTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/TextStyleTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/TextStyleTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/font/FontFamilyListTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyListTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/font/FontFamilyListTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyListTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/font/FontFamilyTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/font/FontMatcherTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontMatcherTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/font/FontMatcherTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/font/FontMatcherTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/font/FontTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/font/FontTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/font/FontTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/font/FontTestData.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontTestData.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/font/FontTestData.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/font/FontTestData.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/font/FontWeightTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/font/FontWeightTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/font/FontWeightTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/font/FontWeightTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/style/BaselineShiftTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/style/BaselineShiftTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/style/BaselineShiftTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/style/BaselineShiftTest.kt
diff --git a/ui/text/src/test/java/androidx/ui/text/style/TextDecorationTest.kt b/ui/ui-text/src/test/java/androidx/ui/text/style/TextDecorationTest.kt
similarity index 100%
rename from ui/text/src/test/java/androidx/ui/text/style/TextDecorationTest.kt
rename to ui/ui-text/src/test/java/androidx/ui/text/style/TextDecorationTest.kt
diff --git a/ui/text/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/ui/ui-text/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
similarity index 100%
rename from ui/text/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
rename to ui/ui-text/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt
index a15a4e1..face96e 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterDataSetChangeTest.kt
@@ -42,7 +42,7 @@
         val startAt: Int = 0,
         val actions: List<Action>,
         val expectedFinalCurrentItem: Int,
-        val expectedFinalPageText: String
+        val expectedFinalPageText: String?
     )
 
     companion object {
@@ -80,12 +80,14 @@
         animationLatch.await(1, SECONDS)
 
         // Wait until VP2 has stabilized
-        PollingCheck.waitFor(1000) { test.viewPager.currentCompletelyVisibleItem != -1 }
+        if (adapter.itemCount > 0) {
+            PollingCheck.waitFor(1000) { test.viewPager.currentCompletelyVisibleItem != -1 }
+        }
 
         assertThat(
             "Not displaying index ${config.expectedFinalCurrentItem}",
             test.viewPager.currentCompletelyVisibleItem,
-            equalTo(config.expectedFinalCurrentItem)
+            equalTo(if (adapter.itemCount == 0) -1 else config.expectedFinalCurrentItem)
         )
         test.assertBasicState(config.expectedFinalCurrentItem, config.expectedFinalPageText)
     }
@@ -294,13 +296,12 @@
             expectedFinalCurrentItem = lastPage - 2,
             expectedFinalPageText = "${lastPage - 2}"
         ),
-        // TODO: fix empty adapter & adjust assertions for empty adapter
-//        TestConfig(
-//            startAt = lastPage,
-//            actions = listOf(RemoveRange(0, pageCount)),
-//            expectedFinalCurrentItem = 0,
-//            expectedFinalPageText = ""
-//        ),
+        TestConfig(
+            startAt = lastPage,
+            actions = listOf(RemoveRange(0, pageCount)),
+            expectedFinalCurrentItem = 0,
+            expectedFinalPageText = null
+        ),
 
         // Replace all contents at once
         TestConfig(
@@ -315,13 +316,12 @@
             expectedFinalCurrentItem = 0,
             expectedFinalPageText = "10"
         ),
-        // TODO: fix empty adapter & adjust assertions for empty adapter
-//        TestConfig(
-//            startAt = lastPage,
-//            actions = listOf(ReplaceWith(listOf())),
-//            expectedFinalCurrentItem = 0,
-//            expectedFinalPageText = ""
-//        ),
+        TestConfig(
+            startAt = lastPage,
+            actions = listOf(ReplaceWith(listOf())),
+            expectedFinalCurrentItem = 0,
+            expectedFinalPageText = null
+        ),
 
         // "Trivial" cases from random tests
         TestConfig(
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt
index a1bea7b..fc705e5 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/AdapterTest.kt
@@ -18,23 +18,277 @@
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
+import androidx.testutils.PollingCheck
+import androidx.testutils.waitForExecution
+import androidx.viewpager2.widget.AdapterTest.Event.OnPageScrollStateChangedEvent
+import androidx.viewpager2.widget.AdapterTest.Event.OnPageScrolledEvent
+import androidx.viewpager2.widget.AdapterTest.Event.OnPageSelectedEvent
+import androidx.viewpager2.widget.BaseTest.Context.SwipeMethod
+import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_DRAGGING
+import androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE
+import org.hamcrest.CoreMatchers.equalTo
+import org.hamcrest.CoreMatchers.notNullValue
+import org.hamcrest.CoreMatchers.nullValue
+import org.hamcrest.Matchers.greaterThan
+import org.junit.Assert.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
-import java.util.concurrent.TimeUnit
+import java.util.concurrent.CountDownLatch
+import java.util.concurrent.TimeUnit.SECONDS
 
 @LargeTest
 @RunWith(AndroidJUnit4::class)
 class AdapterTest : BaseTest() {
+    private val pageCount = 5
+
+    private lateinit var test: Context
+    private lateinit var dataSet: MutableList<String>
+
+    override fun setUp() {
+        super.setUp()
+        test = setUpTest(ViewPager2.ORIENTATION_HORIZONTAL)
+    }
+
     @Test
     fun test_setAdapter() {
-        val test = setUpTest(ViewPager2.ORIENTATION_HORIZONTAL)
-        test.setAdapterSync(viewAdapterProvider(stringSequence(5)))
+        val recorder = test.viewPager.addNewRecordingCallback()
+        test.setAdapterSync(viewAdapterProvider(stringSequence(pageCount)))
         test.assertBasicState(0)
-        test.viewPager.setCurrentItemSync(1, false, 2, TimeUnit.SECONDS)
+        test.viewPager.setCurrentItemSync(1, false, 2, SECONDS)
         test.assertBasicState(1)
         activityTestRule.runOnUiThread {
             test.viewPager.adapter = test.viewPager.adapter
         }
         test.assertBasicState(0)
+
+        assertThat(recorder.allEvents, equalTo(
+            expectedEventsForPage(0)            // for setting the adapter
+                .plus(expectedEventsForPage(1)) // for going to page 1
+                .plus(expectedEventsForPage(0)) // for setting it again
+        ))
     }
-}
\ No newline at end of file
+
+    private fun setUpWithoutAdapter() {
+        assertThat(test.viewPager.adapter, nullValue())
+        assertThat(test.viewPager.currentItem, equalTo(0))
+    }
+
+    private fun setUpWithEmptyAdapter() {
+        setUpAdapterSync(0)
+        assertThat(test.viewPager.adapter, notNullValue())
+        assertThat(test.viewPager.currentItem, equalTo(0))
+    }
+
+    @Test
+    fun test_setCurrentItemNullAdapter() {
+        test_setCurrentItemWithoutContent(this::setUpWithoutAdapter)
+    }
+
+    @Test
+    fun test_setCurrentItemEmptyAdapter() {
+        test_setCurrentItemWithoutContent(this::setUpWithEmptyAdapter)
+    }
+
+    private fun test_setCurrentItemWithoutContent(setUp: () -> Unit) {
+        setUp()
+        listOf(-1, 0, 1, 10).forEach { targetPage ->
+            // given
+            val recorder = test.viewPager.addNewRecordingCallback()
+
+            // when
+            test.viewPager.setCurrentItemSync(targetPage, false, 2, SECONDS, false)
+
+            // then
+            assertThat(test.viewPager.currentItem, equalTo(0))
+            assertThat(recorder.allEvents, equalTo(emptyList()))
+            test.viewPager.unregisterOnPageChangeCallback(recorder)
+        }
+    }
+
+    @Test
+    fun test_swipeNullAdapter() {
+        test_swipeWithoutContent(this::setUpWithoutAdapter)
+    }
+
+    @Test
+    fun test_swipeEmptyAdapter() {
+        test_swipeWithoutContent(this::setUpWithEmptyAdapter)
+    }
+
+    private fun test_swipeWithoutContent(setUp: () -> Unit) {
+        setUp()
+        listOf(test::swipeForward, test::swipeBackward).forEach { swipe ->
+            val recorder = test.viewPager.addNewRecordingCallback()
+
+            val idleLatch = test.viewPager.addWaitForIdleLatch()
+            swipe(SwipeMethod.ESPRESSO)
+            idleLatch.await(2, SECONDS)
+
+            assertThat(recorder.allEvents, equalTo(listOf(
+                OnPageScrollStateChangedEvent(SCROLL_STATE_DRAGGING) as Event,
+                OnPageScrollStateChangedEvent(SCROLL_STATE_IDLE) as Event
+            )))
+            test.viewPager.unregisterOnPageChangeCallback(recorder)
+        }
+    }
+
+    @Test
+    fun test_removeAllLookingAt0() {
+        val recorder = test.viewPager.addNewRecordingCallback()
+        setUpAdapterSync(pageCount)
+        clearDataSet()
+
+        // check events
+        assertThat(recorder.allEvents, equalTo(
+            expectedEventsForPage(0)            // for setting the adapter
+                .plus(expectedEventsForPage(0)) // for clearing it
+        ))
+    }
+
+    @Test
+    fun test_removeAllLookingAt1() {
+        val recorder = test.viewPager.addNewRecordingCallback()
+        setUpAdapterSync(pageCount, initialPage = 1)
+        clearDataSet()
+
+        // check events
+        assertThat(recorder.allEvents, equalTo(
+            expectedEventsForPage(0)            // for setting the adapter
+                .plus(expectedEventsForPage(1)) // for going to page 1
+                .plus(expectedEventsForPage(0)) // for clearing it
+        ))
+    }
+
+    @Test
+    fun test_addItemsWhileEmpty() {
+        val recorder = test.viewPager.addNewRecordingCallback()
+        setUpAdapterSync(0)
+        fillDataSet()
+
+        // check events
+        assertThat(recorder.allEvents, equalTo(
+            expectedEventsForPage(0) // for populating the adapter
+        ))
+    }
+
+    @Test
+    fun test_removeAllAddAllRemoveAgain() {
+        val recorder = test.viewPager.addNewRecordingCallback()
+        setUpAdapterSync(pageCount)
+
+        clearDataSet()
+        fillDataSet()
+        clearDataSet()
+
+        // check events
+        assertThat(recorder.allEvents, equalTo(
+            expectedEventsForPage(0)            // for setting the adapter
+                .plus(expectedEventsForPage(0)) // for clearing it
+                .plus(expectedEventsForPage(0)) // for repopulating it
+                .plus(expectedEventsForPage(0)) // for clearing it again
+        ))
+    }
+
+    private fun expectedEventsForPage(page: Int): List<Event> {
+        return listOf(
+            OnPageSelectedEvent(page),
+            OnPageScrolledEvent(page, 0f, 0)
+        )
+    }
+
+    private fun setUpAdapterSync(pageCount: Int, initialPage: Int? = null) {
+        dataSet = stringSequence(pageCount).toMutableList()
+        test.setAdapterSync(viewAdapterProvider(dataSet))
+
+        if (initialPage != null) {
+            test.viewPager.setCurrentItemSync(initialPage, false, 2, SECONDS)
+        }
+
+        val expectedPosition = initialPage ?: 0
+        val expectedText = if (pageCount == 0) null else "$expectedPosition"
+        test.assertBasicState(expectedPosition, expectedText)
+    }
+
+    private fun clearDataSet() {
+        assertThat(dataSet.size, greaterThan(0))
+        modifyDataSet {
+            val itemCount = dataSet.size
+            dataSet.clear()
+            test.viewPager.adapter!!.notifyItemRangeRemoved(0, itemCount)
+        }
+        test.assertBasicState(0, null)
+    }
+
+    private fun fillDataSet() {
+        assertThat(dataSet.size, equalTo(0))
+        modifyDataSet {
+            dataSet.addAll(stringSequence(pageCount))
+            test.viewPager.adapter!!.notifyItemRangeInserted(0, pageCount)
+        }
+        test.assertBasicState(0)
+    }
+
+    private fun modifyDataSet(block: () -> Unit) {
+        val layoutChangedLatch = test.viewPager.addWaitForLayoutChangeLatch()
+        activityTestRule.runOnUiThread {
+            block()
+        }
+        layoutChangedLatch.await(1, SECONDS)
+
+        // Let animations run
+        val animationLatch = CountDownLatch(1)
+        test.viewPager.recyclerView.itemAnimator!!.isRunning {
+            animationLatch.countDown()
+        }
+        animationLatch.await(1, SECONDS)
+
+        // Wait until VP2 has stabilized
+        activityTestRule.waitForExecution()
+        val adapter = test.viewPager.adapter
+        if (adapter != null && adapter.itemCount > 0) {
+            PollingCheck.waitFor(1000) { test.viewPager.currentCompletelyVisibleItem != -1 }
+        }
+    }
+
+    private fun ViewPager2.addNewRecordingCallback(): RecordingCallback {
+        return RecordingCallback().also { registerOnPageChangeCallback(it) }
+    }
+
+    private sealed class Event {
+        data class OnPageScrolledEvent(
+            val position: Int,
+            val positionOffset: Float,
+            val positionOffsetPixels: Int
+        ) : Event()
+        data class OnPageSelectedEvent(val position: Int) : Event()
+        data class OnPageScrollStateChangedEvent(val state: Int) : Event()
+    }
+
+    private class RecordingCallback : ViewPager2.OnPageChangeCallback() {
+        private val events = mutableListOf<Event>()
+
+        val allEvents get() = events.toList()
+
+        override fun onPageScrolled(
+            position: Int,
+            positionOffset: Float,
+            positionOffsetPixels: Int
+        ) {
+            synchronized(events) {
+                events.add(OnPageScrolledEvent(position, positionOffset, positionOffsetPixels))
+            }
+        }
+
+        override fun onPageSelected(position: Int) {
+            synchronized(events) {
+                events.add(OnPageSelectedEvent(position))
+            }
+        }
+
+        override fun onPageScrollStateChanged(state: Int) {
+            synchronized(events) {
+                events.add(OnPageScrollStateChangedEvent(state))
+            }
+        }
+    }
+}
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
index 659af8b5..3c81526 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/BaseTest.kt
@@ -457,7 +457,7 @@
      */
     fun Context.assertBasicState(
         pageIx: Int,
-        value: String = pageIx.toString(),
+        value: String? = pageIx.toString(),
         performSelfCheck: Boolean = true
     ) {
         assertThat<Int>(
@@ -465,9 +465,11 @@
             viewPager.currentItem, equalTo(pageIx)
         )
         assertThat(viewPager.scrollState, equalTo(SCROLL_STATE_IDLE))
-        onView(allOf<View>(withId(R.id.text_view), isDisplayed())).check(
-            matches(withText(value))
-        )
+        if (value != null) {
+            onView(allOf<View>(withId(R.id.text_view), isDisplayed())).check(
+                matches(withText(value))
+            )
+        }
 
         // TODO(b/130153109): Wire offscreenPageLimit into FragmentAdapter, remove performSelfCheck
         if (performSelfCheck && viewPager.adapter is SelfChecking) {
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
index 2fe7a2b..f208cf3 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/FakeDragTest.kt
@@ -29,6 +29,7 @@
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_PAGE_RIGHT
 import androidx.core.view.animation.PathInterpolatorCompat
 import androidx.test.filters.LargeTest
+import androidx.test.filters.SdkSuppress
 import androidx.testutils.LocaleTestUtils
 import androidx.testutils.waitForExecution
 import androidx.viewpager2.widget.BaseTest.Context.SwipeMethod
@@ -94,8 +95,8 @@
 
     // Used to overcome touch slop and gently slide forward.
     // Similar to but better than DecelerateInterpolator in this case.
-    private val quadInterpolator = PathInterpolatorCompat.create(Path().also {
-        it.quadTo(0f, 1f, 1f, 1f)
+    private val fastDecelerateInterpolator = PathInterpolatorCompat.create(Path().also {
+        it.cubicTo(0f, .7f, 0f, 1f, 1f, 1f)
     })
 
     override fun setUp() {
@@ -257,7 +258,7 @@
      */
     @Test
     fun test_startManualDragDuringFakeDrag() {
-        startManualDragDuringFakeDrag(.5f, 500) {
+        startManualDragDuringFakeDrag(.5f, 1000, interpolator = fastDecelerateInterpolator) {
             test.swipeForward(SwipeMethod.MANUAL)
         }
     }
@@ -291,8 +292,12 @@
     fun test_startManualPeekAfterFakeDrag1Page() {
         val vc = ViewConfiguration.get(test.viewPager.context)
         val touchSlop = vc.scaledTouchSlop
-        startManualDragDuringFakeDrag(1.8f, 700, 1) {
-            PageSwiperManual(test.viewPager).swipeForward(touchSlop * 5f, quadInterpolator)
+        val swipeDistance = touchSlop * 5f
+        val pageSize = test.viewPager.pageSize
+        val dragDistance = 1 + (pageSize / 2f - swipeDistance) / pageSize // ~1.4f
+
+        startManualDragDuringFakeDrag(dragDistance, 1000, 1, fastDecelerateInterpolator) {
+            PageSwiperManual(test.viewPager).swipeForward(swipeDistance, fastDecelerateInterpolator)
         }
     }
 
@@ -317,8 +322,9 @@
      * onPageScrollStateChanged(0)
      */
     @Test
+    @SdkSuppress(minSdkVersion = 16)
     fun test_performA11yActionDuringFakeDrag() {
-        startManualDragDuringFakeDrag(.4f, 500) {
+        startManualDragDuringFakeDrag(.9f, 1000, interpolator = fastDecelerateInterpolator) {
             activityTestRule.runOnUiThread {
                 ViewCompat.performAccessibilityAction(test.viewPager, getNextPageAction(), null)
             }
@@ -360,6 +366,8 @@
 
             // test assertions
             test.assertBasicState(expectedFinalPageWithOffset)
+            assertThat(test.viewPager.isFakeDragging, equalTo(false))
+            assertThat(fakeDragger.isInterrupted, equalTo(false))
             recorder.apply {
                 scrollEvents.assertValueSanity(
                     initialPage,
@@ -436,6 +444,8 @@
 
             // test assertions
             test.assertBasicState(expectedFinalPage)
+            assertThat(test.viewPager.isFakeDragging, equalTo(false))
+            assertThat(fakeDragger.isInterrupted, equalTo(false))
             recorder.apply {
                 scrollEvents.assertValueSanity(initialPage, expectedFinalPage,
                     test.viewPager.pageSize)
@@ -470,6 +480,7 @@
         doIllegalAction("Cannot change current item when ViewPager2 is fake dragging") {
             test.viewPager.setCurrentItem(initialPage + 1, smoothScroll)
         }
+        assertThat(fakeDragger.isInterrupted, equalTo(false))
     }
 
     private fun doIllegalAction(errorMessage: String, action: () -> Unit) {
@@ -493,6 +504,7 @@
         fakeDragDistance: Float,
         fakeDragDuration: Long,
         referencePageOffset: Int = 0,
+        interpolator: Interpolator = LinearInterpolator(),
         manualDragCallback: () -> Unit
     ) {
         // Skip tests where manual dragging is disabled
@@ -502,34 +514,48 @@
         repeat(2) {
             val initialPage = test.viewPager.currentItem
             val expectedFinalPage = initialPage + 1
-            val recorder = test.viewPager.addNewRecordingCallback()
 
-            // start fake drag
-            val fakeDragLatch = test.viewPager.addWaitForDistanceToTarget(
-                expectedFinalPage + referencePageOffset, .9f)
-            val idleLatch = test.viewPager.addWaitForIdleLatch()
-            fakeDragger.postFakeDrag(fakeDragDistance, fakeDragDuration)
-            assertThat(fakeDragLatch.await(5, SECONDS), equalTo(true))
+            tryNTimes(3, resetBlock = {
+                test.viewPager.setCurrentItemSync(initialPage, false, 2, SECONDS)
+                // VP2 was potentially settling while the RetryException was raised,
+                // in which case we must wait until the IDLE event has been fired
+                activityTestRule.waitForExecution(1)
+            }) {
+                val recorder = test.viewPager.addNewRecordingCallback()
 
-            // start manual drag
-            manualDragCallback()
-            assertThat(idleLatch.await(2, SECONDS), equalTo(true))
+                // start fake drag
+                val fakeDragLatch = test.viewPager.addWaitForDistanceToTarget(
+                    expectedFinalPage + referencePageOffset, .9f)
+                val idleLatch = test.viewPager.addWaitForIdleLatch()
+                fakeDragger.postFakeDrag(fakeDragDistance, fakeDragDuration, interpolator)
+                assertThat(fakeDragLatch.await(5, SECONDS), equalTo(true))
 
-            // test assertions
-            test.assertBasicState(expectedFinalPage)
-            recorder.apply {
-                scrollEvents.assertValueSanity(initialPage, expectedFinalPage + referencePageOffset,
-                    test.viewPager.pageSize)
-                assertFirstEvents(DRAGGING)
-                assertLastEvents(expectedFinalPage)
-                assertPageSelectedEvents(initialPage, expectedFinalPage)
-                assertStateChanges(
-                    listOf(DRAGGING, SETTLING, IDLE),
-                    listOf(DRAGGING, IDLE)
-                )
+                // start manual drag
+                manualDragCallback()
+                assertThat(idleLatch.await(5, SECONDS), equalTo(true))
+
+                assertThat(test.viewPager.isFakeDragging, equalTo(false))
+                if (!fakeDragger.isInterrupted) {
+                    throw RetryException("Fake drag was not interrupted")
+                }
+                fakeDragger.resetIsInterrupted()
+
+                // test assertions
+                test.assertBasicState(expectedFinalPage)
+                recorder.apply {
+                    scrollEvents.assertValueSanity(initialPage,
+                        expectedFinalPage + referencePageOffset, test.viewPager.pageSize)
+                    assertFirstEvents(DRAGGING)
+                    assertLastEvents(expectedFinalPage)
+                    assertPageSelectedEvents(initialPage, expectedFinalPage)
+                    assertStateChanges(
+                        listOf(DRAGGING, SETTLING, IDLE),
+                        listOf(DRAGGING, IDLE)
+                    )
+                }
+
+                test.viewPager.unregisterOnPageChangeCallback(recorder)
             }
-
-            test.viewPager.unregisterOnPageChangeCallback(recorder)
         }
     }
 
@@ -686,4 +712,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
index 5bf24d5..baee703 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/PageChangeCallbackTest.kt
@@ -43,7 +43,6 @@
 import androidx.viewpager2.widget.swipe.ViewAdapter
 import org.hamcrest.CoreMatchers.equalTo
 import org.hamcrest.CoreMatchers.not
-import org.hamcrest.CoreMatchers.nullValue
 import org.hamcrest.Matchers.allOf
 import org.hamcrest.Matchers.greaterThan
 import org.hamcrest.Matchers.greaterThanOrEqualTo
@@ -853,47 +852,6 @@
         test.assertBasicState(expectedTargetPage)
     }
 
-    @Test
-    fun test_setCurrentItem_noAdapter() {
-        val test = setUpTest(config.orientation)
-        assertThat(test.viewPager.adapter, nullValue())
-        assertThat(test.viewPager.currentItem, equalTo(0))
-
-        listOf(-1, 0, 1, 10).forEach { targetPage ->
-            // given
-            val callback = test.viewPager.addNewRecordingCallback()
-
-            // when
-            test.viewPager.setCurrentItemSync(targetPage, false, 2, SECONDS, false)
-
-            // then
-            assertThat(test.viewPager.currentItem, equalTo(0))
-            assertThat(callback.eventCount, equalTo(0))
-            test.viewPager.unregisterOnPageChangeCallback(callback)
-        }
-    }
-
-    @Test
-    fun test_swipe_noAdapter() {
-        val test = setUpTest(config.orientation)
-        assertThat(test.viewPager.adapter, nullValue())
-        assertThat(test.viewPager.currentItem, equalTo(0))
-
-        listOf(test::swipeForward, test::swipeBackward).forEach { swipe ->
-            val recorder = test.viewPager.addNewRecordingCallback()
-
-            val idleLatch = test.viewPager.addWaitForIdleLatch()
-            swipe(SwipeMethod.ESPRESSO)
-            idleLatch.await(2, SECONDS)
-
-            assertThat(recorder.allEvents, equalTo(listOf(
-                OnPageScrollStateChangedEvent(SCROLL_STATE_DRAGGING) as Event,
-                OnPageScrollStateChangedEvent(SCROLL_STATE_IDLE) as Event
-            )))
-            test.viewPager.unregisterOnPageChangeCallback(recorder)
-        }
-    }
-
     /**
      * Expected trace (marker events left out):
      *
diff --git a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/PageSwiperFakeDrag.kt b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/PageSwiperFakeDrag.kt
index 44d0d1d..a266dc5 100644
--- a/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/PageSwiperFakeDrag.kt
+++ b/viewpager2/src/androidTest/java/androidx/viewpager2/widget/swipe/PageSwiperFakeDrag.kt
@@ -38,6 +38,9 @@
 
     private val needsRtlModifier get() = viewPager.isHorizontal && viewPager.isRtl
 
+    var isInterrupted: Boolean = false
+        private set
+
     override fun swipeNext() {
         postFakeDrag(.5f, FLING_DURATION_MS, interpolator = AccelerateInterpolator())
     }
@@ -71,13 +74,27 @@
             currDistance - prevDistance
         }
 
+        if (isInterrupted) {
+            throw IllegalStateException("${javaClass.simpleName} was not reset after it was " +
+                    "interrupted")
+        }
+
         // Send the fakeDrag events
         if (!viewPager.beginFakeDrag()) {
+            markAsInterrupted()
             return
         }
         viewPager.postDelayed(FakeDragExecutor(deltas, suppressFling), FRAME_LENGTH_MS)
     }
 
+    fun resetIsInterrupted() {
+        isInterrupted = false
+    }
+
+    private fun markAsInterrupted() {
+        isInterrupted = true
+    }
+
     private inner class FakeDragExecutor(
         private val deltas: List<Float>,
         private val suppressFling: Boolean
@@ -98,6 +115,7 @@
 
         private fun doFakeDragStep() {
             if (!viewPager.fakeDragBy(deltas[nextStep])) {
+                markAsInterrupted()
                 return
             }
             nextStep++
@@ -105,7 +123,7 @@
             when {
                 stepsLeft -> viewPager.postDelayed(this, FRAME_LENGTH_MS)
                 suppressFling -> startCoolDown()
-                else -> viewPager.endFakeDrag()
+                else -> endFakeDrag()
             }
         }
 
@@ -117,12 +135,19 @@
 
         private fun doCoolDownStep() {
             if (!viewPager.fakeDragBy(0f)) {
+                markAsInterrupted()
                 return
             }
             if (SystemClock.uptimeMillis() <= coolDownStart + COOL_DOWN_TIME_MS) {
                 viewPager.postDelayed(this, FRAME_LENGTH_MS)
             } else {
-                viewPager.endFakeDrag()
+                endFakeDrag()
+            }
+        }
+
+        private fun endFakeDrag() {
+            if (!viewPager.endFakeDrag()) {
+                markAsInterrupted()
             }
         }
     }
diff --git a/viewpager2/src/main/java/androidx/viewpager2/widget/ScrollEventAdapter.java b/viewpager2/src/main/java/androidx/viewpager2/widget/ScrollEventAdapter.java
index 658a473..ee28e7e 100644
--- a/viewpager2/src/main/java/androidx/viewpager2/widget/ScrollEventAdapter.java
+++ b/viewpager2/src/main/java/androidx/viewpager2/widget/ScrollEventAdapter.java
@@ -182,10 +182,14 @@
         } else if (mAdapterState == STATE_IDLE) {
             // onScrolled while IDLE means RV has just been populated after an adapter has been set.
             // Contract requires us to fire onPageSelected as well.
-            dispatchSelected(mScrollValues.mPosition);
+            int position = mScrollValues.mPosition;
+            // Contract forbids us to send position = -1 though
+            dispatchSelected(position == NO_POSITION ? 0 : position);
         }
 
-        dispatchScrolled(mScrollValues.mPosition, mScrollValues.mOffset, mScrollValues.mOffsetPx);
+        // If position = -1, there are no items. Contract says to send position = 0 instead.
+        dispatchScrolled(mScrollValues.mPosition == NO_POSITION ? 0 : mScrollValues.mPosition,
+                mScrollValues.mOffset, mScrollValues.mOffsetPx);
 
         // Dispatch idle in onScrolled instead of in onScrollStateChanged because RecyclerView
         // doesn't send IDLE event when using setCurrentItem(x, false)