summaryrefslogtreecommitdiff
path: root/library/recyclerview
diff options
context:
space:
mode:
authorMaurice Lam <yukl@google.com>2017-04-25 19:16:09 -0700
committerMaurice Lam <yukl@google.com>2017-04-25 20:05:03 -0700
commit6011b35deae30839cd454e0ec5866487e90860f5 (patch)
tree14593ed645f53af3130273eba9f2e6c15bd7e743 /library/recyclerview
parentc9abaa5461d2757893be00d2ce34672d96b135bb (diff)
downloadsetupwizard-6011b35deae30839cd454e0ec5866487e90860f5.tar.gz
Allow setting DividerInsetEnd
- Added XML attribute suwDividerInsetEnd, and replaced suwDividerInset with suwDividerInsetStart. - Modified the themes so that the divider insets are set automatically. If the activity uses GLIF (v1) or material, and the list does not have icons, it should set app:suwDividerInsetStart="?attr/suwDividerInsetStartNoIcon" in the Glif[Recycler/List]Layout Test: ./gradlew connectedAndroidTest test Bug: 37677772 Change-Id: Ia4cb9954dd7e3c59cbc72db8937989557689061b
Diffstat (limited to 'library/recyclerview')
-rw-r--r--library/recyclerview/res/values/attrs.xml2
-rw-r--r--library/recyclerview/src/com/android/setupwizardlib/DividerItemDecoration.java2
-rw-r--r--library/recyclerview/src/com/android/setupwizardlib/GlifRecyclerLayout.java26
-rw-r--r--library/recyclerview/src/com/android/setupwizardlib/SetupWizardRecyclerLayout.java36
-rw-r--r--library/recyclerview/src/com/android/setupwizardlib/template/RecyclerMixin.java57
-rw-r--r--library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/template/RecyclerMixinTest.java41
-rw-r--r--library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/GlifRecyclerLayoutTest.java18
-rw-r--r--library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/SetupWizardRecyclerLayoutTest.java18
8 files changed, 177 insertions, 23 deletions
diff --git a/library/recyclerview/res/values/attrs.xml b/library/recyclerview/res/values/attrs.xml
index e4fb41f..a098d5a 100644
--- a/library/recyclerview/res/values/attrs.xml
+++ b/library/recyclerview/res/values/attrs.xml
@@ -28,6 +28,8 @@
<declare-styleable name="SuwRecyclerMixin">
<attr name="android:entries" />
<attr name="suwDividerInset" />
+ <attr name="suwDividerInsetEnd" />
+ <attr name="suwDividerInsetStart" />
<attr name="suwHasStableIds" />
</declare-styleable>
diff --git a/library/recyclerview/src/com/android/setupwizardlib/DividerItemDecoration.java b/library/recyclerview/src/com/android/setupwizardlib/DividerItemDecoration.java
index 13010ba..6c1a928 100644
--- a/library/recyclerview/src/com/android/setupwizardlib/DividerItemDecoration.java
+++ b/library/recyclerview/src/com/android/setupwizardlib/DividerItemDecoration.java
@@ -36,7 +36,7 @@ import java.lang.annotation.RetentionPolicy;
* default, and the behavior of whether the divider is shown can be customized by subclassing
* {@link com.android.setupwizardlib.DividerItemDecoration.DividedViewHolder}.
*
- * <p>Modified from v14 PreferenceFragment.DividerDecoration, added with inset capabilities.
+ * <p>Modified from v14 PreferenceFragment.DividerDecoration.
*/
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
diff --git a/library/recyclerview/src/com/android/setupwizardlib/GlifRecyclerLayout.java b/library/recyclerview/src/com/android/setupwizardlib/GlifRecyclerLayout.java
index d1a7947..4f7c88c 100644
--- a/library/recyclerview/src/com/android/setupwizardlib/GlifRecyclerLayout.java
+++ b/library/recyclerview/src/com/android/setupwizardlib/GlifRecyclerLayout.java
@@ -147,20 +147,42 @@ public class GlifRecyclerLayout extends GlifLayout {
}
/**
- * @see RecyclerMixin#setDividerInset(int)
+ * @deprecated Use {@link #setDividerInsets(int, int)} instead.
*/
+ @Deprecated
public void setDividerInset(int inset) {
mRecyclerMixin.setDividerInset(inset);
}
/**
- * @see RecyclerMixin#getDividerInset()
+ * @see RecyclerMixin#setDividerInset(int)
+ */
+ public void setDividerInsets(int start, int end) {
+ mRecyclerMixin.setDividerInsets(start, end);
+ }
+
+ /**
+ * @deprecated Use {@link #getDividerInsetStart()} instead.
*/
public int getDividerInset() {
return mRecyclerMixin.getDividerInset();
}
/**
+ * @see RecyclerMixin#getDividerInsetStart()
+ */
+ public int getDividerInsetStart() {
+ return mRecyclerMixin.getDividerInsetStart();
+ }
+
+ /**
+ * @see RecyclerMixin#getDividerInsetEnd()
+ */
+ public int getDividerInsetEnd() {
+ return mRecyclerMixin.getDividerInsetEnd();
+ }
+
+ /**
* @see RecyclerMixin#getDivider()
*/
public Drawable getDivider() {
diff --git a/library/recyclerview/src/com/android/setupwizardlib/SetupWizardRecyclerLayout.java b/library/recyclerview/src/com/android/setupwizardlib/SetupWizardRecyclerLayout.java
index 870a805..5ff825d 100644
--- a/library/recyclerview/src/com/android/setupwizardlib/SetupWizardRecyclerLayout.java
+++ b/library/recyclerview/src/com/android/setupwizardlib/SetupWizardRecyclerLayout.java
@@ -139,27 +139,51 @@ public class SetupWizardRecyclerLayout extends SetupWizardLayout {
}
/**
+ * @deprecated Use {@link #setDividerInsets(int, int)} instead.
+ */
+ @Deprecated
+ public void setDividerInset(int inset) {
+ mRecyclerMixin.setDividerInset(inset);
+ }
+
+ /**
* Sets the start inset of the divider. This will use the default divider drawable set in the
- * theme and inset it {@code inset} pixels to the right (or left in RTL layouts).
+ * theme and apply insets to it.
*
- * @param inset The number of pixels to inset on the "start" side of the list divider. Typically
+ * @param start The number of pixels to inset on the "start" side of the list divider. Typically
* this will be either {@code @dimen/suw_items_icon_divider_inset} or
* {@code @dimen/suw_items_text_divider_inset}.
+ * @param end The number of pixels to inset on the "end" side of the list divider.
*
- * @see RecyclerMixin#setDividerInset(int)
+ * @see RecyclerMixin#setDividerInsets(int, int)
*/
- public void setDividerInset(int inset) {
- mRecyclerMixin.setDividerInset(inset);
+ public void setDividerInsets(int start, int end) {
+ mRecyclerMixin.setDividerInsets(start, end);
}
/**
- * @see RecyclerMixin#getDividerInset()
+ * @deprecated Use {@link #getDividerInsetStart()} instead.
*/
+ @Deprecated
public int getDividerInset() {
return mRecyclerMixin.getDividerInset();
}
/**
+ * @see RecyclerMixin#getDividerInsetStart()
+ */
+ public int getDividerInsetStart() {
+ return mRecyclerMixin.getDividerInsetStart();
+ }
+
+ /**
+ * @see RecyclerMixin#getDividerInsetEnd()
+ */
+ public int getDividerInsetEnd() {
+ return mRecyclerMixin.getDividerInsetEnd();
+ }
+
+ /**
* @see RecyclerMixin#getDivider()
*/
public Drawable getDivider() {
diff --git a/library/recyclerview/src/com/android/setupwizardlib/template/RecyclerMixin.java b/library/recyclerview/src/com/android/setupwizardlib/template/RecyclerMixin.java
index 56751d4..fa5ac4a 100644
--- a/library/recyclerview/src/com/android/setupwizardlib/template/RecyclerMixin.java
+++ b/library/recyclerview/src/com/android/setupwizardlib/template/RecyclerMixin.java
@@ -63,7 +63,9 @@ public class RecyclerMixin implements Mixin {
private Drawable mDefaultDivider;
private Drawable mDivider;
- private int mDividerInset;
+
+ private int mDividerInsetStart;
+ private int mDividerInsetEnd;
/**
* Creates the RecyclerMixin. Unlike typical mixins which are created in the constructor, this
@@ -112,8 +114,17 @@ public class RecyclerMixin implements Mixin {
setAdapter(adapter);
}
int dividerInset =
- a.getDimensionPixelSize(R.styleable.SuwRecyclerMixin_suwDividerInset, 0);
- setDividerInset(dividerInset);
+ a.getDimensionPixelSize(R.styleable.SuwRecyclerMixin_suwDividerInset, -1);
+ if (dividerInset != -1) {
+ setDividerInset(dividerInset);
+ } else {
+ int dividerInsetStart =
+ a.getDimensionPixelSize(R.styleable.SuwRecyclerMixin_suwDividerInsetStart, 0);
+ int dividerInsetEnd =
+ a.getDimensionPixelSize(R.styleable.SuwRecyclerMixin_suwDividerInsetEnd, 0);
+ setDividerInsets(dividerInsetStart, dividerInsetEnd);
+ }
+
a.recycle();
}
@@ -174,23 +185,49 @@ public class RecyclerMixin implements Mixin {
}
/**
+ * @deprecated Use {@link #setDividerInsets(int, int)} instead.
+ */
+ @Deprecated
+ public void setDividerInset(int inset) {
+ setDividerInsets(inset, 0);
+ }
+
+ /**
* Sets the start inset of the divider. This will use the default divider drawable set in the
- * theme and inset it {@code inset} pixels to the right (or left in RTL layouts).
+ * theme and apply insets to it.
*
- * @param inset The number of pixels to inset on the "start" side of the list divider. Typically
+ * @param start The number of pixels to inset on the "start" side of the list divider. Typically
* this will be either {@code @dimen/suw_items_glif_icon_divider_inset} or
* {@code @dimen/suw_items_glif_text_divider_inset}.
+ * @param end The number of pixels to inset on the "end" side of the list divider.
*/
- public void setDividerInset(int inset) {
- mDividerInset = inset;
+ public void setDividerInsets(int start, int end) {
+ mDividerInsetStart = start;
+ mDividerInsetEnd = end;
updateDivider();
}
/**
* @return The number of pixels inset on the start side of the divider.
+ * @deprecated This is the same as {@link #getDividerInsetStart()}. Use that instead.
*/
+ @Deprecated
public int getDividerInset() {
- return mDividerInset;
+ return getDividerInsetStart();
+ }
+
+ /**
+ * @return The number of pixels inset on the start side of the divider.
+ */
+ public int getDividerInsetStart() {
+ return mDividerInsetStart;
+ }
+
+ /**
+ * @return The number of pixels inset on the end side of the divider.
+ */
+ public int getDividerInsetEnd() {
+ return mDividerInsetEnd;
}
private void updateDivider() {
@@ -204,9 +241,9 @@ public class RecyclerMixin implements Mixin {
}
mDivider = DrawableLayoutDirectionHelper.createRelativeInsetDrawable(
mDefaultDivider,
- mDividerInset /* start */,
+ mDividerInsetStart /* start */,
0 /* top */,
- 0 /* end */,
+ mDividerInsetEnd /* end */,
0 /* bottom */,
mTemplateLayout);
mDividerDecoration.setDivider(mDivider);
diff --git a/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/template/RecyclerMixinTest.java b/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/template/RecyclerMixinTest.java
index 79105d6..ce73791 100644
--- a/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/template/RecyclerMixinTest.java
+++ b/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/template/RecyclerMixinTest.java
@@ -96,7 +96,7 @@ public class RecyclerMixinTest {
}
@Test
- public void testDividerInset() {
+ public void testDividerLegacyInset() {
RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
mixin.setDividerInset(123);
@@ -111,7 +111,23 @@ public class RecyclerMixinTest {
}
@Test
- public void testDividerInsetRtl() {
+ public void testDividerInsets() {
+ RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
+ mixin.setDividerInsets(123, 456);
+
+ assertEquals(123, mixin.getDividerInsetStart());
+ assertEquals(456, mixin.getDividerInsetEnd());
+
+ final Drawable divider = mixin.getDivider();
+ InsetDrawable insetDrawable = (InsetDrawable) divider;
+ Rect rect = new Rect();
+ insetDrawable.getPadding(rect);
+
+ assertEquals(new Rect(123, 0, 456, 0), rect);
+ }
+
+ @Test
+ public void testDividerInsetLegacyRtl() {
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
doReturn(View.LAYOUT_DIRECTION_RTL).when(mTemplateLayout).getLayoutDirection();
@@ -129,4 +145,25 @@ public class RecyclerMixinTest {
}
// else the test passes
}
+
+ @Test
+ public void testDividerInsetsRtl() {
+ if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1) {
+ doReturn(View.LAYOUT_DIRECTION_RTL).when(mTemplateLayout).getLayoutDirection();
+
+ RecyclerMixin mixin = new RecyclerMixin(mTemplateLayout, mRecyclerView);
+ mixin.setDividerInsets(123, 456);
+
+ assertEquals(123, mixin.getDividerInsetStart());
+ assertEquals(456, mixin.getDividerInsetEnd());
+
+ final Drawable divider = mixin.getDivider();
+ InsetDrawable insetDrawable = (InsetDrawable) divider;
+ Rect rect = new Rect();
+ insetDrawable.getPadding(rect);
+
+ assertEquals(new Rect(456, 0, 123, 0), rect);
+ }
+ // else the test passes
+ }
}
diff --git a/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/GlifRecyclerLayoutTest.java b/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/GlifRecyclerLayoutTest.java
index b27564d..4bd98ce 100644
--- a/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/GlifRecyclerLayoutTest.java
+++ b/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/GlifRecyclerLayoutTest.java
@@ -105,7 +105,7 @@ public class GlifRecyclerLayoutTest {
}
@Test
- public void testDividerInset() {
+ public void testDividerInsetLegacy() {
GlifRecyclerLayout layout = new GlifRecyclerLayout(mContext);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
layout.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
@@ -120,6 +120,22 @@ public class GlifRecyclerLayoutTest {
}
@Test
+ public void testDividerInsets() {
+ GlifRecyclerLayout layout = new GlifRecyclerLayout(mContext);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ layout.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+ }
+ assertRecyclerTemplateInflated(layout);
+
+ layout.setDividerInsets(10, 15);
+ assertEquals("Divider inset start should be 10", 10, layout.getDividerInsetStart());
+ assertEquals("Divider inset end should be 15", 15, layout.getDividerInsetEnd());
+
+ final Drawable divider = layout.getDivider();
+ assertTrue("Divider should be instance of InsetDrawable", divider instanceof InsetDrawable);
+ }
+
+ @Test
public void testTemplateWithNoRecyclerView() {
try {
new GlifRecyclerLayout(mContext, R.layout.suw_glif_template);
diff --git a/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/SetupWizardRecyclerLayoutTest.java b/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/SetupWizardRecyclerLayoutTest.java
index 4a72992..4b38945 100644
--- a/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/SetupWizardRecyclerLayoutTest.java
+++ b/library/recyclerview/test/instrumentation/src/com/android/setupwizardlib/test/SetupWizardRecyclerLayoutTest.java
@@ -106,7 +106,7 @@ public class SetupWizardRecyclerLayoutTest {
}
@Test
- public void testDividerInset() {
+ public void testDividerInsetLegacy() {
SetupWizardRecyclerLayout layout = new SetupWizardRecyclerLayout(mContext);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
layout.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
@@ -121,6 +121,22 @@ public class SetupWizardRecyclerLayoutTest {
}
@Test
+ public void testDividerInsets() {
+ SetupWizardRecyclerLayout layout = new SetupWizardRecyclerLayout(mContext);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ layout.setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+ }
+ assertRecyclerTemplateInflated(layout);
+
+ layout.setDividerInsets(10, 15);
+ assertEquals("Divider inset start should be 10", 10, layout.getDividerInsetStart());
+ assertEquals("Divider inset end should be 15", 15, layout.getDividerInsetEnd());
+
+ final Drawable divider = layout.getDivider();
+ assertTrue("Divider should be instance of InsetDrawable", divider instanceof InsetDrawable);
+ }
+
+ @Test
public void testTemplateWithNoRecyclerView() {
try {
new SetupWizardRecyclerLayout(