diff options
author | Maurice Lam <yukl@google.com> | 2017-04-25 19:16:09 -0700 |
---|---|---|
committer | Maurice Lam <yukl@google.com> | 2017-04-25 20:05:03 -0700 |
commit | 6011b35deae30839cd454e0ec5866487e90860f5 (patch) | |
tree | 14593ed645f53af3130273eba9f2e6c15bd7e743 /library/recyclerview | |
parent | c9abaa5461d2757893be00d2ce34672d96b135bb (diff) | |
download | setupwizard-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')
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( |