Merge changes from topic "am-69810d26-3528-4e38-a052-58c73322aebf"

* changes:
  [automerger] Add maven version to build.gradle. am: 68a1a43b18
  Add maven version to build.gradle.
diff --git a/app-toolkit/init.gradle b/app-toolkit/init.gradle
index 1bf6f98..4a334b6 100644
--- a/app-toolkit/init.gradle
+++ b/app-toolkit/init.gradle
@@ -15,15 +15,10 @@
  */
 
 import android.support.DacOptions
-import android.support.LibraryVersions
 import org.gradle.internal.os.OperatingSystem
 
-ext.inAppToolkitProject = rootProject.name == "app-toolkit"
-
-if (ext.inAppToolkitProject) {
-    apply from: "${ext.supportRootFolder}/buildSrc/init.gradle"
-    init.setSdkInLocalPropertiesFile()
-}
+apply from: "${ext.supportRootFolder}/buildSrc/init.gradle"
+init.setSdkInLocalPropertiesFile()
 
 apply from: "${ext.supportRootFolder}/app-toolkit/dependencies.gradle"
 
@@ -31,19 +26,13 @@
 def buildServerAnchorTask = rootProject.tasks.create(name : "runBuildServerCompilationTasks",
     description: "Anchor task for everything we want to run in build server.")
 
-if (ext.inAppToolkitProject) {
-    // always build offline docs for flatfoot specific builds.
-    ext.docsDac = new DacOptions("android/arch", "ARCH_DATA")
-    repos.addMavenRepositories(repositories)
-    init.setupRepoOutAndBuildNumber()
-    init.configureSubProjects()
-    init.setupRelease()
-    init.enableDoclavaAndJDiff(this)
-    rootProject.tasks["generateDocs"].exclude '**/R.java'
-}
-
-ext.testApkDistOut = distDir
-ext.testResultsDistDir = new File(distDir, "host-test-reports")
+repos.addMavenRepositories(repositories)
+init.setupRepoOutAndBuildNumber()
+init.configureSubProjects()
+init.setupRelease()
+// always build offline docs for flatfoot specific builds.
+init.enableDoclavaAndJDiff(this, new DacOptions("android/arch", "ARCH_DATA"))
+rootProject.tasks["generateDocs"].exclude '**/R.java'
 
 // flatfoot docs
 def zipFlatfootDocsTask = rootProject.tasks.create(name : "createFlatfootDocsArchive", type : Zip) {
@@ -58,8 +47,6 @@
 buildServerAnchorTask.dependsOn createArchive
 
 subprojects {
-    repos.addMavenRepositories(project.repositories)
-
     project.tasks.whenTaskAdded { task ->
         if (task.name.startsWith("assembleAndroidTest")) {
             buildServerAnchorTask.dependsOn task
diff --git a/app-toolkit/settings.gradle b/app-toolkit/settings.gradle
index 43dc39b..303e4fa 100644
--- a/app-toolkit/settings.gradle
+++ b/app-toolkit/settings.gradle
@@ -96,18 +96,6 @@
 include ':room:integration-tests:kotlintestapp'
 project(':room:integration-tests:kotlintestapp').projectDir = new File(supportRoot, "room/integration-tests/kotlintestapp")
 
-include ':slices-core'
-project(':slices-core').projectDir = new File(supportRoot, 'slices/core')
-
-include ':slices-view'
-project(':slices-view').projectDir = new File(supportRoot, 'slices/view')
-
-include ':slices-builders'
-project(':slices-builders').projectDir = new File(supportRoot, 'slices/builders')
-
-include ':support-slices-demos'
-project(':support-slices-demos').projectDir = new File(supportRoot, 'samples/SupportSliceDemos')
-
 /////////////////////////////
 //
 // External
diff --git a/build.gradle b/build.gradle
index 560bbda..7bbeb56 100644
--- a/build.gradle
+++ b/build.gradle
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import android.support.DacOptions
 
 buildscript {
     ext.supportRootFolder = project.projectDir
@@ -39,7 +40,7 @@
 
 init.setupRelease()
 
-init.enableDoclavaAndJDiff(this)
+init.enableDoclavaAndJDiff(this, new DacOptions("android/support", "SUPPORT_DATA"))
 
 ///// FLATFOOT START
 
diff --git a/buildSrc/dependencies.gradle b/buildSrc/dependencies.gradle
index fe664e0..baf1ba0 100644
--- a/buildSrc/dependencies.gradle
+++ b/buildSrc/dependencies.gradle
@@ -17,12 +17,7 @@
 def libs = [:]
 
 libs.exclude_annotations_transitive = {
-    exclude module: 'support-annotations'
-    transitive = true
-}
-
-libs.exclude_annotations_transitive = {
-    exclude module: 'support-annotations'
+    exclude group: 'com.android.support'
     transitive = true
 }
 
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index 1591004..64c5f3f 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -15,7 +15,6 @@
  */
 
 
-import android.support.DacOptions
 import android.support.DiffAndDocs
 import android.support.gmaven.GMavenVersionChecker
 import com.android.build.gradle.internal.coverage.JacocoPlugin
@@ -36,9 +35,8 @@
 
 apply from: "${supportRoot}/buildSrc/dependencies.gradle"
 apply from: "${supportRoot}/buildSrc/build_dependencies.gradle"
-ext.docsDac = new DacOptions("android/support", "SUPPORT_DATA")
 
-def enableDoclavaAndJDiff(p) {
+def enableDoclavaAndJDiff(p, dacOptions) {
     p.configurations {
         doclava
         jdiff
@@ -50,7 +48,8 @@
         jdiff build_libs.xml_parser_apis
         jdiff build_libs.xerces_impl
     }
-    DiffAndDocs.configureDiffAndDocs(rootProject, createArchive, supportRootFolder)
+    def allChecks = DiffAndDocs.configureDiffAndDocs(rootProject, supportRootFolder, dacOptions)
+    createArchive.dependsOn(allChecks)
 }
 
 def getFullSdkPath() {
diff --git a/buildSrc/repos.gradle b/buildSrc/repos.gradle
index 156ec66..ad5a621 100644
--- a/buildSrc/repos.gradle
+++ b/buildSrc/repos.gradle
@@ -37,7 +37,6 @@
 
 ext.repoNames = ["${repos.prebuiltsRoot}/gradle-plugin",
                  "${repos.prebuiltsRoot}/tools/common/m2/repository",
-                 "${repos.prebuiltsRoot}/tools/common/m2/internal",
                  "${repos.prebuiltsRoot}/maven_repo/android",
                  "${getFullSdkPath(repos.prebuiltsRoot)}/extras/m2repository"]
 
diff --git a/buildSrc/src/main/java/android/support/Version.java b/buildSrc/src/main/java/android/support/Version.java
index 69b7f5e..36c7728 100644
--- a/buildSrc/src/main/java/android/support/Version.java
+++ b/buildSrc/src/main/java/android/support/Version.java
@@ -16,6 +16,7 @@
 
 package android.support;
 
+import java.io.File;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -23,17 +24,28 @@
  * Utility class which represents a version
  */
 public class Version implements Comparable<Version> {
+    private static final Pattern VERSION_FILE_REGEX = Pattern.compile("^(\\d+\\.\\d+\\.\\d+).txt$");
+    private static final Pattern VERSION_REGEX = Pattern
+            .compile("^(\\d+)\\.(\\d+)\\.(\\d+)(-.+)?$");
+
     private final int mMajor;
     private final int mMinor;
     private final int mPatch;
     private final String mExtra;
 
     public Version(String versionString) {
-        Pattern compile = Pattern.compile("^(\\d+)\\.(\\d+)\\.(\\d+)(-.+)?$");
-        Matcher matcher = compile.matcher(versionString);
+        this(checkedMatcher(versionString));
+    }
+
+    private static Matcher checkedMatcher(String versionString) {
+        Matcher matcher = VERSION_REGEX.matcher(versionString);
         if (!matcher.matches()) {
             throw new IllegalArgumentException("Can not parse version: " + versionString);
         }
+        return matcher;
+    }
+
+    private Version(Matcher matcher) {
         mMajor = Integer.parseInt(matcher.group(1));
         mMinor = Integer.parseInt(matcher.group(2));
         mPatch = Integer.parseInt(matcher.group(3));
@@ -117,4 +129,29 @@
         result = 31 * result + (mExtra != null ? mExtra.hashCode() : 0);
         return result;
     }
+
+    /**
+     * @return Version or null, if a name of the given file doesn't match
+     */
+    public static Version from(File file) {
+        if (!file.isFile()) {
+            return null;
+        }
+        Matcher matcher = VERSION_FILE_REGEX.matcher(file.getName());
+        if (!matcher.matches()) {
+            return null;
+        }
+        return new Version(matcher.group(1));
+    }
+
+    /**
+     * @return Version or null, if the given string doesn't match
+     */
+    public static Version from(String versionString) {
+        Matcher matcher = VERSION_REGEX.matcher(versionString);
+        if (!matcher.matches()) {
+            return null;
+        }
+        return new Version(matcher);
+    }
 }
diff --git a/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt b/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt
index 4c57721..fefc3ed 100644
--- a/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt
+++ b/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt
@@ -20,6 +20,7 @@
 import android.support.checkapi.CheckApiTask
 import android.support.checkapi.UpdateApiTask
 import android.support.doclava.DoclavaTask
+import android.support.docs.GenerateDocsTask
 import android.support.jdiff.JDiffTask
 import com.android.build.gradle.LibraryExtension
 import com.android.build.gradle.api.LibraryVariant
@@ -42,8 +43,8 @@
     @JvmStatic
     fun configureDiffAndDocs(
             root: Project,
-            createArchiveTask: Task,
-            supportRootFolder: File) = configure(root, createArchiveTask, supportRootFolder)
+            supportRootFolder: File,
+            dacOptions: DacOptions) = configure(root, supportRootFolder, dacOptions)
 }
 
 private data class CheckApiConfig(
@@ -58,6 +59,7 @@
                 "visibility, you may exclude it from public API by using the @hide javadoc\n" +
                 "annotation paired with the @RestrictTo(LIBRARY_GROUP) code annotation."
 
+@Suppress("DEPRECATION")
 private fun hasJavaSources(variant: LibraryVariant) = !variant.javaCompile.source
         .filter { file -> file.name != "R.java" && file.name != "BuildConfig.java" }
         .isEmpty
@@ -98,22 +100,17 @@
 
 private fun stripExtension(fileName: String) = fileName.substringBeforeLast('.')
 
-private fun getLastReleasedApiFile(rootFolder: File, refApi: String): File? {
-    val refVersion = Version(refApi)
+private fun getLastReleasedApiFile(rootFolder: File, refVersion: Version): File? {
     val apiDir = File(rootFolder, "api")
 
     var lastFile: File? = null
     var lastVersion: Version? = null
-    val regex = Regex("(\\d+)\\.(\\d+)\\.0\\.txt")
-    // Only look at released versions and snapshots thereof, ex. X.Y.0.txt.
-    apiDir.listFiles().filter { file ->
-        regex.matches(file.name) && file.isFile
-    }.forEach { file ->
-        val version = Version(stripExtension(file.name))
-
-        if ((lastFile == null || lastVersion!! < version) && version < refVersion) {
-            lastFile = file
-            lastVersion = version
+    apiDir.listFiles().forEach { file ->
+        Version.from(file)?.let { version ->
+            if ((lastFile == null || lastVersion!! < version) && version < refVersion) {
+                lastFile = file
+                lastVersion = version
+            }
         }
     }
     return lastFile
@@ -215,12 +212,15 @@
 
 // configuration file for setting up api diffs and api docs
 private fun registerAndroidProjectForDocsTask(task: Javadoc, releaseVariant: LibraryVariant) {
+    @Suppress("DEPRECATION")
     task.dependsOn(releaseVariant.javaCompile)
     val packageDir = releaseVariant.applicationId.replace('.', '/')
+    @Suppress("DEPRECATION")
     val sources = releaseVariant.javaCompile.source.filter { file ->
         file.name != "R.java" || file.parent.endsWith(packageDir)
     }
     task.source(sources)
+    @Suppress("DEPRECATION")
     task.classpath += releaseVariant.getCompileClasspath(null) +
             task.project.files(releaseVariant.javaCompile.destinationDir)
 }
@@ -247,15 +247,14 @@
  */
 private fun createOldApiXml(project: Project, doclavaConfig: Configuration) =
         project.tasks.createWithConfig("oldApiXml", ApiXmlConversionTask::class.java) {
-            val regex = Regex("(\\d+\\.){2}\\d+")
-            val toApi = project.processProperty("toApi")
+            val toApi = project.processProperty("toApi")?.let(Version::from)
             val fromApi = project.processProperty("fromApi")
             classpath = project.files(doclavaConfig.resolve())
             val rootFolder = project.projectDir
             if (fromApi != null) {
                 // Use an explicit API file.
                 inputApiFile = File(rootFolder, "api/$fromApi.txt")
-            } else if (toApi != null && regex.matches(toApi)) {
+            } else if (toApi != null) {
                 // If toApi matches released API (X.Y.Z) format, use the most recently
                 // released API file prior to toApi.
                 inputApiFile = getLastReleasedApiFile(rootFolder, toApi)
@@ -401,7 +400,8 @@
         project: Project,
         generateSdkApiTask: Task,
         doclavaConfig: Configuration,
-        supportRootFolder: File) =
+        supportRootFolder: File,
+        dacOptions: DacOptions) =
         project.tasks.createWithConfig("generateDocs", GenerateDocsTask::class.java) {
             dependsOn(generateSdkApiTask, doclavaConfig)
             group = JavaBasePlugin.DOCUMENTATION_GROUP
@@ -439,8 +439,8 @@
                 if (!offline) {
                     addStringOption("toroot", "/")
                     addBooleanOption("devsite", true)
-                    addStringOption("dac_libraryroot", project.docsDac().libraryroot)
-                    addStringOption("dac_dataname", project.docsDac().dataname)
+                    addStringOption("dac_libraryroot", dacOptions.libraryroot)
+                    addStringOption("dac_dataname", dacOptions.dataname)
                 }
 
                 exclude("**/BuildConfig.java")
@@ -449,10 +449,12 @@
             addArtifactsAndSince()
         }
 
-private fun initializeApiChecksForProject(
-        project: Project,
-        generateDocs: GenerateDocsTask,
-        createArchive: Task): Pair<DoclavaTask, JDiffTask> {
+private data class Tasks(
+        val generateApi: DoclavaTask,
+        val generateDiffs: JDiffTask,
+        val checkApiTask: CheckApiTask)
+
+private fun initializeApiChecksForProject(project: Project, generateDocs: GenerateDocsTask): Tasks {
     if (!project.hasProperty("docsDir")) {
         project.extensions.add("docsDir", File(project.rootProject.docsDir(), project.name))
     }
@@ -467,7 +469,7 @@
     val verifyUpdateTask = createVerifyUpdateApiAllowedTask(project)
 
     // Make sure the API surface has not broken since the last release.
-    val lastReleasedApiFile = getLastReleasedApiFile(workingDir, version.toString())
+    val lastReleasedApiFile = getLastReleasedApiFile(workingDir, version)
 
     val whitelistFile = lastReleasedApiFile?.let { apiFile ->
         File(lastReleasedApiFile.parentFile, stripExtension(apiFile.name) + ".ignore")
@@ -520,56 +522,16 @@
     // Associate current API surface with the Maven artifact.
     generateDocs.addArtifact(generateApi.apiFile!!.absolutePath, artifact)
     generateDocs.dependsOn(generateApi)
-    createArchive.dependsOn(checkApi)
-    return (generateApi to generateDiffTask)
+    return Tasks(generateApi, generateDiffTask, checkApi)
 }
 
-private open class GenerateDocsTask : DoclavaTask() {
-
-    private data class Since(val path: String, val apiLevel: String)
-    private data class Artifact(val path: String, val artifact: String)
-
-    private val sinces = mutableListOf<Since>()
-    private val artifacts = mutableListOf<Artifact>()
-
-    fun addArtifactsAndSince() {
-        doFirst {
-            coreJavadocOptions {
-                if (sinces.isNotEmpty()) {
-                    addMultilineMultiValueOption("since").value = sinces.map { (path, apiLevel) ->
-                        listOf(path, apiLevel)
-                    }
-                }
-
-                if (artifacts.isNotEmpty()) {
-                    addMultilineMultiValueOption("artifact").value = artifacts.map { artifact ->
-                        listOf(artifact.path, artifact.artifact)
-                    }
-                }
-            }
-        }
-    }
-
-    fun addSinceFilesFrom(dir: File) {
-        val regex = Regex("(\\d+\\.\\d+\\.\\d).txt")
-        val apiDir = File(dir, "api")
-        apiDir.listFiles { file ->
-            file.isFile && regex.matches(file.name)
-        }.forEach { apiFile ->
-            val matchResult = regex.matchEntire(apiFile.name)!!
-            sinces.add(Since(apiFile.absolutePath, matchResult.groups[1]!!.value))
-        }
-    }
-
-    fun addArtifact(path: String, artifact: String) = artifacts.add(Artifact(path, artifact))
-}
-
-private fun configure(root: Project, createArchiveTask: Task, supportRootFolder: File) {
+private fun configure(root: Project, supportRootFolder: File, dacOptions: DacOptions): Task {
+    val allChecks = root.tasks.create("AnchorCheckApis")
     val doclavaConfiguration = root.configurations.getByName("doclava")
     val generateSdkApiTask = createGenerateSdkApiTask(root, doclavaConfiguration)
 
     val generateDocsTask = createGenerateDocsTask(root, generateSdkApiTask,
-            doclavaConfiguration, supportRootFolder)
+            doclavaConfiguration, supportRootFolder, dacOptions)
     createDistDocsTask(root, generateDocsTask)
 
     root.subprojects { subProject ->
@@ -603,10 +565,10 @@
                                     "an api folder, ignoring API tasks.")
                             return@all
                         }
-                        val (generateApi, generateDiffs) = initializeApiChecksForProject(project,
-                                generateDocsTask, createArchiveTask)
-                        registerAndroidProjectForDocsTask(generateApi, variant)
-                        registerAndroidProjectForDocsTask(generateDiffs, variant)
+                        val tasks = initializeApiChecksForProject(project, generateDocsTask)
+                        registerAndroidProjectForDocsTask(tasks.generateApi, variant)
+                        registerAndroidProjectForDocsTask(tasks.generateDiffs, variant)
+                        allChecks.dependsOn(tasks.checkApiTask)
                     }
                 }
             } else if (project.hasProperty("compileJava")) {
@@ -618,15 +580,15 @@
                     return@afterEvaluate
                 }
                 project.afterEvaluate { proj ->
-                    val (generateApi, generateDiffs) = initializeApiChecksForProject(proj,
-                            generateDocsTask,
-                            createArchiveTask)
-                    registerJavaProjectForDocsTask(generateApi, compileJava)
-                    registerJavaProjectForDocsTask(generateDiffs, compileJava)
+                    val tasks = initializeApiChecksForProject(proj, generateDocsTask)
+                    registerJavaProjectForDocsTask(tasks.generateApi, compileJava)
+                    registerJavaProjectForDocsTask(tasks.generateDiffs, compileJava)
+                    allChecks.dependsOn(tasks.checkApiTask)
                 }
             }
         }
     }
+    return allChecks
 }
 
 private fun sdkApiFile(project: Project) = File(project.docsDir(), "release/sdk_current.txt")
@@ -647,14 +609,12 @@
 
 private fun Project.androidSrcJar() = rootProject.properties["androidSrcJar"] as File
 
-private fun Project.version() = Version(project.properties["version"] as String)
+private fun Project.version() = Version(project.version as String)
 
 private fun Project.buildNumber() = properties["buildNumber"] as String
 
 private fun Project.androidApiTxt() = properties["androidApiTxt"] as? File
 
-private fun Project.docsDac() = properties["docsDac"] as DacOptions
-
 private fun Project.processProperty(name: String) =
         if (hasProperty(name)) {
             properties[name] as String
diff --git a/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
index f9ee8b3..adf656e 100644
--- a/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
@@ -56,4 +56,5 @@
 const val SUPPORT_V4 = "com.android.support:support-v4:$SUPPORT_VERSION"
 
 // Arch libraries
-const val ARCH_LIFECYCLE_RUNTIME = "android.arch.lifecycle:runtime:1.0.3@aar"
\ No newline at end of file
+const val ARCH_LIFECYCLE_RUNTIME = "android.arch.lifecycle:runtime:1.0.3@aar"
+const val ARCH_LIFECYCLE_EXTENSIONS = "android.arch.lifecycle:extensions:1.0.0@aar"
diff --git a/buildSrc/src/main/kotlin/android/support/docs/GenerateDocsTask.kt b/buildSrc/src/main/kotlin/android/support/docs/GenerateDocsTask.kt
new file mode 100644
index 0000000..2183b88
--- /dev/null
+++ b/buildSrc/src/main/kotlin/android/support/docs/GenerateDocsTask.kt
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2017 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 android.support.docs
+
+import android.support.Version
+import android.support.doclava.DoclavaTask
+import java.io.File
+
+open class GenerateDocsTask : DoclavaTask() {
+
+    private data class Since(val path: String, val apiLevel: String)
+    private data class Artifact(val path: String, val artifact: String)
+
+    private val sinces = mutableListOf<Since>()
+    private val artifacts = mutableListOf<Artifact>()
+
+    fun addArtifactsAndSince() {
+        doFirst {
+            coreJavadocOptions {
+                if (sinces.isNotEmpty()) {
+                    addMultilineMultiValueOption("since").value = sinces.map { (path, apiLevel) ->
+                        listOf(path, apiLevel)
+                    }
+                }
+
+                if (artifacts.isNotEmpty()) {
+                    addMultilineMultiValueOption("artifact").value = artifacts.map { artifact ->
+                        listOf(artifact.path, artifact.artifact)
+                    }
+                }
+            }
+        }
+    }
+
+    fun addSinceFilesFrom(dir: File) {
+        File(dir, "api").listFiles().forEach { file ->
+            Version.from(file)?.let { version ->
+                sinces.add(Since(file.absolutePath, version.toString()))
+            }
+        }
+    }
+
+    fun addArtifact(path: String, artifact: String) = artifacts.add(Artifact(path, artifact))
+}
\ No newline at end of file
diff --git a/car/res/layout/car_paged_list_item_content.xml b/car/res/layout/car_paged_list_item_content.xml
index 0e6b809..5d01c59 100644
--- a/car/res/layout/car_paged_list_item_content.xml
+++ b/car/res/layout/car_paged_list_item_content.xml
@@ -32,9 +32,10 @@
         android:id="@+id/title"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_toStartOf="@id/supplemental_actions"
+        android:layout_toStartOf="@+id/supplemental_actions"
         android:singleLine="true"
         android:ellipsize="end"/>
+
     <TextView
         android:id="@+id/body"
         android:layout_width="match_parent"
@@ -43,7 +44,7 @@
 
     <!-- Supplemental action(s) - supports either 1 supplemental icon or up to 2 action buttons. -->
     <LinearLayout
-        android:id="@+id/supplemental_actions"
+        android:id="@id/supplemental_actions"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_alignParentEnd="true"
diff --git a/samples/SupportSliceDemos/build.gradle b/samples/SupportSliceDemos/build.gradle
index 86c0bca..be89a66 100644
--- a/samples/SupportSliceDemos/build.gradle
+++ b/samples/SupportSliceDemos/build.gradle
@@ -21,10 +21,11 @@
 dependencies {
     implementation(project(":slices-view"))
     implementation(project(":slices-builders"))
-    implementation(project(":lifecycle:extensions"))
-    implementation(SUPPORT_DESIGN, libs.support_exclude_config)
-    implementation(SUPPORT_APPCOMPAT, libs.support_exclude_config)
-    implementation(SUPPORT_CARDVIEW, libs.support_exclude_config)
+    implementation(project(":slices-core"))
+    implementation(project(":design"))
+    implementation(project(":appcompat-v7"))
+    implementation(project(":cardview-v7"))
+    api(ARCH_LIFECYCLE_EXTENSIONS, libs.exclude_annotations_transitive)
 }
 
 android {
diff --git a/settings.gradle b/settings.gradle
index 52c05d3..97c5353 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -115,6 +115,15 @@
 include ':webkit'
 project(':webkit').projectDir = new File(rootDir, 'webkit')
 
+include ':slices-core'
+project(':slices-core').projectDir = new File(rootDir, 'slices/core')
+
+include ':slices-view'
+project(':slices-view').projectDir = new File(rootDir, 'slices/view')
+
+include ':slices-builders'
+project(':slices-builders').projectDir = new File(rootDir, 'slices/builders')
+
 /////////////////////////////
 //
 // Samples
@@ -173,6 +182,10 @@
 
 include ':support-car-demos'
 project(':support-car-demos').projectDir = new File(samplesRoot, 'SupportCarDemos')
+
+include ':support-slices-demos'
+project(':support-slices-demos').projectDir = new File(samplesRoot, 'SupportSliceDemos')
+
 /////////////////////////////
 //
 // Testing libraries
diff --git a/slices/builders/build.gradle b/slices/builders/build.gradle
index bf0cf4e..2816600 100644
--- a/slices/builders/build.gradle
+++ b/slices/builders/build.gradle
@@ -23,8 +23,8 @@
 }
 
 dependencies {
-    compile(project(":slices-core"))
-    implementation(SUPPORT_ANNOTATIONS, libs.support_exclude_config)
+    implementation(project(":slices-core"))
+    implementation project(":support-annotations")
 }
 
 supportLibrary {
diff --git a/slices/core/build.gradle b/slices/core/build.gradle
index 7232595..4cec017 100644
--- a/slices/core/build.gradle
+++ b/slices/core/build.gradle
@@ -23,8 +23,8 @@
 }
 
 dependencies {
-    implementation(SUPPORT_ANNOTATIONS, libs.support_exclude_config)
-    implementation(SUPPORT_APPCOMPAT, libs.support_exclude_config)
+    implementation project(":support-annotations")
+    implementation project(":appcompat-v7")
 }
 
 android {
diff --git a/slices/view/build.gradle b/slices/view/build.gradle
index 1c88455..35d5e93 100644
--- a/slices/view/build.gradle
+++ b/slices/view/build.gradle
@@ -25,8 +25,8 @@
 dependencies {
     implementation(project(":slices-core"))
     implementation(project(":slices-builders"))
-    implementation(SUPPORT_RECYCLERVIEW, libs.support_exclude_config)
-    implementation(project(":lifecycle:extensions"))
+    implementation(project(":recyclerview-v7"))
+    api(ARCH_LIFECYCLE_EXTENSIONS, libs.exclude_annotations_transitive)
 }
 
 supportLibrary {