Merge "Fixes setting a toggle as a primary action"
diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle
index b89ffba..f028c0d 100644
--- a/buildSrc/build.gradle
+++ b/buildSrc/build.gradle
@@ -40,7 +40,7 @@
 dependencies {
     compile build_libs.gradle
     compile build_libs.jacoco
-    compile build_libs.error_prone
+    compile build_libs.error_prone_gradle
     compile build_libs.jarjar_gradle
     compile gradleApi()
     testCompile "junit:junit:4.12"
diff --git a/buildSrc/build_dependencies.gradle b/buildSrc/build_dependencies.gradle
index 73cdf37..eb414dd 100644
--- a/buildSrc/build_dependencies.gradle
+++ b/buildSrc/build_dependencies.gradle
@@ -34,7 +34,7 @@
 
 // jarjar plugin
 build_libs.jarjar_gradle = 'org.anarres.jarjar:jarjar-gradle:1.0.0'
-build_libs.error_prone = 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.13'
+build_libs.error_prone_gradle = 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.13'
 build_libs.jacoco = 'org.jacoco:org.jacoco.core:0.7.8'
 build_libs.jacoco_ant = 'org.jacoco:org.jacoco.ant:0.7.8'
 build_libs.jetifier = 'androidx.tools.jetifier:gradle-plugin:0.1'
diff --git a/buildSrc/src/main/kotlin/android/support/ErrorProneConfiguration.kt b/buildSrc/src/main/kotlin/android/support/ErrorProneConfiguration.kt
index 55f010f..74f0505 100644
--- a/buildSrc/src/main/kotlin/android/support/ErrorProneConfiguration.kt
+++ b/buildSrc/src/main/kotlin/android/support/ErrorProneConfiguration.kt
@@ -19,6 +19,8 @@
 import net.ltgt.gradle.errorprone.ErrorProneToolChain
 import org.gradle.api.tasks.compile.JavaCompile
 
+const val ERROR_PRONE_VERSION = "com.google.errorprone:error_prone_core:2.2.0"
+
 fun JavaCompile.configureWithErrorProne(toolChain: ErrorProneToolChain) {
     this.toolChain = toolChain
 
diff --git a/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt b/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt
index d2fac6a..6db309e 100644
--- a/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt
+++ b/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt
@@ -137,6 +137,7 @@
         setUpSoureJarTaskForAndroidProject(project, library)
 
         val toolChain = ErrorProneToolChain.create(project)
+        project.dependencies.add("errorprone", ERROR_PRONE_VERSION)
         library.buildTypes.create("errorProne")
         library.libraryVariants.all { libraryVariant ->
             if (libraryVariant.getBuildType().getName().equals("errorProne")) {
diff --git a/buildSrc/src/main/kotlin/android/support/SupportAndroidTestAppPlugin.kt b/buildSrc/src/main/kotlin/android/support/SupportAndroidTestAppPlugin.kt
index cec3629..1604bbe 100644
--- a/buildSrc/src/main/kotlin/android/support/SupportAndroidTestAppPlugin.kt
+++ b/buildSrc/src/main/kotlin/android/support/SupportAndroidTestAppPlugin.kt
@@ -72,6 +72,7 @@
         }
 
         val toolChain = ErrorProneToolChain.create(project)
+        project.dependencies.add("errorprone", ERROR_PRONE_VERSION)
 
         project.afterEvaluate {
             if (testAppExtension.enableErrorProne) {
diff --git a/buildSrc/src/main/kotlin/android/support/SupportJavaLibraryPlugin.kt b/buildSrc/src/main/kotlin/android/support/SupportJavaLibraryPlugin.kt
index f37bf03..f3651ab 100644
--- a/buildSrc/src/main/kotlin/android/support/SupportJavaLibraryPlugin.kt
+++ b/buildSrc/src/main/kotlin/android/support/SupportJavaLibraryPlugin.kt
@@ -50,6 +50,7 @@
 
         project.apply(mapOf("plugin" to ErrorProneBasePlugin::class.java))
         val toolChain = ErrorProneToolChain.create(project)
+        project.dependencies.add("errorprone", ERROR_PRONE_VERSION)
         val compileTasks = project.tasks.withType(JavaCompile::class.java)
         compileTasks.all { it.configureWithErrorProne(toolChain) }
 
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 d9894a8..0940235 100644
--- a/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
+++ b/lifecycle/extensions/src/main/java/android/arch/lifecycle/ViewModelProviders.java
@@ -21,6 +21,7 @@
 import android.arch.lifecycle.ViewModelProvider.Factory;
 import android.support.annotation.MainThread;
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentActivity;
 
@@ -65,10 +66,7 @@
     @NonNull
     @MainThread
     public static ViewModelProvider of(@NonNull Fragment fragment) {
-        ViewModelProvider.AndroidViewModelFactory factory =
-                ViewModelProvider.AndroidViewModelFactory.getInstance(
-                        checkApplication(checkActivity(fragment)));
-        return new ViewModelProvider(ViewModelStores.of(fragment), factory);
+        return of(fragment, null);
     }
 
     /**
@@ -83,10 +81,7 @@
     @NonNull
     @MainThread
     public static ViewModelProvider of(@NonNull FragmentActivity activity) {
-        ViewModelProvider.AndroidViewModelFactory factory =
-                ViewModelProvider.AndroidViewModelFactory.getInstance(
-                        checkApplication(activity));
-        return new ViewModelProvider(ViewModelStores.of(activity), factory);
+        return of(activity, null);
     }
 
     /**
@@ -101,8 +96,11 @@
      */
     @NonNull
     @MainThread
-    public static ViewModelProvider of(@NonNull Fragment fragment, @NonNull Factory factory) {
-        checkApplication(checkActivity(fragment));
+    public static ViewModelProvider of(@NonNull Fragment fragment, @Nullable Factory factory) {
+        Application application = checkApplication(checkActivity(fragment));
+        if (factory == null) {
+            factory = ViewModelProvider.AndroidViewModelFactory.getInstance(application);
+        }
         return new ViewModelProvider(ViewModelStores.of(fragment), factory);
     }
 
@@ -119,8 +117,11 @@
     @NonNull
     @MainThread
     public static ViewModelProvider of(@NonNull FragmentActivity activity,
-            @NonNull Factory factory) {
-        checkApplication(activity);
+            @Nullable Factory factory) {
+        Application application = checkApplication(activity);
+        if (factory == null) {
+            factory = ViewModelProvider.AndroidViewModelFactory.getInstance(application);
+        }
         return new ViewModelProvider(ViewModelStores.of(activity), factory);
     }
 
diff --git a/slices/builders/api/current.txt b/slices/builders/api/current.txt
index 9374c11..15b248b 100644
--- a/slices/builders/api/current.txt
+++ b/slices/builders/api/current.txt
@@ -98,9 +98,9 @@
     method public java.lang.CharSequence getTitle();
     method public boolean isChecked();
     method public boolean isToggle();
-    method public void setChecked(boolean);
-    method public void setContentDescription(java.lang.CharSequence);
-    method public void setPriority(int);
+    method public androidx.app.slice.builders.SliceAction setChecked(boolean);
+    method public androidx.app.slice.builders.SliceAction setContentDescription(java.lang.CharSequence);
+    method public androidx.app.slice.builders.SliceAction setPriority(int);
   }
 
   public abstract class TemplateSliceBuilder {
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/ListBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/ListBuilder.java
index b17a286..b7ba1b8 100644
--- a/slices/builders/src/main/java/androidx/app/slice/builders/ListBuilder.java
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/ListBuilder.java
@@ -733,7 +733,7 @@
         }
 
         /**
-         * Sets the action to activate when the header is activated.
+         * Sets the action to invoke when the header is activated.
          */
         @NonNull
         public HeaderBuilder setPrimaryAction(@NonNull SliceAction action) {
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/SliceAction.java b/slices/builders/src/main/java/androidx/app/slice/builders/SliceAction.java
index 0831ac0..57d289b 100644
--- a/slices/builders/src/main/java/androidx/app/slice/builders/SliceAction.java
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/SliceAction.java
@@ -99,23 +99,26 @@
      * @param description the content description for this action.
      */
     @Nullable
-    public void setContentDescription(@NonNull CharSequence description) {
+    public SliceAction setContentDescription(@NonNull CharSequence description) {
         mContentDescription = description;
+        return this;
     }
 
     /**
      * @param isChecked whether the state of this action is checked or not; only used for toggle
      *                  actions.
      */
-    public void setChecked(boolean isChecked) {
+    public SliceAction setChecked(boolean isChecked) {
         mIsChecked = isChecked;
+        return this;
     }
 
     /**
      * Sets the priority of this action, with the lowest priority having the highest ranking.
      */
-    public void setPriority(@IntRange(from = 0) int priority) {
+    public SliceAction setPriority(@IntRange(from = 0) int priority) {
         mPriority = priority;
+        return this;
     }
 
     /**
diff --git a/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilder.java b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilder.java
index 72b37a3..7291143 100644
--- a/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilder.java
+++ b/slices/builders/src/main/java/androidx/app/slice/builders/impl/ListBuilder.java
@@ -292,8 +292,7 @@
         void setSummarySubtitle(CharSequence summarySubtitle);
 
         /**
-         * Sets the pending intent to activate when the header is activated.
-         * @param action
+         * Sets the action to invoke when the header is activated.
          */
         void setPrimaryAction(SliceAction action);
     }
diff --git a/v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuItemView.java b/v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuItemView.java
index 92513dd..0b5cb48 100644
--- a/v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuItemView.java
+++ b/v7/appcompat/src/main/java/android/support/v7/view/menu/ListMenuItemView.java
@@ -339,13 +339,15 @@
     public void setGroupDividerEnabled(boolean groupDividerEnabled) {
         // If mHasListDivider is true, disabling the groupDivider.
         // Otherwise, checking enbling it according to groupDividerEnabled flag.
-        mGroupDivider.setVisibility(!mHasListDivider
-                && groupDividerEnabled ? View.VISIBLE : View.GONE);
+        if (mGroupDivider != null) {
+            mGroupDivider.setVisibility(!mHasListDivider
+                    && groupDividerEnabled ? View.VISIBLE : View.GONE);
+        }
     }
 
     @Override
     public void adjustListItemSelectionBounds(Rect rect) {
-        if (mGroupDivider.getVisibility() == View.VISIBLE) {
+        if (mGroupDivider != null && mGroupDivider.getVisibility() == View.VISIBLE) {
             // groupDivider is a part of ListMenuItemView.
             // If ListMenuItem with divider enabled is hovered/clicked, divider also gets selected.
             // Clipping the selector bounds from the top divider portion when divider is enabled,
diff --git a/wear/res/layout/ws_action_drawer_title_view.xml b/wear/res/layout/ws_action_drawer_title_view.xml
index 15067dd..565e770 100644
--- a/wear/res/layout/ws_action_drawer_title_view.xml
+++ b/wear/res/layout/ws_action_drawer_title_view.xml
@@ -13,11 +13,29 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<TextView
+<android.support.constraint.ConstraintLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/ws_action_drawer_title"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
-    android:layout_height="@dimen/ws_action_drawer_item_icon_size"
-    android:layout_gravity="center"
-    android:gravity="center|bottom"
-    style="@style/WsWearableActionDrawerTitleText" />
+    android:layout_height="wrap_content">
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_action_drawer_guide_end"
+        app:layout_constraintGuide_percent="@dimen/ws_action_drawer_title_end"
+        style="@style/WsVerticalGuideStyle" />
+
+    <android.support.constraint.Guideline
+        android:id="@+id/ws_action_drawer_guide_start"
+        app:layout_constraintGuide_percent="@dimen/ws_action_drawer_title_start"
+        style="@style/WsVerticalGuideStyle" />
+
+    <TextView
+        android:id="@+id/ws_action_drawer_title"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        app:layout_constraintEnd_toEndOf="@id/ws_action_drawer_guide_end"
+        app:layout_constraintStart_toStartOf="@id/ws_action_drawer_guide_start"
+        style="@style/WsWearableActionDrawerTitleText" />
+
+</android.support.constraint.ConstraintLayout>
diff --git a/wear/res/values/dimens.xml b/wear/res/values/dimens.xml
index 9ae13bb..7cd5d20 100644
--- a/wear/res/values/dimens.xml
+++ b/wear/res/values/dimens.xml
@@ -25,6 +25,8 @@
     <item name="ws_action_drawer_item_last_item_bottom_padding" type="fraction">15%</item>
     <item name="ws_action_drawer_item_left_padding" type="fraction">15%</item>
     <item name="ws_action_drawer_item_right_padding" type="fraction">10%</item>
+    <item name="ws_action_drawer_title_start" format="float" type="dimen">.15</item>
+    <item name="ws_action_drawer_title_end" format="float" type="dimen">.85</item>
     <dimen name="ws_action_drawer_item_top_padding">8dp</dimen>
     <dimen name="ws_action_drawer_item_bottom_padding">8dp</dimen>
     <dimen name="ws_action_drawer_item_icon_right_margin">8dp</dimen>
diff --git a/wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerView.java b/wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerView.java
index 99cd4ff..b48962d 100644
--- a/wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerView.java
+++ b/wear/src/main/java/android/support/wear/widget/drawer/WearableActionDrawerView.java
@@ -419,6 +419,7 @@
                 holder.iconView.setImageDrawable(icon);
             } else if (viewHolder instanceof TitleViewHolder) {
                 TitleViewHolder holder = (TitleViewHolder) viewHolder;
+                holder.textView.setPadding(0, mFirstItemTopPadding, 0, mBottomPadding);
                 holder.textView.setText(mTitle);
             }
         }