From 94f46d9e5fbc484314eea8d42b6c806e0fe8aab4 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Tue, 16 Feb 2016 14:56:33 -0800 Subject: [PATCH] Setting content bounds in onMeasure as it uses measuredWidth, which might not be available during onCreate Also fixing the calculation of allApps column could, which was counting an additional icon gap Bug: 27173894 Change-Id: I8be8cccc76d7e7d945cf9383567a3026228b6c86 --- src/com/android/launcher3/BaseContainerView.java | 7 +------ src/com/android/launcher3/DeviceProfile.java | 2 +- .../android/launcher3/allapps/AllAppsContainerView.java | 7 +++++++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher3/BaseContainerView.java b/src/com/android/launcher3/BaseContainerView.java index 8bb8c55fd6..b8e7b63fee 100644 --- a/src/com/android/launcher3/BaseContainerView.java +++ b/src/com/android/launcher3/BaseContainerView.java @@ -38,10 +38,8 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl // The bounds of the search bar. Only the left, top, right are used to inset the // search bar and the height is determined by the measurement of the layout private final Rect mFixedSearchBarBounds = new Rect(); - // The computed bounds of the container - protected final Rect mContentBounds = new Rect(); // The computed padding to apply to the container to achieve the container bounds - private final Rect mContentPadding = new Rect(); + protected final Rect mContentPadding = new Rect(); // The inset to apply to the edges and between the search bar and the container private final int mContainerBoundsInset; @@ -126,9 +124,6 @@ public abstract class BaseContainerView extends FrameLayout implements Insettabl // The container padding changed, notify the container. if (!padding.equals(mContentPadding)) { mContentPadding.set(padding); - mContentBounds.set(padding.left, padding.top, - getMeasuredWidth() - padding.right, - getMeasuredHeight() - padding.bottom); onUpdateBackgroundAndPaddings(padding); } } diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 61c4b1a22d..380c6b148b 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -270,7 +270,7 @@ public class DeviceProfile { int allAppsCellWidthGap = res.getDimensionPixelSize(R.dimen.all_apps_icon_width_gap); int availableAppsWidthPx = (recyclerViewWidth > 0) ? recyclerViewWidth : availableWidthPx; - int numAppsCols = (availableAppsWidthPx - appsViewLeftMarginPx) / + int numAppsCols = (availableAppsWidthPx + allAppsCellWidthGap - appsViewLeftMarginPx) / (allAppsIconSizePx + allAppsCellWidthGap); int numPredictiveAppCols = Math.max(inv.minAllAppsPredictionColumns, numAppsCols); allAppsNumCols = numAppsCols; diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java index 945125b82f..997f0fa89a 100644 --- a/src/com/android/launcher3/allapps/AllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java @@ -138,6 +138,9 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc private final RecyclerView.LayoutManager mLayoutManager; private final RecyclerView.ItemDecoration mItemDecoration; + // The computed bounds of the container + private final Rect mContentBounds = new Rect(); + private AllAppsRecyclerView mAppsRecyclerView; private AllAppsSearchBarController mSearchBarController; @@ -318,6 +321,10 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + mContentBounds.set(mContentPadding.left, mContentPadding.top, + MeasureSpec.getSize(widthMeasureSpec) - mContentPadding.right, + MeasureSpec.getSize(heightMeasureSpec) - mContentPadding.bottom); + // Update the number of items in the grid before we measure the view // TODO: mSectionNamesMargin is currently 0, but also account for it, // if it's enabled in the future.