From c0c5511862a2bade73b71936cd1202b956ac587c Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Wed, 12 Dec 2018 12:08:26 +0800 Subject: [PATCH] Add vertical and horizontal dividers for large cards of homepage - Add a new field in ContextualCard to store whether this card is a large one - Set dividers for large cards in renderer Fixes: 119528161 Fixes: 119641839 Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.homepage Change-Id: I5cb95214789f44ccfd8d9ce2177ca2b84835b7a4 --- .../settings/homepage/contextualcards/ContextualCard.java | 14 ++++++++++++++ .../homepage/contextualcards/ContextualCardLoader.java | 12 +++++++++--- .../slices/SliceContextualCardRenderer.java | 6 ++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCard.java b/src/com/android/settings/homepage/contextualcards/ContextualCard.java index ca5555b855..4673ad15ee 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCard.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCard.java @@ -64,6 +64,7 @@ public class ContextualCard { private final int mCardAction; private final long mExpireTimeMS; private final boolean mIsHalfWidth; + private final boolean mIsLargeCard; private final Drawable mIconDrawable; public String getName() { @@ -142,6 +143,10 @@ public class ContextualCard { return mIsHalfWidth; } + public boolean isLargeCard() { + return mIsLargeCard; + } + boolean isCustomCard() { return TextUtils.isEmpty(mSliceUri); } @@ -170,6 +175,7 @@ public class ContextualCard { mExpireTimeMS = builder.mExpireTimeMS; mIconDrawable = builder.mIconDrawable; mIsHalfWidth = builder.mIsHalfWidth; + mIsLargeCard = builder.mIsLargeCard; } ContextualCard(Cursor c) { @@ -212,6 +218,8 @@ public class ContextualCard { mIsHalfWidth = (c.getInt( c.getColumnIndex(CardDatabaseHelper.CardColumns.SUPPORT_HALF_WIDTH)) == 1); mBuilder.setIsHalfWidth(mIsHalfWidth); + mIsLargeCard = false; + mBuilder.setIsLargeCard(mIsLargeCard); mIconDrawable = null; mBuilder.setIconDrawable(mIconDrawable); } @@ -256,6 +264,7 @@ public class ContextualCard { private long mExpireTimeMS; private Drawable mIconDrawable; private boolean mIsHalfWidth; + private boolean mIsLargeCard; public Builder setName(String name) { mName = name; @@ -347,6 +356,11 @@ public class ContextualCard { return this; } + public Builder setIsLargeCard(boolean isLargeCard) { + mIsLargeCard = isLargeCard; + return this; + } + public ContextualCard build() { return new ContextualCard(this); } diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java index e631d22e21..f32be26e43 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java @@ -97,6 +97,8 @@ public class ContextualCardLoader extends AsyncLoaderCompat final ContextualCard card = new ContextualCard(cursor); if (card.isCustomCard()) { //TODO(b/114688391): Load and generate custom card,then add into list + } else if (isLargeCard(card)) { + result.add(card.mutate().setIsLargeCard(true).build()); } else { result.add(card); } @@ -195,12 +197,16 @@ public class ContextualCardLoader extends AsyncLoaderCompat private int getNumberOfLargeCard(List cards) { return (int) cards.stream() - .filter(card -> card.getSliceUri().equals(WIFI_SLICE_URI) - || card.getSliceUri().equals(BLUETOOTH_DEVICES_SLICE_URI)) + .filter(card -> isLargeCard(card)) .count(); } + private boolean isLargeCard(ContextualCard card) { + return card.getSliceUri().equals(WIFI_SLICE_URI) + || card.getSliceUri().equals(BLUETOOTH_DEVICES_SLICE_URI); + } + public interface CardContentLoaderListener { void onFinishCardLoading(List contextualCards); } -} \ No newline at end of file +} diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java index be03c281e9..172c3b2784 100644 --- a/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java +++ b/src/com/android/settings/homepage/contextualcards/slices/SliceContextualCardRenderer.java @@ -131,6 +131,12 @@ public class SliceContextualCardRenderer implements ContextualCardRenderer, // Set this listener so we can log the interaction users make on the slice cardHolder.sliceView.setOnSliceActionListener(this); + // Customize slice view for Settings + if (card.isLargeCard()) { + cardHolder.sliceView.showHeaderDivider(true); + cardHolder.sliceView.showActionDividers(true); + } + initDismissalActions(cardHolder, card); } -- 2.11.0