diff --git a/app-toolkit/init.gradle b/app-toolkit/init.gradle
index 393b2f9..654f65c 100644
--- a/app-toolkit/init.gradle
+++ b/app-toolkit/init.gradle
@@ -15,7 +15,6 @@
  */
 
 import android.support.DacOptions
-import org.gradle.internal.os.OperatingSystem
 
 apply from: "${ext.supportRootFolder}/buildSrc/init.gradle"
 init.setSdkInLocalPropertiesFile()
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index fe2ba31..4d663af 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -32,7 +32,6 @@
 
 repos.addMavenRepositories(repositories)
 
-apply plugin: 'groovy'
 apply plugin: 'java'
 apply plugin: 'kotlin'
 
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index c224fdf..30841b6 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -16,7 +16,6 @@
 
 
 import android.support.DiffAndDocs
-import android.support.SupportConfig
 import android.support.gmaven.GMavenVersionChecker
 import com.android.build.gradle.internal.coverage.JacocoReportTask
 import com.android.build.gradle.internal.tasks.DeviceProviderInstrumentTestTask
@@ -31,7 +30,7 @@
 }
 def init = new Properties()
 ext.init = init
-rootProject.ext.versionChecker = new GMavenVersionChecker(rootProject)
+rootProject.ext.versionChecker = new GMavenVersionChecker(rootProject.logger)
 ext.runningInBuildServer = System.env.DIST_DIR != null && System.env.OUT_DIR != null
 
 apply from: "${supportRoot}/buildSrc/dependencies.gradle"
diff --git a/buildSrc/src/main/groovy/android/support/gmaven/GMavenVersionChecker.groovy b/buildSrc/src/main/groovy/android/support/gmaven/GMavenVersionChecker.groovy
deleted file mode 100644
index 0a71fbc..0000000
--- a/buildSrc/src/main/groovy/android/support/gmaven/GMavenVersionChecker.groovy
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (C) 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.gmaven
-
-import android.support.Version
-import com.android.annotations.Nullable
-import groovy.util.slurpersupport.NodeChild
-import org.gradle.api.GradleException
-import org.gradle.api.Project
-import org.gradle.api.logging.Logger
-
-/**
- * Queries maven.google.com to get the version numbers for each artifact.
- * Due to the structure of maven.google.com, a new query is necessary for each group.
- */
-@SuppressWarnings("GroovyUnusedDeclaration")
-class GMavenVersionChecker {
-    // wait 2 seconds before retrying if fetch fails
-    private static final int RETRY_DELAY = 2000 // ms
-    // number of times we'll try to reach maven.google.com before failing
-    private static final int DEFAULT_RETRY_LIMIT = 20
-    private static final String BASE = "https://dl.google.com/dl/android/maven2/"
-    private static final String GROUP_FILE = "group-index.xml"
-
-    // cache versions by group to avoid re-querying for each artifact
-    private final Map<String, GroupVersionData> versionCache = new HashMap<>()
-    // the logger from the project
-    private final Logger logger
-
-    /**
-     * Creates a new instance using the given project's logger
-     *
-     * @param project This should be the root project. No reason to create multiple instances of
-     *                this
-     */
-    GMavenVersionChecker(Project project) {
-        this.logger = project.logger
-    }
-
-    /**
-     * Creates the URL which has the XML file that describes the available versions for each
-     * artifact in that group
-     *
-     * @param group Maven group name
-     * @return The URL of the XML file
-     */
-    private static String buildGroupUrl(String group) {
-        return BASE + group.replace(".", "/") + "/" + GROUP_FILE
-    }
-
-    /**
-     * Returns the version data for each artifact in a given group.
-     * <p>
-     * If data is not cached, this will make a web request to get it.
-     *
-     * @param group The group to query
-     * @return A data class which has the versions for each artifact
-     */
-    private GroupVersionData getVersionData(String group) {
-        def versionData = versionCache.get(group)
-        if (versionData == null) {
-            versionData = fetchGroup(group)
-            if (versionData != null) {
-                versionCache.put(versionData.name, versionData)
-            }
-        }
-        return versionData
-    }
-
-    /**
-     * Fetches the group version information from maven.google.com
-     *
-     * @param group The group name to fetch
-     * @param retryCount Number of times we'll retry before failing
-     * @return GroupVersionData that has the data or null if it is a new item.
-     */
-    @Nullable
-    private GroupVersionData fetchGroup(String group, int retryCount) {
-        def url = buildGroupUrl(group)
-        for (int run = 0; run < retryCount; run++) {
-            logger.info "fetching maven XML from $url"
-            try {
-                def parsedXml = new XmlSlurper(false, false).parse(url)
-                return new GroupVersionData(parsedXml)
-            } catch (FileNotFoundException ignored) {
-                logger.info "could not find version data for $group, seems like a new file"
-                return null
-            } catch (IOException ioException) {
-                logger.warning "failed to fetch the maven info, retrying in 2 seconds. " +
-                        "Run $run of $retryCount"
-                Thread.sleep(RETRY_DELAY)
-            }
-        }
-        throw new GradleException("Could not access maven.google.com")
-    }
-
-    /**
-     * Fetches the group version information from maven.google.com
-     *
-     * @param group The group name to fetch
-     * @return GroupVersionData that has the data or null if it is a new item.
-     */
-    @Nullable
-    private GroupVersionData fetchGroup(String group) {
-        return fetchGroup(group, DEFAULT_RETRY_LIMIT)
-    }
-
-    /**
-     * Return the available versions on maven.google.com for a given artifact
-     *
-     * @param group The group id of the artifact
-     * @param artifactName The name of the artifact
-     * @return The set of versions that are available on maven.google.com. Null if artifact is not
-     *         available.
-     */
-    @Nullable
-    Set<Version> getVersions(String group, String artifactName) {
-        def groupData = getVersionData(group)
-        return groupData?.artifacts?.get(artifactName)?.versions
-    }
-
-    /**
-     * Checks whether the given artifact is already on maven.google.com.
-     *
-     * @param group The project group on maven
-     * @param artifactName The artifact name on maven
-     * @param version The version on maven
-     * @return true if the artifact is already on maven.google.com
-     */
-    boolean isReleased(String group, String artifactName, String version) {
-        return getVersions(group, artifactName)?.contains(new Version(version))
-    }
-
-    /**
-     * Data class that holds the artifacts of a single maven group
-     */
-    private static class GroupVersionData {
-        /**
-         * The group name
-         */
-        String name
-        /**
-         * Map of artifact versions keyed by artifact name
-         */
-        Map<String, ArtifactVersionData> artifacts = new HashMap<>()
-
-        /**
-         * Constructs an instance from the given node.
-         *
-         * @param xml The information node fetched from {@code GROUP_FILE}
-         */
-        GroupVersionData(NodeChild xml) {
-            /**
-             * sample input:
-             * <android.arch.core>
-             *   <runtime versions="1.0.0-alpha4,1.0.0-alpha5,1.0.0-alpha6,1.0.0-alpha7"/>
-             *   <common versions="1.0.0-alpha4,1.0.0-alpha5,1.0.0-alpha6,1.0.0-alpha7"/>
-             * </android.arch.core>
-             */
-            this.name = xml.name()
-            xml.childNodes().each {
-                def versions = it.attributes['versions'].split(",").collect { version ->
-                    new Version(version)
-                }.toSet()
-                artifacts[it.name()] = new ArtifactVersionData(it.name(), versions)
-            }
-        }
-    }
-
-    /**
-     * Data class that holds the version information about a single artifact
-     */
-    private static class ArtifactVersionData {
-        /**
-         * name of the artifact
-         */
-        final String name
-        /**
-         * set of version codes that are already on maven.google.com
-         */
-        final Set<Version> versions
-
-        ArtifactVersionData(String name, Set<Version> versions) {
-            this.name = name
-            this.versions = versions
-        }
-    }
-}
\ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt b/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
index e370801..427f765 100644
--- a/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
+++ b/buildSrc/src/main/kotlin/android/support/dependencies/Dependencies.kt
@@ -19,6 +19,7 @@
 const val AUTO_COMMON = "com.google.auto:auto-common:0.6"
 const val ANTLR = "org.antlr:antlr4:4.5.3"
 const val APACHE_COMMONS_CODEC = "commons-codec:commons-codec:1.10"
+const val CONSTRAINT_LAYOUT = "com.android.support.constraint:constraint-layout:1.0.2"
 const val DEXMAKER_MOCKITO = "com.linkedin.dexmaker:dexmaker-mockito:2.2.0"
 const val ESPRESSO_CONTRIB = "com.android.support.test.espresso:espresso-contrib:3.0.1"
 const val ESPRESSO_CORE = "com.android.support.test.espresso:espresso-core:3.0.1"
diff --git a/buildSrc/src/main/kotlin/android/support/gmaven/GMavenVersionChecker.kt b/buildSrc/src/main/kotlin/android/support/gmaven/GMavenVersionChecker.kt
new file mode 100644
index 0000000..7fc4836
--- /dev/null
+++ b/buildSrc/src/main/kotlin/android/support/gmaven/GMavenVersionChecker.kt
@@ -0,0 +1,180 @@
+/*
+ * 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 android.support.gmaven
+
+import android.support.Version
+import groovy.util.XmlSlurper
+import groovy.util.slurpersupport.Node
+import groovy.util.slurpersupport.NodeChild
+import org.gradle.api.GradleException
+import org.gradle.api.logging.Logger
+import java.io.FileNotFoundException
+import java.io.IOException
+
+/**
+ * Queries maven.google.com to get the version numbers for each artifact.
+ * Due to the structure of maven.google.com, a new query is necessary for each group.
+ *
+ * @param logger Logger of the root project. No reason to create multiple instances of this.
+ */
+class GMavenVersionChecker(private val logger: Logger) {
+    private val versionCache: MutableMap<String, GroupVersionData> = HashMap()
+
+    /**
+     * Checks whether the given artifact is already on maven.google.com.
+     *
+     * @param group The project group on maven
+     * @param artifactName The artifact name on maven
+     * @param version The version on maven
+     * @return true if the artifact is already on maven.google.com
+     */
+    fun isReleased(group: String, artifactName: String, version: String): Boolean {
+        return getVersions(group, artifactName)?.contains(Version(version)) ?: false
+    }
+
+    /**
+     * Return the available versions on maven.google.com for a given artifact
+     *
+     * @param group The group id of the artifact
+     * @param artifactName The name of the artifact
+     * @return The set of versions that are available on maven.google.com. Null if artifact is not
+     *         available.
+     */
+    private fun getVersions(group: String, artifactName: String): Set<Version>? {
+        val groupData = getVersionData(group)
+        return groupData?.artifacts?.get(artifactName)?.versions
+    }
+
+    /**
+     * Returns the version data for each artifact in a given group.
+     * <p>
+     * If data is not cached, this will make a web request to get it.
+     *
+     * @param group The group to query
+     * @return A data class which has the versions for each artifact
+     */
+    private fun getVersionData(group: String): GroupVersionData? {
+        return versionCache.getOrMaybePut(group) {
+            fetchGroup(group, DEFAULT_RETRY_LIMIT)
+        }
+    }
+
+    /**
+     * Fetches the group version information from maven.google.com
+     *
+     * @param group The group name to fetch
+     * @param retryCount Number of times we'll retry before failing
+     * @return GroupVersionData that has the data or null if it is a new item.
+     */
+    private fun fetchGroup(group: String, retryCount: Int): GroupVersionData? {
+        val url = buildGroupUrl(group)
+        for (run in 0..retryCount) {
+            logger.info("fetching maven XML from $url")
+            try {
+                val parsedXml = XmlSlurper(false, false).parse(url) as NodeChild
+                return GroupVersionData.from(parsedXml)
+            } catch (ignored: FileNotFoundException) {
+                logger.info("could not find version data for $group, seems like a new file")
+                return null
+            } catch (ioException: IOException) {
+                logger.warn("failed to fetch the maven info, retrying in 2 seconds. " +
+                        "Run $run of $retryCount")
+                Thread.sleep(RETRY_DELAY)
+            }
+        }
+        throw GradleException("Could not access maven.google.com")
+    }
+
+    companion object {
+        /**
+         * Creates the URL which has the XML file that describes the available versions for each
+         * artifact in that group
+         *
+         * @param group Maven group name
+         * @return The URL of the XML file
+         */
+        private fun buildGroupUrl(group: String) =
+                "$BASE${group.replace(".","/")}/$GROUP_FILE"
+    }
+}
+
+private fun <K, V> MutableMap<K, V>.getOrMaybePut(key: K, defaultValue: () -> V?): V? {
+    val value = get(key)
+    return if (value == null) {
+        val answer = defaultValue()
+        if (answer != null) put(key, answer)
+        answer
+    } else {
+        value
+    }
+}
+
+/**
+ * Data class that holds the artifacts of a single maven group.
+ *
+ * @param name Maven group name
+ * @param artifacts Map of artifact versions keyed by artifact name
+ */
+private data class GroupVersionData(
+        val name: String,
+        val artifacts: Map<String, ArtifactVersionData>
+) {
+    companion object {
+        /**
+         * Constructs an instance from the given node.
+         *
+         * @param xml The information node fetched from {@code GROUP_FILE}
+         */
+        fun from(xml: NodeChild): GroupVersionData {
+            /*
+             * sample input:
+             * <android.arch.core>
+             *   <runtime versions="1.0.0-alpha4,1.0.0-alpha5,1.0.0-alpha6,1.0.0-alpha7"/>
+             *   <common versions="1.0.0-alpha4,1.0.0-alpha5,1.0.0-alpha6,1.0.0-alpha7"/>
+             * </android.arch.core>
+             */
+            val name = xml.name()
+            val artifacts: MutableMap<String, ArtifactVersionData> = HashMap()
+
+            xml.childNodes().forEach {
+                val node = it as Node
+                val versions = (node.attributes()["versions"] as String).split(",").map {
+                    Version(it)
+                }.toSet()
+                artifacts.put(it.name(), ArtifactVersionData(it.name(), versions))
+            }
+            return GroupVersionData(name, artifacts)
+        }
+    }
+}
+
+/**
+ * Data class that holds the version information about a single artifact
+ *
+ * @param name Name of the maven artifact
+ * @param versions set of version codes that are already on maven.google.com
+ */
+private data class ArtifactVersionData(val name: String, val versions: Set<Version>)
+
+// wait 2 seconds before retrying if fetch fails
+private const val RETRY_DELAY: Long = 2000 // ms
+
+// number of times we'll try to reach maven.google.com before failing
+private const val DEFAULT_RETRY_LIMIT = 20
+
+private const val BASE = "https://dl.google.com/dl/android/maven2/"
+private const val GROUP_FILE = "group-index.xml"
\ 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 e2e84a0..943c489 100644
--- a/car/res/layout/car_paged_list_item_content.xml
+++ b/car/res/layout/car_paged_list_item_content.xml
@@ -54,10 +54,7 @@
         <!-- End icon with divider. -->
         <View
             android:id="@+id/supplemental_icon_divider"
-            android:layout_width="@dimen/car_vertical_line_divider_width"
-            android:layout_height="@dimen/car_vertical_line_divider_height"
-            android:layout_marginStart="@dimen/car_padding_4"
-            android:background="@color/car_list_divider"/>
+            style="@style/CarListVerticalDivider"/>
         <ImageView
             android:id="@+id/supplemental_icon"
             android:layout_width="@dimen/car_primary_icon_size"
@@ -65,13 +62,22 @@
             android:layout_marginStart="@dimen/car_padding_4"
             android:scaleType="fitCenter"/>
 
+        <!-- Switch with divider. -->
+        <View
+            android:id="@+id/switch_divider"
+            style="@style/CarListVerticalDivider"/>
+        <Switch
+            android:id="@+id/switch_widget"
+            android:layout_width="@dimen/car_primary_icon_size"
+            android:layout_height="@dimen/car_primary_icon_size"
+            android:layout_marginStart="@dimen/car_padding_4"
+            style="@android:style/Widget.Material.CompoundButton.Switch"
+        />
+
         <!-- Up to 2 action buttons with dividers. -->
         <View
             android:id="@+id/action2_divider"
-            android:layout_width="@dimen/car_vertical_line_divider_width"
-            android:layout_height="@dimen/car_vertical_line_divider_height"
-            android:layout_marginStart="@dimen/car_padding_4"
-            android:background="@color/car_list_divider"/>
+            style="@style/CarListVerticalDivider"/>
         <Button
             android:id="@+id/action2"
             android:layout_width="wrap_content"
@@ -85,10 +91,7 @@
             style="?android:attr/borderlessButtonStyle"/>
         <View
             android:id="@+id/action1_divider"
-            android:layout_width="@dimen/car_vertical_line_divider_width"
-            android:layout_height="@dimen/car_vertical_line_divider_height"
-            android:layout_marginStart="@dimen/car_padding_4"
-            android:background="@color/car_list_divider"/>
+            style="@style/CarListVerticalDivider"/>
         <Button
             android:id="@+id/action1"
             android:layout_width="wrap_content"
diff --git a/car/res/values/attrs.xml b/car/res/values/attrs.xml
index 317c944..0b9f0ec 100644
--- a/car/res/values/attrs.xml
+++ b/car/res/values/attrs.xml
@@ -44,6 +44,8 @@
         </attr>
         <!-- Whether to display the scrollbar or not. Defaults to true. -->
         <attr name="scrollBarEnabled" format="boolean" />
+        <!-- The top margin before the scroll bar is drawn. -->
+        <attr name="scrollBarTopMargin" format="dimension" />
         <!-- Whether or not to show a diving line between each item of the list. -->
         <attr name="showPagedListViewDivider" format="boolean" />
         <!-- An optional id that specifies a child View whose starting edge will be used to
diff --git a/car/res/values/styles.xml b/car/res/values/styles.xml
index 7ef5823..78d9603 100644
--- a/car/res/values/styles.xml
+++ b/car/res/values/styles.xml
@@ -158,4 +158,12 @@
     <!-- Styles for TextInputLayout hints -->
     <style name="CarHintTextAppearance" parent="CarBody2">
     </style>
+
+    <style name="CarListVerticalDivider">
+        <item name="android:layout_width">@dimen/car_vertical_line_divider_width</item>
+        <item name="android:layout_height">@dimen/car_vertical_line_divider_height</item>
+        <item name="android:layout_marginStart">@dimen/car_padding_4</item>
+        <item name="android:background">@color/car_list_divider</item>
+    </style>
+
 </resources>
diff --git a/car/src/main/java/androidx/car/widget/ListItem.java b/car/src/main/java/androidx/car/widget/ListItem.java
index 2e3f065..d345833 100644
--- a/car/src/main/java/androidx/car/widget/ListItem.java
+++ b/car/src/main/java/androidx/car/widget/ListItem.java
@@ -26,6 +26,7 @@
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
 import android.view.View;
+import android.widget.CompoundButton;
 import android.widget.RelativeLayout;
 
 import java.lang.annotation.Retention;
@@ -58,6 +59,7 @@
  *         <li>Supplemental Icon
  *         <li>One Action Button
  *         <li>Two Action Buttons
+ *         <li>Switch</li>
  *     </ul>
  * </ul>
  *
@@ -87,6 +89,7 @@
                 vh.getPrimaryIcon(),
                 vh.getTitle(), vh.getBody(),
                 vh.getSupplementalIcon(), vh.getSupplementalIconDivider(),
+                vh.getSwitch(), vh.getSwitchDivider(),
                 vh.getAction1(), vh.getAction1Divider(), vh.getAction2(), vh.getAction2Divider()};
         for (View v : subviews) {
             v.setVisibility(View.GONE);
@@ -141,13 +144,15 @@
 
         @Retention(SOURCE)
         @IntDef({SUPPLEMENTAL_ACTION_NO_ACTION, SUPPLEMENTAL_ACTION_SUPPLEMENTAL_ICON,
-                SUPPLEMENTAL_ACTION_ONE_ACTION, SUPPLEMENTAL_ACTION_TWO_ACTIONS})
+                SUPPLEMENTAL_ACTION_ONE_ACTION, SUPPLEMENTAL_ACTION_TWO_ACTIONS,
+                SUPPLEMENTAL_ACTION_SWITCH})
         private @interface SupplementalActionType {}
 
         private static final int SUPPLEMENTAL_ACTION_NO_ACTION = 0;
         private static final int SUPPLEMENTAL_ACTION_SUPPLEMENTAL_ICON = 1;
         private static final int SUPPLEMENTAL_ACTION_ONE_ACTION = 2;
         private static final int SUPPLEMENTAL_ACTION_TWO_ACTIONS = 3;
+        private static final int SUPPLEMENTAL_ACTION_SWITCH = 4;
 
         private final Context mContext;
         private final List<ViewBinder> mBinders = new ArrayList<>();
@@ -171,6 +176,10 @@
         private View.OnClickListener mSupplementalIconOnClickListener;
         private boolean mShowSupplementalIconDivider;
 
+        private boolean mSwitchChecked;
+        private boolean mShowSwitchDivider;
+        private CompoundButton.OnCheckedChangeListener mSwitchOnCheckedChangeListener;
+
         private String mAction1Text;
         private View.OnClickListener mAction1OnClickListener;
         private boolean mShowAction1Divider;
@@ -500,6 +509,16 @@
                 case SUPPLEMENTAL_ACTION_NO_ACTION:
                     // Do nothing
                     break;
+                case SUPPLEMENTAL_ACTION_SWITCH:
+                    mBinders.add(vh -> {
+                        vh.getSwitch().setVisibility(View.VISIBLE);
+                        vh.getSwitch().setChecked(mSwitchChecked);
+                        vh.getSwitch().setOnCheckedChangeListener(mSwitchOnCheckedChangeListener);
+                        if (mShowSwitchDivider) {
+                            vh.getSwitchDivider().setVisibility(View.VISIBLE);
+                        }
+                    });
+                    break;
                 default:
                     throw new IllegalArgumentException("Unrecognized supplemental action type.");
             }
@@ -681,6 +700,7 @@
          *
          * @param action1Text button text to display - this button will be closer to item end.
          * @param action2Text button text to display.
+         * @return This Builder object to allow for chaining calls to set methods.
          */
         public Builder withActions(String action1Text, boolean showAction1Divider,
                 View.OnClickListener action1OnClickListener,
@@ -704,6 +724,24 @@
         }
 
         /**
+         * Sets {@code Supplemental Action} to be represented by a {@link android.widget.Switch}.
+         *
+         * @param checked initial value for switched.
+         * @param showDivider whether to display a vertical bar between switch and text.
+         * @param listener callback to be invoked when the checked state is changed.
+         * @return This Builder object to allow for chaining calls to set methods.
+         */
+        public Builder withSwitch(boolean checked, boolean showDivider,
+                CompoundButton.OnCheckedChangeListener listener) {
+            mSupplementalActionType = SUPPLEMENTAL_ACTION_SWITCH;
+
+            mSwitchChecked = checked;
+            mShowSwitchDivider = showDivider;
+            mSwitchOnCheckedChangeListener = listener;
+            return this;
+        }
+
+        /**
          * Adds {@link ViewBinder} to interact with sub-views in
          * {@link ListItemAdapter.ViewHolder}. These ViewBinders will always bind after
          * other {@link Builder} methods have bond.
diff --git a/car/src/main/java/androidx/car/widget/ListItemAdapter.java b/car/src/main/java/androidx/car/widget/ListItemAdapter.java
index d8a0fe7..a338a51 100644
--- a/car/src/main/java/androidx/car/widget/ListItemAdapter.java
+++ b/car/src/main/java/androidx/car/widget/ListItemAdapter.java
@@ -26,6 +26,7 @@
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
+import android.widget.Switch;
 import android.widget.TextView;
 
 import androidx.car.R;
@@ -181,6 +182,9 @@
         private Button mAction2;
         private View mAction2Divider;
 
+        private Switch mSwitch;
+        private View mSwitchDivider;
+
         public ViewHolder(View itemView) {
             super(itemView);
 
@@ -194,6 +198,9 @@
             mSupplementalIcon = itemView.findViewById(R.id.supplemental_icon);
             mSupplementalIconDivider = itemView.findViewById(R.id.supplemental_icon_divider);
 
+            mSwitch = itemView.findViewById(R.id.switch_widget);
+            mSwitchDivider = itemView.findViewById(R.id.switch_divider);
+
             mAction1 = itemView.findViewById(R.id.action1);
             mAction1Divider = itemView.findViewById(R.id.action1_divider);
             mAction2 = itemView.findViewById(R.id.action2);
@@ -224,6 +231,14 @@
             return mSupplementalIconDivider;
         }
 
+        public View getSwitchDivider() {
+            return mSwitchDivider;
+        }
+
+        public Switch getSwitch() {
+            return mSwitch;
+        }
+
         public Button getAction1() {
             return mAction1;
         }
diff --git a/car/src/main/java/androidx/car/widget/PagedListView.java b/car/src/main/java/androidx/car/widget/PagedListView.java
index 63924d8..a6811b1 100644
--- a/car/src/main/java/androidx/car/widget/PagedListView.java
+++ b/car/src/main/java/androidx/car/widget/PagedListView.java
@@ -324,11 +324,13 @@
 
         mScrollBarView.setVisibility(mScrollBarEnabled ? VISIBLE : GONE);
 
-        // Modify the layout the Scroll Bar is not visible.
-        if (!mScrollBarEnabled) {
+        if (mScrollBarEnabled) {
+            int topMargin =
+                    a.getDimensionPixelSize(R.styleable.PagedListView_scrollBarTopMargin, 0);
+            setScrollBarTopMargin(topMargin);
+        } else {
             MarginLayoutParams params = (MarginLayoutParams) mRecyclerView.getLayoutParams();
             params.setMarginStart(0);
-            mRecyclerView.setLayoutParams(params);
         }
 
         setDayNightStyle(DayNightStyle.AUTO);
@@ -380,6 +382,17 @@
         mRecyclerView.setClipToPadding(startPadding == 0 && endPadding == 0);
     }
 
+    /**
+     * Sets the top margin above the scroll bar. By default, this margin is 0.
+     *
+     * @param topMargin The top margin.
+     */
+    public void setScrollBarTopMargin(int topMargin) {
+        MarginLayoutParams params = (MarginLayoutParams) mScrollBarView.getLayoutParams();
+        params.topMargin = topMargin;
+        requestLayout();
+    }
+
     @NonNull
     public RecyclerView getRecyclerView() {
         return mRecyclerView;
diff --git a/car/tests/src/androidx/car/widget/ListItemTest.java b/car/tests/src/androidx/car/widget/ListItemTest.java
index 4620580..fa0771b 100644
--- a/car/tests/src/androidx/car/widget/ListItemTest.java
+++ b/car/tests/src/androidx/car/widget/ListItemTest.java
@@ -181,6 +181,28 @@
     }
 
     @Test
+    public void testSwitchVisibleAndCheckedState() {
+        List<ListItem> items = Arrays.asList(
+                new ListItem.Builder(mActivity)
+                        .withSwitch(true, true, null)
+                        .build(),
+                new ListItem.Builder(mActivity)
+                        .withSwitch(false, true, null)
+                        .build());
+        setupPagedListView(items);
+
+        ListItemAdapter.ViewHolder viewHolder = getViewHolderAtPosition(0);
+        assertThat(viewHolder.getSwitch().getVisibility(), is(equalTo(View.VISIBLE)));
+        assertThat(viewHolder.getSwitch().isChecked(), is(equalTo(true)));
+        assertThat(viewHolder.getSwitchDivider().getVisibility(), is(equalTo(View.VISIBLE)));
+
+        viewHolder = getViewHolderAtPosition(1);
+        assertThat(viewHolder.getSwitch().getVisibility(), is(equalTo(View.VISIBLE)));
+        assertThat(viewHolder.getSwitch().isChecked(), is(equalTo(false)));
+        assertThat(viewHolder.getSwitchDivider().getVisibility(), is(equalTo(View.VISIBLE)));
+    }
+
+    @Test
     public void testDividersAreOptional() {
         List<ListItem> items = Arrays.asList(
                 new ListItem.Builder(mActivity)
@@ -192,6 +214,9 @@
                 new ListItem.Builder(mActivity)
                         .withActions("text", false, v -> { /* Do nothing. */ },
                                 "text", false, v -> { /* Do nothing. */ })
+                        .build(),
+                new ListItem.Builder(mActivity)
+                        .withSwitch(true, false, null)
                         .build());
         setupPagedListView(items);
 
@@ -209,6 +234,10 @@
         assertThat(viewHolder.getAction1Divider().getVisibility(), is(equalTo(View.GONE)));
         assertThat(viewHolder.getAction2().getVisibility(), is(equalTo(View.VISIBLE)));
         assertThat(viewHolder.getAction2Divider().getVisibility(), is(equalTo(View.GONE)));
+
+        viewHolder = getViewHolderAtPosition(3);
+        assertThat(viewHolder.getSwitch().getVisibility(), is(equalTo(View.VISIBLE)));
+        assertThat(viewHolder.getSwitchDivider().getVisibility(), is(equalTo(View.GONE)));
     }
 
     @Test
@@ -475,6 +504,35 @@
     }
 
     @Test
+    public void testCheckingSwitch() {
+        final boolean[] clicked = {false, false};
+        List<ListItem> items = Arrays.asList(
+                new ListItem.Builder(mActivity)
+                        .withSwitch(false, false, (button, isChecked) -> {
+                            // Initial value is false.
+                            assertTrue(isChecked);
+                            clicked[0] = true;
+                        })
+                        .build(),
+                new ListItem.Builder(mActivity)
+                        .withSwitch(true, false, (button, isChecked) -> {
+                            // Initial value is true.
+                            assertFalse(isChecked);
+                            clicked[1] = true;
+                        })
+                        .build());
+        setupPagedListView(items);
+
+        onView(withId(R.id.recycler_view)).perform(
+                actionOnItemAtPosition(0, clickChildViewWithId(R.id.switch_widget)));
+        assertTrue(clicked[0]);
+
+        onView(withId(R.id.recycler_view)).perform(
+                actionOnItemAtPosition(1, clickChildViewWithId(R.id.switch_widget)));
+        assertTrue(clicked[1]);
+    }
+
+    @Test
     public void testClickingSupplementalAction() {
         final boolean[] clicked = {false};
         List<ListItem> items = Arrays.asList(
diff --git a/car/tests/src/androidx/car/widget/PagedListViewTest.java b/car/tests/src/androidx/car/widget/PagedListViewTest.java
index 67d97e3..67aa638 100644
--- a/car/tests/src/androidx/car/widget/PagedListViewTest.java
+++ b/car/tests/src/androidx/car/widget/PagedListViewTest.java
@@ -38,6 +38,7 @@
 import android.content.pm.PackageManager;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
+import android.support.annotation.NonNull;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.annotation.UiThreadTest;
 import android.support.test.espresso.Espresso;
@@ -54,6 +55,9 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeMatcher;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -350,6 +354,32 @@
         }
     }
 
+    @Test
+    public void testDefaultScrollBarTopMargin() {
+        if (!isAutoDevice()) {
+            return;
+        }
+
+        // Just need enough items to ensure the scroll bar is showing.
+        setUpPagedListView(ITEMS_PER_PAGE * 10);
+        onView(withId(R.id.paged_scroll_view)).check(matches(withTopMargin(0)));
+    }
+
+    @Test
+    public void testSetScrollbarTopMargin() {
+        if (!isAutoDevice()) {
+            return;
+        }
+
+        // Just need enough items to ensure the scroll bar is showing.
+        setUpPagedListView(ITEMS_PER_PAGE * 10);
+
+        int topMargin = 100;
+        mPagedListView.setScrollBarTopMargin(topMargin);
+
+        onView(withId(R.id.paged_scroll_view)).check(matches(withTopMargin(topMargin)));
+    }
+
     private static String itemText(int index) {
         return "Data " + index;
     }
@@ -460,4 +490,26 @@
             mResourceCallback = callback;
         }
     }
+
+    /**
+     * Returns a matcher that matches {@link View}s that have the given top margin.
+     *
+     * @param topMargin The top margin value to match to.
+     */
+    @NonNull
+    public static Matcher<View> withTopMargin(int topMargin) {
+        return new TypeSafeMatcher<View>() {
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("with top margin: " + topMargin);
+            }
+
+            @Override
+            public boolean matchesSafely(View view) {
+                ViewGroup.MarginLayoutParams params =
+                        (ViewGroup.MarginLayoutParams) view.getLayoutParams();
+                return topMargin == params.topMargin;
+            }
+        };
+    }
 }
diff --git a/compat/res/values/dimens.xml b/compat/res/values/dimens.xml
index 1dcff5e..41abbe6 100644
--- a/compat/res/values/dimens.xml
+++ b/compat/res/values/dimens.xml
@@ -70,4 +70,10 @@
 
     <!-- the paddingtop on the right side of the notification (for time etc.) -->
     <dimen name="notification_right_side_padding_top">2dp</dimen>
+
+    <!-- the maximum width of the large icon, above which it will be downscaled -->
+    <dimen name="notification_icon_max_width">320dp</dimen>
+
+    <!-- the maximum height of the large icon, above which it will be downscaled -->
+    <dimen name="notification_icon_max_height">320dp</dimen>
 </resources>
diff --git a/compat/src/main/java/android/support/v4/app/NotificationCompat.java b/compat/src/main/java/android/support/v4/app/NotificationCompat.java
index ef41c67..d701478 100644
--- a/compat/src/main/java/android/support/v4/app/NotificationCompat.java
+++ b/compat/src/main/java/android/support/v4/app/NotificationCompat.java
@@ -957,11 +957,37 @@
          * Set the large icon that is shown in the ticker and notification.
          */
         public Builder setLargeIcon(Bitmap icon) {
-            mLargeIcon = icon;
+            mLargeIcon = reduceLargeIconSize(icon);
             return this;
         }
 
         /**
+         * Reduce the size of a notification icon if it's overly large. The framework does
+         * this automatically starting from API 27.
+         */
+        private Bitmap reduceLargeIconSize(Bitmap icon) {
+            if (icon == null || Build.VERSION.SDK_INT >= 27) {
+                return icon;
+            }
+
+            Resources res = mContext.getResources();
+            int maxWidth = res.getDimensionPixelSize(R.dimen.notification_icon_max_width);
+            int maxHeight = res.getDimensionPixelSize(R.dimen.notification_icon_max_height);
+            if (icon.getWidth() <= maxWidth && icon.getHeight() <= maxHeight) {
+                return icon;
+            }
+
+            double scale = Math.min(
+                    maxWidth / (double) Math.max(1, icon.getWidth()),
+                    maxHeight / (double) Math.max(1, icon.getHeight()));
+            return Bitmap.createScaledBitmap(
+                    icon,
+                    (int) Math.ceil(icon.getWidth() * scale),
+                    (int) Math.ceil(icon.getHeight() * scale),
+                    /* filtered */ true);
+        }
+
+        /**
          * Set the sound to play.  It will play on the default stream.
          *
          * <p>
@@ -2115,8 +2141,16 @@
 
         /**
          * Sets the title to be displayed on this conversation. May be set to {@code null}.
-         * @param conversationTitle Title displayed for this conversation.
-         * @return this object for method chaining.
+         *
+         * <p>This API's behavior was changed in SDK version {@link Build.VERSION_CODES#P}. If your
+         * application's target version is less than {@link Build.VERSION_CODES#P}, setting a
+         * conversation title to a non-null value will make {@link #isGroupConversation()} return
+         * {@code true} and passing {@code null} will make it return {@code false}. In
+         * {@link Build.VERSION_CODES#P} and beyond, use {@link #setGroupConversation(boolean)}
+         * to set group conversation status.
+         *
+         * @param conversationTitle Title displayed for this conversation
+         * @return this object for method chaining
          */
         public MessagingStyle setConversationTitle(@Nullable CharSequence conversationTitle) {
             mConversationTitle = conversationTitle;
@@ -2186,9 +2220,27 @@
         }
 
         /**
-         * Returns {@code true} if this notification represents a group conversation.
+         * Returns {@code true} if this notification represents a group conversation, otherwise
+         * {@code false}.
+         *
+         * <p> If the application that generated this {@link MessagingStyle} targets an SDK version
+         * less than {@link Build.VERSION_CODES#P}, this method becomes dependent on whether or
+         * not the conversation title is set; returning {@code true} if the conversation title is
+         * a non-null value, or {@code false} otherwise. From {@link Build.VERSION_CODES#P} forward,
+         * this method returns what's set by {@link #setGroupConversation(boolean)} allowing for
+         * named, non-group conversations.
+         *
+         * @see #setConversationTitle(CharSequence)
          */
         public boolean isGroupConversation() {
+            // When target SDK version is < P, a non-null conversation title dictates if this is
+            // as group conversation.
+            if (mBuilder != null
+                    && mBuilder.mContext.getApplicationInfo().targetSdkVersion
+                    < Build.VERSION_CODES.P) {
+                return mConversationTitle != null;
+            }
+
             return mIsGroupConversation;
         }
 
diff --git a/compat/tests/java/android/support/v4/app/NotificationCompatTest.java b/compat/tests/java/android/support/v4/app/NotificationCompatTest.java
index 0509af9..28a9813 100644
--- a/compat/tests/java/android/support/v4/app/NotificationCompatTest.java
+++ b/compat/tests/java/android/support/v4/app/NotificationCompatTest.java
@@ -489,11 +489,13 @@
     }
 
     @Test
-    public void testMessagingStyle_isGroupConversation() {
+    public void messagingStyle_isGroupConversation() {
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.P;
         NotificationCompat.MessagingStyle messagingStyle =
                 new NotificationCompat.MessagingStyle("self name")
-                        .setGroupConversation(true);
-        Notification notification = new NotificationCompat.Builder(mContext, "test id")
+                        .setGroupConversation(true)
+                        .setConversationTitle("test conversation title");
+        new NotificationCompat.Builder(mContext, "test id")
                 .setSmallIcon(1)
                 .setContentTitle("test title")
                 .setStyle(messagingStyle)
@@ -503,6 +505,56 @@
     }
 
     @Test
+    public void messagingStyle_isGroupConversation_noConversationTitle() {
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.P;
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("self name")
+                        .setGroupConversation(true)
+                        .setConversationTitle(null);
+        new NotificationCompat.Builder(mContext, "test id")
+                .setSmallIcon(1)
+                .setContentTitle("test title")
+                .setStyle(messagingStyle)
+                .build();
+
+        assertTrue(messagingStyle.isGroupConversation());
+    }
+
+    @Test
+    public void messagingStyle_isGroupConversation_withConversationTitle_legacy() {
+        // In legacy (version < P), isGroupConversation is controlled by conversationTitle.
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.O;
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("self name")
+                        .setGroupConversation(false)
+                        .setConversationTitle("test conversation title");
+        new NotificationCompat.Builder(mContext, "test id")
+                .setSmallIcon(1)
+                .setContentTitle("test title")
+                .setStyle(messagingStyle)
+                .build();
+
+        assertTrue(messagingStyle.isGroupConversation());
+    }
+
+    @Test
+    public void messagingStyle_isGroupConversation_withoutConversationTitle_legacy() {
+        // In legacy (version < P), isGroupConversation is controlled by conversationTitle.
+        mContext.getApplicationInfo().targetSdkVersion = Build.VERSION_CODES.O;
+        NotificationCompat.MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle("self name")
+                        .setGroupConversation(true)
+                        .setConversationTitle(null);
+        new NotificationCompat.Builder(mContext, "test id")
+                .setSmallIcon(1)
+                .setContentTitle("test title")
+                .setStyle(messagingStyle)
+                .build();
+
+        assertFalse(messagingStyle.isGroupConversation());
+    }
+
+    @Test
     public void testMessagingStyle_extras() {
         NotificationCompat.MessagingStyle messagingStyle =
                 new NotificationCompat.MessagingStyle("test name")
diff --git a/fragment/src/main/java/android/support/v4/app/FragmentActivity.java b/fragment/src/main/java/android/support/v4/app/FragmentActivity.java
index 78161a8..e3f5684 100644
--- a/fragment/src/main/java/android/support/v4/app/FragmentActivity.java
+++ b/fragment/src/main/java/android/support/v4/app/FragmentActivity.java
@@ -273,6 +273,7 @@
     @Override
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
+        mFragments.noteStateNotSaved();
         mFragments.dispatchConfigurationChanged(newConfig);
     }
 
diff --git a/jetifier/jetifier/build.gradle b/jetifier/jetifier/build.gradle
index c817220..fbdb617 100644
--- a/jetifier/jetifier/build.gradle
+++ b/jetifier/jetifier/build.gradle
@@ -27,8 +27,11 @@
     }
 }
 
+// upload anchor for subprojects to upload their artifacts to the local repo.
+task(mainUpload)
+
 subprojects {
-    group 'android.support.tools.jetifier'
+    group 'androidx.tools.jetifier'
 
     ext.supportRootFolder = "${project.projectDir}/../../.."
 
@@ -62,13 +65,20 @@
         buildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/support/build')
                 .getCanonicalFile()
         project.ext.distDir = new File(System.env.DIST_DIR).getCanonicalFile()
+        // the build server does not pass the build number so we infer it from the last folder of
+        // the dist path.
+        ext.buildNumber = project.ext.distDir.getName()
 
         // the build server should always print out full stack traces for any failures.
         gradle.startParameter.showStacktrace = ShowStacktrace.ALWAYS
     } else {
         buildDir = file("${ext.supportRootFolder}/../../out/host/gradle/frameworks/support/jetifier/build")
         project.ext.distDir = new File("${ext.supportRootFolder}/../../out/dist")
+        ext.buildNumber = 0
     }
+
+    ext.repoDir = "file://$project.buildDir/repo"
+
     subprojects {
         // Change buildDir so that all plugins pick up the new value.
         project.buildDir = new File("$project.parent.buildDir/../$project.name/build")
@@ -90,7 +100,28 @@
             }
         }
     }
+    buildOnServerTask.dependsOn "createArchive"
 }
 
 setupOutDirs()
 configureBuildOnServer()
+
+// anchor for prepare repo. This is post unzip.
+task prepareRepo() {
+    description "This task clears the repo folder to ensure that we run a fresh build every" +
+            " time we create arhives. Otherwise, snapshots will accumulate in the builds folder."
+    doFirst {
+        file(rootProject.ext.repoDir).deleteDir()
+        file(rootProject.ext.repoDir).mkdirs()
+    }
+}
+
+task createArchive(type : Zip) {
+    description "Creates a maven repository that includes just the libraries compiled in this" +
+            " project, without any history from prebuilts."
+    from rootProject.ext.repoDir
+    destinationDir rootProject.ext.distDir
+    into 'm2repository'
+    baseName = String.format("top-of-tree-m2repository-%s", project.ext.buildNumber)
+    dependsOn mainUpload
+}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/build.gradle b/jetifier/jetifier/core/build.gradle
index 1ac3f36..72edcfa 100644
--- a/jetifier/jetifier/core/build.gradle
+++ b/jetifier/jetifier/core/build.gradle
@@ -14,13 +14,26 @@
  * limitations under the License
  */
 
-version '1.0'
+apply plugin: 'maven'
+
+version '0.2'
 
 dependencies {
-    compile group: 'org.ow2.asm', name: 'asm', version: '5.2'
-    compile group: 'org.ow2.asm', name: 'asm-commons', version: '5.2'
-    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'
-    compile group: 'org.jdom', name: 'jdom2', version: '2.0.6'
-    testCompile group: 'junit', name: 'junit', version: '4.12'
-    testCompile group: 'com.google.truth', name: 'truth', version: '0.31'
+    compile("org.ow2.asm:asm:5.2")
+    compile("org.ow2.asm:asm-commons:5.2")
+    compile("com.google.code.gson:gson:2.8.0")
+    compile("org.jdom:jdom2:2.0.6")
+    testCompile("junit:junit:4.12")
+    testCompile("com.google.truth:truth:0.31")
 }
+
+uploadArchives {
+    repositories {
+        mavenDeployer {
+            repository(url: rootProject.ext.repoDir)
+        }
+    }
+}
+
+rootProject.mainUpload.dependsOn tasks["uploadArchives"]
+tasks["uploadArchives"].dependsOn rootProject.prepareRepo
\ No newline at end of file
diff --git a/jetifier/jetifier/gradle-plugin/build.gradle b/jetifier/jetifier/gradle-plugin/build.gradle
index ca24b72..3b001f8 100644
--- a/jetifier/jetifier/gradle-plugin/build.gradle
+++ b/jetifier/jetifier/gradle-plugin/build.gradle
@@ -14,9 +14,9 @@
  * limitations under the License
  */
 
-version '0.1'
+apply plugin: 'maven'
 
-apply plugin: 'maven-publish'
+version '0.2'
 
 dependencies {
     compile project(':core')
@@ -31,10 +31,13 @@
     with jar
 }
 
-publishing {
-    publications {
-        mavenJava(MavenPublication) {
-            from components.java
+uploadArchives {
+    repositories {
+        mavenDeployer {
+            repository(url: rootProject.ext.repoDir)
         }
     }
 }
+
+rootProject.mainUpload.dependsOn tasks["uploadArchives"]
+tasks["uploadArchives"].dependsOn rootProject.prepareRepo
\ No newline at end of file
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/HolderFragment.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/HolderFragment.java
index 100d10a..ca5e181 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/HolderFragment.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/HolderFragment.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.app.Application.ActivityLifecycleCallbacks;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.annotation.RestrictTo;
 import android.support.v4.app.Fragment;
@@ -34,7 +35,7 @@
  * @hide
  */
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class HolderFragment extends Fragment {
+public class HolderFragment extends Fragment implements ViewModelStoreOwner {
     private static final String LOG_TAG = "ViewModelStores";
 
     private static final HolderFragmentManager sHolderFragmentManager = new HolderFragmentManager();
@@ -69,6 +70,8 @@
         mViewModelStore.clear();
     }
 
+    @NonNull
+    @Override
     public ViewModelStore getViewModelStore() {
         return mViewModelStore;
     }
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
index ab6bce6..d9894a8 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
@@ -62,6 +62,7 @@
      * @param fragment a fragment, in whose scope ViewModels should be retained
      * @return a ViewModelProvider instance
      */
+    @NonNull
     @MainThread
     public static ViewModelProvider of(@NonNull Fragment fragment) {
         ViewModelProvider.AndroidViewModelFactory factory =
@@ -79,6 +80,7 @@
      * @param activity an activity, in whose scope ViewModels should be retained
      * @return a ViewModelProvider instance
      */
+    @NonNull
     @MainThread
     public static ViewModelProvider of(@NonNull FragmentActivity activity) {
         ViewModelProvider.AndroidViewModelFactory factory =
@@ -97,6 +99,7 @@
      * @param factory  a {@code Factory} to instantiate new ViewModels
      * @return a ViewModelProvider instance
      */
+    @NonNull
     @MainThread
     public static ViewModelProvider of(@NonNull Fragment fragment, @NonNull Factory factory) {
         checkApplication(checkActivity(fragment));
@@ -113,6 +116,7 @@
      * @param factory  a {@code Factory} to instantiate new ViewModels
      * @return a ViewModelProvider instance
      */
+    @NonNull
     @MainThread
     public static ViewModelProvider of(@NonNull FragmentActivity activity,
             @NonNull Factory factory) {
diff --git a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java
index e79c934..348a06e 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelStores.java
@@ -38,6 +38,7 @@
      * @param activity an activity whose {@code ViewModelStore} is requested
      * @return a {@code ViewModelStore}
      */
+    @NonNull
     @MainThread
     public static ViewModelStore of(@NonNull FragmentActivity activity) {
         if (activity instanceof ViewModelStoreOwner) {
@@ -52,6 +53,7 @@
      * @param fragment a fragment whose {@code ViewModelStore} is requested
      * @return a {@code ViewModelStore}
      */
+    @NonNull
     @MainThread
     public static ViewModelStore of(@NonNull Fragment fragment) {
         if (fragment instanceof ViewModelStoreOwner) {
diff --git a/lifecycle/viewmodel/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java b/lifecycle/viewmodel/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java
index 37d2020..142f19a 100644
--- a/lifecycle/viewmodel/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java
+++ b/lifecycle/viewmodel/src/test/java/android/arch/lifecycle/ViewModelProviderTest.java
@@ -21,6 +21,7 @@
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import android.arch.lifecycle.ViewModelProvider.NewInstanceFactory;
+import android.support.annotation.NonNull;
 
 import org.junit.Assert;
 import org.junit.Before;
@@ -72,6 +73,7 @@
     public void testOwnedBy() {
         final ViewModelStore store = new ViewModelStore();
         ViewModelStoreOwner owner = new ViewModelStoreOwner() {
+            @NonNull
             @Override
             public ViewModelStore getViewModelStore() {
                 return store;
diff --git a/samples/SupportCarDemos/src/main/java/com/example/androidx/car/ListItemActivity.java b/samples/SupportCarDemos/src/main/java/com/example/androidx/car/ListItemActivity.java
index d270860..6594928 100644
--- a/samples/SupportCarDemos/src/main/java/com/example/androidx/car/ListItemActivity.java
+++ b/samples/SupportCarDemos/src/main/java/com/example/androidx/car/ListItemActivity.java
@@ -227,6 +227,14 @@
                     .withBody("Only body - no title. " + mContext.getString(R.string.long_text))
                     .build());
 
+            mItems.add(new ListItem.Builder(mContext)
+                    .withTitle("Switch - initially unchecked")
+                    .withSwitch(false, true, (button, isChecked) -> {
+                        Toast.makeText(mContext,
+                                isChecked ? "checked" : "unchecked", Toast.LENGTH_SHORT).show();
+                    })
+                    .build());
+
             mListProvider = new ListItemProvider.ListProvider(mItems);
         }
 
diff --git a/samples/SupportCarDemos/src/main/res/values/themes.xml b/samples/SupportCarDemos/src/main/res/values/themes.xml
index e2da9a6..068da60 100644
--- a/samples/SupportCarDemos/src/main/res/values/themes.xml
+++ b/samples/SupportCarDemos/src/main/res/values/themes.xml
@@ -18,6 +18,7 @@
     <!-- The main theme for all activities within the Car Demo. -->
     <style name="CarTheme" parent="android:Theme.Material.Light">
         <item name="android:windowBackground">@color/car_grey_50</item>
+        <item name="android:windowLightStatusBar">true</item>
         <item name="android:colorAccent">@color/car_yellow_500</item>
         <item name="android:colorPrimary">@color/car_highlight</item>
         <item name="android:colorPrimaryDark">@color/car_grey_300</item>
@@ -26,6 +27,6 @@
         <item name="android:progressBarStyleHorizontal">
             @style/Widget.Car.ProgressBar.Horizontal
         </item>
-        <item name="android:windowLightStatusBar">true</item>
+        <item name="android:colorControlActivated">@color/car_accent</item>
     </style>
 </resources>
diff --git a/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
index facf071..c0a7a61 100644
--- a/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
+++ b/samples/SupportSliceDemos/src/main/java/com/example/androidx/slice/demos/SampleSliceProvider.java
@@ -274,11 +274,14 @@
 
     private PendingIntent getBroadcastIntent(String action, String message) {
         Intent intent = new Intent(action);
+        intent.setClass(getContext(), SliceBroadcastReceiver.class);
+        // Ensure a new PendingIntent is created for each message.
+        int requestCode = 0;
         if (message != null) {
             intent.putExtra(EXTRA_TOAST_MESSAGE, message);
+            requestCode = message.hashCode();
         }
-        intent.setClass(getContext(), SliceBroadcastReceiver.class);
-        return PendingIntent.getBroadcast(getContext(), 0, intent,
-                PendingIntent.FLAG_CANCEL_CURRENT);
+        return PendingIntent.getBroadcast(getContext(), requestCode, intent,
+                PendingIntent.FLAG_UPDATE_CURRENT);
     }
 }
diff --git a/transition/src/main/java/android/support/transition/TransitionSet.java b/transition/src/main/java/android/support/transition/TransitionSet.java
index 404245a..12113e7 100644
--- a/transition/src/main/java/android/support/transition/TransitionSet.java
+++ b/transition/src/main/java/android/support/transition/TransitionSet.java
@@ -51,7 +51,7 @@
  * transition on the affected view targets:</p>
  * <pre>
  *     &lt;transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
- *             android:ordering="sequential"&gt;
+ *             android:transitionOrdering="sequential"&gt;
  *         &lt;fade/&gt;
  *         &lt;changeBounds/&gt;
  *     &lt;/transitionSet&gt;
diff --git a/wear/build.gradle b/wear/build.gradle
index 4878dab..2eccacb 100644
--- a/wear/build.gradle
+++ b/wear/build.gradle
@@ -10,8 +10,8 @@
     api(project(":support-annotations"))
     api(project(":support-core-ui"))
     api(project(":support-fragment"))
-    api(project(":percent"))
     api(project(":recyclerview-v7"))
+    api(CONSTRAINT_LAYOUT)
 
     androidTestImplementation(TEST_RUNNER)
     androidTestImplementation(ESPRESSO_CORE)
diff --git a/wear/res/layout/ws_single_page_nav_drawer_1_item.xml b/wear/res/layout/ws_single_page_nav_drawer_1_item.xml
index 550d737..fd5a19f 100644
--- a/wear/res/layout/ws_single_page_nav_drawer_1_item.xml
+++ b/wear/res/layout/ws_single_page_nav_drawer_1_item.xml
@@ -13,8 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
@@ -22,12 +23,13 @@
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_0"
         android:layout_centerInParent="true"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-    <TextView
-        android:id="@+id/ws_nav_drawer_text"
-        android:layout_below="@id/ws_nav_drawer_icon_0"
-        style="@style/WsSinglePageNavDrawerTextStyle"/>
+    <include layout="@layout/ws_single_page_nav_drawer_text" />
 
-</android.support.percent.PercentRelativeLayout>
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/layout/ws_single_page_nav_drawer_2_item.xml b/wear/res/layout/ws_single_page_nav_drawer_2_item.xml
index 63dbbe6..9868eba 100644
--- a/wear/res/layout/ws_single_page_nav_drawer_2_item.xml
+++ b/wear/res/layout/ws_single_page_nav_drawer_2_item.xml
@@ -13,18 +13,28 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
 
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_2_items_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_2_items_end"
+        style="@style/WsVerticalGuideStyle" />
+
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_0"
-        android:layout_alignParentStart="true"
-        android:layout_centerVertical="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_2_items"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_start"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
@@ -32,13 +42,12 @@
         android:id="@+id/ws_nav_drawer_icon_1"
         android:layout_alignParentEnd="true"
         android:layout_centerVertical="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_2_items"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_end"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-    <TextView
-        android:id="@+id/ws_nav_drawer_text"
-        android:layout_below="@id/ws_nav_drawer_icon_1"
-        style="@style/WsSinglePageNavDrawerTextStyle"/>
+    <include layout="@layout/ws_single_page_nav_drawer_text" />
 
-</android.support.percent.PercentRelativeLayout>
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/layout/ws_single_page_nav_drawer_3_item.xml b/wear/res/layout/ws_single_page_nav_drawer_3_item.xml
index 209ec16..211b741 100644
--- a/wear/res/layout/ws_single_page_nav_drawer_3_item.xml
+++ b/wear/res/layout/ws_single_page_nav_drawer_3_item.xml
@@ -13,38 +13,48 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
 
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_3_items_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_3_items_end"
+        style="@style/WsVerticalGuideStyle" />
+
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_0"
-        android:layout_alignParentStart="true"
-        android:layout_centerVertical="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_3_items"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_start"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_1"
-        android:layout_centerInParent="true"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_2"
-        android:layout_alignParentEnd="true"
-        android:layout_centerVertical="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_3_items"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_end"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-    <TextView
-        android:id="@+id/ws_nav_drawer_text"
-        android:layout_below="@id/ws_nav_drawer_icon_2"
-        style="@style/WsSinglePageNavDrawerTextStyle"/>
+    <include layout="@layout/ws_single_page_nav_drawer_text" />
 
-</android.support.percent.PercentRelativeLayout>
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/layout/ws_single_page_nav_drawer_4_item.xml b/wear/res/layout/ws_single_page_nav_drawer_4_item.xml
index 1b2c163..6969915 100644
--- a/wear/res/layout/ws_single_page_nav_drawer_4_item.xml
+++ b/wear/res/layout/ws_single_page_nav_drawer_4_item.xml
@@ -13,46 +13,61 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
 
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_4_items_top"
+        style="@style/WsHorizontalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_4_items_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_4_items_end"
+        style="@style/WsVerticalGuideStyle" />
+
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_0"
-        android:layout_alignParentTop="true"
-        android:layout_centerHorizontal="true"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_4_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_1"
-        android:layout_alignParentStart="true"
-        android:layout_centerVertical="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_4_items_horizontal"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="parent"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_2"
-        android:layout_centerInParent="true"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_3"
-        android:layout_alignParentEnd="true"
-        android:layout_centerVertical="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_4_items_horizontal"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toTopOf="parent"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-    <TextView
-        android:id="@+id/ws_nav_drawer_text"
-        android:layout_below="@id/ws_nav_drawer_icon_3"
-        style="@style/WsSinglePageNavDrawerTextStyle"/>
+    <include layout="@layout/ws_single_page_nav_drawer_text" />
 
-</android.support.percent.PercentRelativeLayout>
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/layout/ws_single_page_nav_drawer_5_item.xml b/wear/res/layout/ws_single_page_nav_drawer_5_item.xml
index 699533d..047ec52 100644
--- a/wear/res/layout/ws_single_page_nav_drawer_5_item.xml
+++ b/wear/res/layout/ws_single_page_nav_drawer_5_item.xml
@@ -13,56 +13,77 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
 
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_5_items_top"
+        style="@style/WsHorizontalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top_row_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_5_items_top_row_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top_row_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_5_items_top_row_end"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_middle_row_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_5_items_middle_row_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_middle_row_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_5_items_middle_row_end"
+        style="@style/WsVerticalGuideStyle" />
+
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_0"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_5_items_horizontal_outer_rows"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_5_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_top_row_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle"/>
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_1"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentTop="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_5_items_horizontal_outer_rows"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_5_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_top_row_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_2"
-        android:layout_alignParentStart="true"
-        android:layout_centerVertical="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_5_items_horizontal_middle_row"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_middle_row_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_3"
-        android:layout_centerInParent="true"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_4"
-        android:layout_alignParentEnd="true"
-        android:layout_centerVertical="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_5_items_horizontal_middle_row"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_middle_row_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-    <TextView
-        android:id="@+id/ws_nav_drawer_text"
-        android:layout_below="@id/ws_nav_drawer_icon_4"
-        style="@style/WsSinglePageNavDrawerTextStyle"/>
+    <include layout="@layout/ws_single_page_nav_drawer_text" />
 
-</android.support.percent.PercentRelativeLayout>
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/layout/ws_single_page_nav_drawer_6_item.xml b/wear/res/layout/ws_single_page_nav_drawer_6_item.xml
index 00625a1..62cb8bf 100644
--- a/wear/res/layout/ws_single_page_nav_drawer_6_item.xml
+++ b/wear/res/layout/ws_single_page_nav_drawer_6_item.xml
@@ -13,64 +13,75 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
 
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_6_items_top"
+        style="@style/WsHorizontalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_bottom"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_6_items_bottom"
+        style="@style/WsHorizontalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_6_items_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_6_items_end"
+        style="@style/WsVerticalGuideStyle" />
+
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_0"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_6_items_horizontal"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_6_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_1"
-        android:layout_centerHorizontal="true"
-        android:layout_alignParentTop="true"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_6_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_2"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentTop="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_6_items_horizontal"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_6_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_3"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentBottom="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_6_items_horizontal"
-        app:layout_marginBottomPercent="@fraction/ws_nav_drawer_margin_6_items_vertical"
+        app:layout_constraintBottom_toBottomOf="@id/ws_nav_drawer_guide_bottom"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_4"
-        android:layout_centerHorizontal="true"
-        android:layout_alignParentBottom="true"
-        app:layout_marginBottomPercent="@fraction/ws_nav_drawer_margin_6_items_vertical"
+        app:layout_constraintBottom_toBottomOf="@id/ws_nav_drawer_guide_bottom"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_5"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentBottom="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_6_items_horizontal"
-        app:layout_marginBottomPercent="@fraction/ws_nav_drawer_margin_6_items_vertical"
+        app:layout_constraintBottom_toBottomOf="@id/ws_nav_drawer_guide_bottom"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-</android.support.percent.PercentRelativeLayout>
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/layout/ws_single_page_nav_drawer_7_item.xml b/wear/res/layout/ws_single_page_nav_drawer_7_item.xml
index 5daef22..1e6eb8c 100644
--- a/wear/res/layout/ws_single_page_nav_drawer_7_item.xml
+++ b/wear/res/layout/ws_single_page_nav_drawer_7_item.xml
@@ -13,69 +13,94 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:clipChildren="false">
 
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_7_items_top"
+        style="@style/WsHorizontalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_bottom"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_7_items_bottom"
+        style="@style/WsHorizontalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top_bottom_row_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_7_items_top_bottom_row_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_top_bottom_row_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_7_items_top_bottom_row_end"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_middle_row_start"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_7_items_middle_row_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_guide_middle_row_end"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_margin_7_items_middle_row_end"
+        style="@style/WsVerticalGuideStyle" />
+
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_0"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentTop="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_7_items_horizontal_outer_rows"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_7_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_top_bottom_row_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_1"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentTop="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_7_items_horizontal_outer_rows"
-        app:layout_marginTopPercent="@fraction/ws_nav_drawer_margin_7_items_vertical"
+        app:layout_constraintTop_toTopOf="@id/ws_nav_drawer_guide_top"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_top_bottom_row_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_2"
-        android:layout_alignParentStart="true"
-        android:layout_centerVertical="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_7_items_horizontal_middle_row"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_middle_row_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_3"
-        android:layout_centerInParent="true"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_4"
-        android:layout_alignParentEnd="true"
-        android:layout_centerVertical="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_7_items_horizontal_middle_row"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_middle_row_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_5"
-        android:layout_alignParentStart="true"
-        android:layout_alignParentBottom="true"
-        app:layout_marginStartPercent="@fraction/ws_nav_drawer_margin_7_items_horizontal_outer_rows"
-        app:layout_marginBottomPercent="@fraction/ws_nav_drawer_margin_7_items_vertical"
+        app:layout_constraintBottom_toBottomOf="@id/ws_nav_drawer_guide_bottom"
+        app:layout_constraintStart_toStartOf="@id/ws_nav_drawer_guide_top_bottom_row_start"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
     <android.support.wear.widget.CircledImageView
         android:id="@+id/ws_nav_drawer_icon_6"
-        android:layout_alignParentEnd="true"
-        android:layout_alignParentBottom="true"
-        app:layout_marginEndPercent="@fraction/ws_nav_drawer_margin_7_items_horizontal_outer_rows"
-        app:layout_marginBottomPercent="@fraction/ws_nav_drawer_margin_7_items_vertical"
+        app:layout_constraintBottom_toBottomOf="@id/ws_nav_drawer_guide_bottom"
+        app:layout_constraintEnd_toEndOf="@id/ws_nav_drawer_guide_top_bottom_row_end"
         tools:ignore="ContentDescription"
         style="@style/WsSinglePageNavDrawerIconStyle" />
 
-</android.support.percent.PercentRelativeLayout>
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/layout/ws_single_page_nav_drawer_text.xml b/wear/res/layout/ws_single_page_nav_drawer_text.xml
new file mode 100644
index 0000000..58f2b85
--- /dev/null
+++ b/wear/res/layout/ws_single_page_nav_drawer_text.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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.
+  -->
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    tools:showIn="@layout/ws_single_page_nav_drawer_5_item">
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_nav_drawer_text_guide"
+        app:layout_constraintGuide_percent="@dimen/ws_nav_drawer_text_guide"
+        style="@style/WsHorizontalGuideStyle" />
+
+    <TextView
+        android:id="@+id/ws_nav_drawer_text"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:fontFamily="sans-serif-condensed"
+        android:textSize="@dimen/ws_nav_drawer_text_size"
+        android:gravity="center"
+        android:maxLines="2"
+        android:textColor="?android:attr/textColorPrimary"
+        android:layout_marginTop="@dimen/ws_nav_drawer_single_page_half_icon_size"
+        app:layout_constraintTop_toBottomOf="@id/ws_nav_drawer_text_guide" />
+</merge>
\ No newline at end of file
diff --git a/wear/res/values-sw210dp/dimens.xml b/wear/res/values-sw210dp/dimens.xml
index 8f69e0b..07cd3b4 100644
--- a/wear/res/values-sw210dp/dimens.xml
+++ b/wear/res/values-sw210dp/dimens.xml
@@ -16,6 +16,7 @@
 <resources>
 
     <dimen name="ws_nav_drawer_text_size">14sp</dimen>
+    <dimen name="ws_nav_drawer_single_page_half_icon_size">16dp</dimen>
     <dimen name="ws_nav_drawer_single_page_icon_size">32dp</dimen>
     <dimen name="ws_nav_drawer_single_page_circle_radius">27dp</dimen>
 
diff --git a/wear/res/values/dimens.xml b/wear/res/values/dimens.xml
index 26d6c0a..9ae13bb 100644
--- a/wear/res/values/dimens.xml
+++ b/wear/res/values/dimens.xml
@@ -36,23 +36,34 @@
     <dimen name="ws_action_drawer_expand_icon_top_margin">-3dp</dimen>
 
     <!-- Dimensions for the single page WearableNavigationDrawerView. -->
+    <dimen name="ws_nav_drawer_single_page_half_icon_size">14dp</dimen>
     <dimen name="ws_nav_drawer_single_page_icon_size">28dp</dimen>
     <dimen name="ws_nav_drawer_single_page_icon_padding">6dp</dimen>
     <dimen name="ws_nav_drawer_single_page_circle_radius">24dp</dimen>
     <dimen name="ws_nav_drawer_text_size">12sp</dimen>
-    <fraction name="ws_nav_drawer_text_margin">13%</fraction>
-    <fraction name="ws_nav_drawer_margin_2_items">20%</fraction>
-    <fraction name="ws_nav_drawer_margin_3_items">16%</fraction>
-    <fraction name="ws_nav_drawer_margin_4_items_vertical">16.9%</fraction>
-    <fraction name="ws_nav_drawer_margin_4_items_horizontal">13%</fraction>
-    <fraction name="ws_nav_drawer_margin_5_items_horizontal_outer_rows">27.4%</fraction>
-    <fraction name="ws_nav_drawer_margin_5_items_horizontal_middle_row">13%</fraction>
-    <fraction name="ws_nav_drawer_margin_5_items_vertical">16.9%</fraction>
-    <fraction name="ws_nav_drawer_margin_6_items_horizontal">16%</fraction>
-    <fraction name="ws_nav_drawer_margin_6_items_vertical">26.8%</fraction>
-    <fraction name="ws_nav_drawer_margin_7_items_horizontal_outer_rows">27.4%</fraction>
-    <fraction name="ws_nav_drawer_margin_7_items_horizontal_middle_row">13%</fraction>
-    <fraction name="ws_nav_drawer_margin_7_items_vertical">16.9%</fraction>
+    <item name="ws_nav_drawer_text_guide" format="float" type="dimen">0.63</item>
+    <item name="ws_nav_drawer_margin_2_items_start" format="float" type="dimen">.2</item>
+    <item name="ws_nav_drawer_margin_2_items_end" format="float" type="dimen">.8</item>
+    <item name="ws_nav_drawer_margin_3_items_start" format="float" type="dimen">.16</item>
+    <item name="ws_nav_drawer_margin_3_items_end" format="float" type="dimen">.84</item>
+    <item name="ws_nav_drawer_margin_4_items_top" format="float" type="dimen">.169</item>
+    <item name="ws_nav_drawer_margin_4_items_start" format="float" type="dimen">.13</item>
+    <item name="ws_nav_drawer_margin_4_items_end" format="float" type="dimen">.87</item>
+    <item name="ws_nav_drawer_margin_5_items_top" format="float" type="dimen">.169</item>
+    <item name="ws_nav_drawer_margin_5_items_top_row_start" format="float" type="dimen">.274</item>
+    <item name="ws_nav_drawer_margin_5_items_top_row_end" format="float" type="dimen">.726</item>
+    <item name="ws_nav_drawer_margin_5_items_middle_row_start" format="float" type="dimen">.13</item>
+    <item name="ws_nav_drawer_margin_5_items_middle_row_end" format="float" type="dimen">.87</item>
+    <item name="ws_nav_drawer_margin_6_items_top" format="float" type="dimen">.268</item>
+    <item name="ws_nav_drawer_margin_6_items_bottom" format="float" type="dimen">.732</item>
+    <item name="ws_nav_drawer_margin_6_items_start" format="float" type="dimen">.16</item>
+    <item name="ws_nav_drawer_margin_6_items_end" format="float" type="dimen">.84</item>
+    <item name="ws_nav_drawer_margin_7_items_top" format="float" type="dimen">.169</item>
+    <item name="ws_nav_drawer_margin_7_items_bottom" format="float" type="dimen">.831</item>
+    <item name="ws_nav_drawer_margin_7_items_top_bottom_row_start" format="float" type="dimen">.274</item>
+    <item name="ws_nav_drawer_margin_7_items_top_bottom_row_end" format="float" type="dimen">.726</item>
+    <item name="ws_nav_drawer_margin_7_items_middle_row_start" format="float" type="dimen">.13</item>
+    <item name="ws_nav_drawer_margin_7_items_middle_row_end" format="float" type="dimen">.87</item>
 
     <dimen name="ws_peek_view_top_padding">8dp</dimen>
     <dimen name="ws_peek_view_bottom_padding">8dp</dimen>
diff --git a/wear/res/values/styles.xml b/wear/res/values/styles.xml
index 5af7e6f..1908946 100644
--- a/wear/res/values/styles.xml
+++ b/wear/res/values/styles.xml
@@ -22,17 +22,15 @@
         <item name="background_radius">@dimen/ws_nav_drawer_single_page_circle_radius</item>
         <item name="background_color">#33ffffff</item>
     </style>
-    <style name="WsSinglePageNavDrawerTextStyle">
+    <style name="WsVerticalGuideStyle">
+        <item name="android:layout_width">wrap_content</item>
         <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_width">match_parent</item>
-        <item name="android:fontFamily">sans-serif-condensed</item>
-        <item name="android:textSize">@dimen/ws_nav_drawer_text_size</item>
-        <item name="android:gravity">center</item>
-        <item name="android:maxLines">2</item>
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
-        <item name="layout_marginTopPercent">@fraction/ws_nav_drawer_text_margin</item>
-        <item name="layout_marginStartPercent">@fraction/ws_nav_drawer_text_margin</item>
-        <item name="layout_marginEndPercent">@fraction/ws_nav_drawer_text_margin</item>
+        <item name="android:orientation">vertical</item>
+    </style>
+    <style name="WsHorizontalGuideStyle">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:orientation">horizontal</item>
     </style>
     <style name="Widget.Wear.WearableDrawerView" parent="">
         <item name="android:elevation">@dimen/ws_wearable_drawer_view_elevation</item>
