Merge "Update suggestion card layout"

This commit is contained in:
TreeHugger Robot
2018-01-18 22:02:13 +00:00
committed by Android (Google) Code Review
7 changed files with 99 additions and 40 deletions

View File

@@ -57,8 +57,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="20dp" android:paddingTop="20dp"
android:paddingBottom="16dp" android:paddingBottom="16dp"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:scrollbars="none"/> android:scrollbars="none"/>
</LinearLayout> </LinearLayout>

View File

@@ -21,7 +21,8 @@
android:layout_width="328dp" android:layout_width="328dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardUseCompatPadding="true" app:cardUseCompatPadding="true"
app:cardElevation="2dp"> app:cardElevation="2dp"
app:cardCornerRadius="@dimen/suggestion_card_corner_radius">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -38,7 +39,7 @@
android:id="@android:id/icon" android:id="@android:id/icon"
android:layout_width="@dimen/dashboard_tile_image_size" android:layout_width="@dimen/dashboard_tile_image_size"
android:layout_height="@dimen/dashboard_tile_image_size" android:layout_height="@dimen/dashboard_tile_image_size"
android:layout_centerHorizontal = "true" style="@style/SuggestionCardIcon"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="8dp" /> android:layout_marginBottom="8dp" />
@@ -55,21 +56,23 @@
<TextView <TextView
android:id="@android:id/title" android:id="@android:id/title"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" style="@style/SuggestionCardText"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:singleLine="true" android:singleLine="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:textAppearance="@style/TextAppearance.TileTitle" android:textAppearance="@style/TextAppearance.TileTitle"
android:ellipsize="marquee" android:ellipsize="marquee"
android:fadingEdge="horizontal" /> android:fadingEdge="horizontal" />
<TextView <TextView
android:id="@android:id/summary" android:id="@android:id/summary"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" style="@style/SuggestionCardText"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:textAppearance="@style/TextAppearance.SuggestionSummary" /> android:textAppearance="@style/TextAppearance.SuggestionSummary" />
</LinearLayout> </LinearLayout>

View File

@@ -21,14 +21,14 @@
android:layout_width="328dp" android:layout_width="328dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:cardUseCompatPadding="true" app:cardUseCompatPadding="true"
app:cardElevation="2dp"> app:cardElevation="2dp"
app:cardCornerRadius="@dimen/suggestion_card_corner_radius">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="112dp" android:minHeight="112dp"
android:orientation="vertical" android:orientation="vertical">
android:background="@android:color/white">
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -39,7 +39,7 @@
android:id="@android:id/icon" android:id="@android:id/icon"
android:layout_width="@dimen/dashboard_tile_image_size" android:layout_width="@dimen/dashboard_tile_image_size"
android:layout_height="@dimen/dashboard_tile_image_size" android:layout_height="@dimen/dashboard_tile_image_size"
android:layout_centerHorizontal = "true" style="@style/SuggestionCardIcon"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="8dp" /> android:layout_marginBottom="8dp" />
@@ -56,9 +56,11 @@
<TextView <TextView
android:id="@android:id/title" android:id="@android:id/title"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" style="@style/SuggestionCardText"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:singleLine="true" android:singleLine="true"
android:textAppearance="@style/TextAppearance.TileTitle" android:textAppearance="@style/TextAppearance.TileTitle"
android:ellipsize="marquee" android:ellipsize="marquee"
@@ -66,9 +68,11 @@
<TextView <TextView
android:id="@android:id/summary" android:id="@android:id/summary"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" style="@style/SuggestionCardText"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:textAppearance="@style/TextAppearance.SuggestionSummary" /> android:textAppearance="@style/TextAppearance.SuggestionSummary" />
<Button <Button

View File

@@ -300,11 +300,15 @@
<dimen name="suggestion_condition_header_padding_collapsed">10dp</dimen> <dimen name="suggestion_condition_header_padding_collapsed">10dp</dimen>
<dimen name="suggestion_condition_header_padding_expanded">5dp</dimen> <dimen name="suggestion_condition_header_padding_expanded">5dp</dimen>
<!-- Suggestion cards--> <!-- Suggestion cards size and padding -->
<dimen name="suggestion_card_width_one_card">328dp</dimen> <dimen name="suggestion_card_width_one_card">328dp</dimen>
<dimen name="suggestion_card_width_two_cards">158dp</dimen> <dimen name="suggestion_card_width_two_cards">158dp</dimen>
<dimen name="suggestion_card_width_multiple_cards">152dp</dimen> <dimen name="suggestion_card_width_multiple_cards">152dp</dimen>
<dimen name="suggestion_card_margin_end">12dp</dimen> <dimen name="suggestion_card_outer_margin">16dp</dimen>
<dimen name="suggestion_card_inner_margin">12dp</dimen>
<dimen name="suggestion_card_padding_bottom_one_card">16dp</dimen> <dimen name="suggestion_card_padding_bottom_one_card">16dp</dimen>
<dimen name="suggestion_card_corner_radius">2dp</dimen>
<dimen name="suggestion_card_title_padding_bottom_one_card">6dp</dimen>
<dimen name="suggestion_card_title_padding_bottom_multiple_cards">8dp</dimen>
</resources> </resources>

View File

@@ -323,6 +323,15 @@
<item name="android:textColor">?android:attr/colorAccent</item> <item name="android:textColor">?android:attr/colorAccent</item>
</style> </style>
<style name="SuggestionCardText">
<item name="android:textAlignment">viewStart</item>
</style>
<style name="SuggestionCardIcon">
<item name="android:layout_centerHorizontal">false</item>
<item name="android:layout_alignParentStart">true</item>
</style>
<style name="TextAppearance.SuggestionTitle" <style name="TextAppearance.SuggestionTitle"
parent="@android:style/TextAppearance.Material.Subhead"> parent="@android:style/TextAppearance.Material.Subhead">
<item name="android:fontFamily">sans-serif-medium</item> <item name="android:fontFamily">sans-serif-medium</item>

View File

@@ -305,7 +305,8 @@ public class DashboardAdapterV2 extends RecyclerView.Adapter<DashboardAdapterV2.
void onBindSuggestion(final SuggestionContainerHolder holder, int position) { void onBindSuggestion(final SuggestionContainerHolder holder, int position) {
// If there is suggestions to show, it will be at position 0 as we don't show the suggestion // If there is suggestions to show, it will be at position 0 as we don't show the suggestion
// header anymore. // header anymore.
final List<Suggestion> suggestions = mDashboardData.getSuggestions(); final List<Suggestion> suggestions =
(List<Suggestion>) mDashboardData.getItemEntityByPosition(position);
final int suggestionCount = suggestions.size(); final int suggestionCount = suggestions.size();
if (suggestions != null && suggestionCount > 0) { if (suggestions != null && suggestionCount > 0) {
holder.summary.setText(""+suggestionCount); holder.summary.setText(""+suggestionCount);

View File

@@ -56,10 +56,7 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
private final ArrayList<String> mSuggestionsShownLogged; private final ArrayList<String> mSuggestionsShownLogged;
private final SuggestionControllerMixin mSuggestionControllerMixin; private final SuggestionControllerMixin mSuggestionControllerMixin;
private final Callback mCallback; private final Callback mCallback;
private final int mMultipleCardsMarginEnd; private final CardConfig mConfig;
private final int mWidthSingleCard;
private final int mWidthTwoCards;
private final int mWidthMultipleCards;
private List<Suggestion> mSuggestions; private List<Suggestion> mSuggestions;
@@ -89,13 +86,7 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
if (lifecycle != null) { if (lifecycle != null) {
lifecycle.addObserver(this); lifecycle.addObserver(this);
} }
mConfig = CardConfig.get(context);
final Resources res = mContext.getResources();
mMultipleCardsMarginEnd = res.getDimensionPixelOffset(R.dimen.suggestion_card_margin_end);
mWidthSingleCard = res.getDimensionPixelOffset(R.dimen.suggestion_card_width_one_card);
mWidthTwoCards = res.getDimensionPixelOffset(R.dimen.suggestion_card_width_two_cards);
mWidthMultipleCards =
res.getDimensionPixelOffset(R.dimen.suggestion_card_width_multiple_cards);
setHasStableIds(true); setHasStableIds(true);
} }
@@ -116,7 +107,7 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
mContext, MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION, id); mContext, MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION, id);
mSuggestionsShownLogged.add(id); mSuggestionsShownLogged.add(id);
} }
setCardWidthAndMargin(holder, suggestionCount); mConfig.setCardLayout(holder, suggestionCount, position);
holder.icon.setImageDrawable(mCache.getIcon(suggestion.getIcon())); holder.icon.setImageDrawable(mCache.getIcon(suggestion.getIcon()));
holder.title.setText(suggestion.getTitle()); holder.title.setText(suggestion.getTitle());
holder.title.setSingleLine(suggestionCount == 1); holder.title.setSingleLine(suggestionCount == 1);
@@ -220,12 +211,61 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
return mSuggestions; return mSuggestions;
} }
private void setCardWidthAndMargin(DashboardItemHolder holder, int suggestionCount) { private static class CardConfig {
// Card start/end margin
private final int mMarginInner;
private final int mMarginOuter;
// Card width for different numbers of cards
private final int mWidthSingleCard;
private final int mWidthTwoCards;
private final int mWidthMultipleCards;
// padding between icon and title
private final int mPaddingTitleTopSingleCard;
private final int mPaddingTitleTopMultipleCards;
private static CardConfig sConfig;
private CardConfig(Context context) {
final Resources res = context.getResources();
mMarginInner =
res.getDimensionPixelOffset(R.dimen.suggestion_card_inner_margin);
mMarginOuter =
res.getDimensionPixelOffset(R.dimen.suggestion_card_outer_margin);
mWidthSingleCard = res.getDimensionPixelOffset(R.dimen.suggestion_card_width_one_card);
mWidthTwoCards = res.getDimensionPixelOffset(R.dimen.suggestion_card_width_two_cards);
mWidthMultipleCards =
res.getDimensionPixelOffset(R.dimen.suggestion_card_width_multiple_cards);
mPaddingTitleTopSingleCard =
res.getDimensionPixelOffset(R.dimen.suggestion_card_title_padding_bottom_one_card);
mPaddingTitleTopMultipleCards = res.getDimensionPixelOffset(
R.dimen.suggestion_card_title_padding_bottom_multiple_cards);
}
public static CardConfig get(Context context) {
if (sConfig == null) {
sConfig = new CardConfig(context);
}
return sConfig;
}
private void setCardLayout(DashboardItemHolder holder, int suggestionCount,
int position) {
final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
suggestionCount == 1 suggestionCount == 1
? mWidthSingleCard : suggestionCount == 2 ? mWidthTwoCards : mWidthMultipleCards, ? mWidthSingleCard : suggestionCount == 2
? mWidthTwoCards : mWidthMultipleCards,
LinearLayout.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMarginEnd(suggestionCount == 1 ? 0 : mMultipleCardsMarginEnd); if (suggestionCount == 1) {
params.setMarginStart(mMarginOuter);
params.setMarginEnd(mMarginOuter);
} else {
params.setMarginStart(
position == 0 ? mMarginOuter : mMarginInner);
params.setMarginEnd(position == suggestionCount - 1 ? mMarginOuter : 0);
}
holder.itemView.setLayoutParams(params); holder.itemView.setLayoutParams(params);
} }
}
} }