Remove magic paddings from bookmark view

 Use calculated sizes to correctly center without the need for
 "magic" padding values.

Change-Id: Ida64a80243df9bf05355dd1db1047fc16c10b726
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index 7543528..16bcda5 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -52,6 +52,12 @@
     }
 
     void bindGridView(View view, Context context, Cursor cursor) {
+        // We need to set this to handle rotation and other configuration change
+        // events. If the padding didn't change, this is a no op.
+        int padding = context.getResources()
+                .getDimensionPixelSize(R.dimen.combo_horizontalSpacing);
+        view.setPadding(padding, view.getPaddingTop(),
+                padding, view.getPaddingBottom());
         ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
         TextView tv = (TextView) view.findViewById(R.id.label);
 
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index f92272f..d871f22 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -556,13 +556,9 @@
     public void onConfigurationChanged(Configuration newConfig) {
         super.onConfigurationChanged(newConfig);
         Resources res = getActivity().getResources();
-        int horizontalSpacing = (int) res.getDimension(R.dimen.combo_horizontalSpacing);
-        mGrid.setHorizontalSpacing(horizontalSpacing);
         mGrid.setColumnWidthFromLayout(R.layout.bookmark_thumbnail);
-        int paddingLeftRight = (int) res.getDimension(R.dimen.combo_paddingLeftRight);
         int paddingTop = (int) res.getDimension(R.dimen.combo_paddingTop);
-        mRoot.setPadding(paddingLeftRight, paddingTop,
-                paddingLeftRight, 0);
+        mRoot.setPadding(0, paddingTop, 0, 0);
         getActivity().invalidateOptionsMenu();
     }
 
diff --git a/src/com/android/browser/view/BookmarkExpandableGridView.java b/src/com/android/browser/view/BookmarkExpandableGridView.java
index f6b9f19..c8811d1 100644
--- a/src/com/android/browser/view/BookmarkExpandableGridView.java
+++ b/src/com/android/browser/view/BookmarkExpandableGridView.java
@@ -57,6 +57,7 @@
     private boolean mLongClickable;
     private BreadCrumbView.Controller mBreadcrumbController;
     private BookmarkDragHandler mDragHandler;
+    private int mMaxColumnCount;
 
     public BookmarkExpandableGridView(Context context) {
         super(context);
@@ -78,14 +79,27 @@
         mContext = context;
         setItemsCanFocus(true);
         setLongClickable(false);
+        mMaxColumnCount = mContext.getResources()
+                .getInteger(R.integer.max_bookmark_columns);
         mAdapter = new BookmarkAccountAdapter(mContext);
         super.setAdapter(mAdapter);
     }
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        if (width > 0) {
+            mAdapter.measureChildren(width);
+            if (mAdapter.mRowPadding > 0) {
+                width -= mAdapter.mRowPadding * 2;
+            }
+            widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, widthMode);
+        }
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        mAdapter.measureChildren();
+        if (width != getMeasuredWidth()) {
+            mAdapter.measureChildren(getMeasuredWidth());
+        }
     }
 
     @Override
@@ -100,10 +114,6 @@
         mColumnWidth = v.getMeasuredWidth();
     }
 
-    public void setHorizontalSpacing(int horizontalSpacing) {
-        // TODO Auto-generated method stub
-    }
-
     public void clearAccounts() {
         mAdapter.clear();
     }
@@ -330,11 +340,6 @@
                 convertView = mInflater.inflate(R.layout.bookmark_grid_row, parent, false);
             }
             LinearLayout row = (LinearLayout) convertView;
-            row.setPadding(
-                    mRowPadding,
-                    row.getPaddingTop(),
-                    mRowPadding,
-                    row.getPaddingBottom());
             if (row.getChildCount() > mRowCount) {
                 row.removeViews(mRowCount, row.getChildCount() - mRowCount);
             }
@@ -387,13 +392,13 @@
             return mGroups.size();
         }
 
-        public void measureChildren() {
-            int viewWidth = getMeasuredWidth();
+        public void measureChildren(int viewWidth) {
             if (mLastViewWidth == viewWidth) return;
 
-            ViewGroup parent = (ViewGroup) mInflater.inflate(R.layout.bookmark_grid_row, null);
-            viewWidth -= parent.getPaddingLeft() + parent.getPaddingRight();
             int rowCount = viewWidth / mColumnWidth;
+            if (mMaxColumnCount > 0) {
+                rowCount = Math.min(rowCount, mMaxColumnCount);
+            }
             int rowPadding = (viewWidth - (rowCount * mColumnWidth)) / 2;
             boolean notify = rowCount != mRowCount || rowPadding != mRowPadding;
             mRowCount = rowCount;