android:layout_height="wrap_content"
android:paddingTop="20dp"
android:paddingBottom="16dp"
- android:paddingStart="16dp"
- android:paddingEnd="16dp"
android:scrollbars="none"/>
</LinearLayout>
android:layout_width="328dp"
android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
- app:cardElevation="2dp">
+ app:cardElevation="2dp"
+ app:cardCornerRadius="@dimen/suggestion_card_corner_radius">
<LinearLayout
android:layout_width="match_parent"
android:id="@android:id/icon"
android:layout_width="@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_marginBottom="8dp" />
<TextView
android:id="@android:id/title"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center"
+ style="@style/SuggestionCardText"
+ android:layout_marginStart="12dp"
+ android:layout_marginEnd="12dp"
android:singleLine="true"
- android:layout_marginLeft="12dp"
- android:layout_marginRight="12dp"
android:textAppearance="@style/TextAppearance.TileTitle"
android:ellipsize="marquee"
android:fadingEdge="horizontal" />
<TextView
android:id="@android:id/summary"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
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" />
</LinearLayout>
android:layout_width="328dp"
android:layout_height="wrap_content"
app:cardUseCompatPadding="true"
- app:cardElevation="2dp">
+ app:cardElevation="2dp"
+ app:cardCornerRadius="@dimen/suggestion_card_corner_radius">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="112dp"
- android:orientation="vertical"
- android:background="@android:color/white">
+ android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:id="@android:id/icon"
android:layout_width="@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_marginBottom="8dp" />
<TextView
android:id="@android:id/title"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center"
+ style="@style/SuggestionCardText"
+ android:layout_marginStart="12dp"
+ android:layout_marginEnd="12dp"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.TileTitle"
android:ellipsize="marquee"
<TextView
android:id="@android:id/summary"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
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" />
<Button
<dimen name="suggestion_condition_header_padding_collapsed">10dp</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_two_cards">158dp</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_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>
<item name="android:textColor">?android:attr/colorAccent</item>
</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"
parent="@android:style/TextAppearance.Material.Subhead">
<item name="android:fontFamily">sans-serif-medium</item>
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
// header anymore.
- final List<Suggestion> suggestions = mDashboardData.getSuggestions();
+ final List<Suggestion> suggestions =
+ (List<Suggestion>) mDashboardData.getItemEntityByPosition(position);
final int suggestionCount = suggestions.size();
if (suggestions != null && suggestionCount > 0) {
holder.summary.setText(""+suggestionCount);
private final ArrayList<String> mSuggestionsShownLogged;
private final SuggestionControllerMixin mSuggestionControllerMixin;
private final Callback mCallback;
- private final int mMultipleCardsMarginEnd;
- private final int mWidthSingleCard;
- private final int mWidthTwoCards;
- private final int mWidthMultipleCards;
+ private final CardConfig mConfig;
private List<Suggestion> mSuggestions;
if (lifecycle != null) {
lifecycle.addObserver(this);
}
-
- 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);
+ mConfig = CardConfig.get(context);
setHasStableIds(true);
}
mContext, MetricsEvent.ACTION_SHOW_SETTINGS_SUGGESTION, id);
mSuggestionsShownLogged.add(id);
}
- setCardWidthAndMargin(holder, suggestionCount);
+ mConfig.setCardLayout(holder, suggestionCount, position);
holder.icon.setImageDrawable(mCache.getIcon(suggestion.getIcon()));
holder.title.setText(suggestion.getTitle());
holder.title.setSingleLine(suggestionCount == 1);
return mSuggestions;
}
- private void setCardWidthAndMargin(DashboardItemHolder holder, int suggestionCount) {
- final LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
- suggestionCount == 1
- ? mWidthSingleCard : suggestionCount == 2 ? mWidthTwoCards : mWidthMultipleCards,
- LinearLayout.LayoutParams.WRAP_CONTENT);
- params.setMarginEnd(suggestionCount == 1 ? 0 : mMultipleCardsMarginEnd);
- holder.itemView.setLayoutParams(params);
+ 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(
+ suggestionCount == 1
+ ? mWidthSingleCard : suggestionCount == 2
+ ? mWidthTwoCards : mWidthMultipleCards,
+ LinearLayout.LayoutParams.WRAP_CONTENT);
+ 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);
+ }
+
}
+
}