OSDN Git Service

Update suggestion card layout
authorDoris Ling <dling@google.com>
Thu, 18 Jan 2018 19:36:21 +0000 (11:36 -0800)
committerDoris Ling <dling@google.com>
Thu, 18 Jan 2018 19:36:21 +0000 (11:36 -0800)
- set card corner radius
- update card margin according to number of card and card position
- update text alignment for title and summary

Bug: 70573674
Test: visual
Change-Id: Icfceed5614ded97ce2a7767667ae97f92b89b2fa

res/layout/suggestion_container.xml
res/layout/suggestion_tile_v2.xml
res/layout/suggestion_tile_with_button_v2.xml
res/values/dimens.xml
res/values/styles.xml
src/com/android/settings/dashboard/DashboardAdapterV2.java
src/com/android/settings/dashboard/suggestions/SuggestionAdapterV2.java

index 2aa1043..e01a590 100644 (file)
@@ -57,8 +57,6 @@
         android:layout_height="wrap_content"
         android:paddingTop="20dp"
         android:paddingBottom="16dp"
-        android:paddingStart="16dp"
-        android:paddingEnd="16dp"
         android:scrollbars="none"/>
 
 </LinearLayout>
index e180897..27b3c34 100644 (file)
@@ -21,7 +21,8 @@
     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"
@@ -38,7 +39,7 @@
                 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>
index 01be236..5f4ed18 100644 (file)
     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"
@@ -39,7 +39,7 @@
                 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
index f8205e3..339eaf2 100755 (executable)
     <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>
index 9555d5e..7764e74 100644 (file)
         <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>
index cc511c5..a422ae4 100644 (file)
@@ -305,7 +305,8 @@ public class DashboardAdapterV2 extends RecyclerView.Adapter<DashboardAdapterV2.
     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);
index 89c731f..afd0e08 100644 (file)
@@ -56,10 +56,7 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
     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;
 
@@ -89,13 +86,7 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
         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);
     }
@@ -116,7 +107,7 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
                     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);
@@ -220,12 +211,61 @@ public class SuggestionAdapterV2 extends RecyclerView.Adapter<DashboardItemHolde
         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);
+        }
+
     }
+
 }