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);
}
}