Fixing issue with widget sizes being misreported.

- Fixing NPE with getting page indicators in phone landscape

Change-Id: Id369596e38cbe7a161c0d1f62e62e4f4f3cc31b3
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index abc057c..a516e4e 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -927,12 +927,12 @@
         return r;
     }
 
-    static void getMetrics(Rect metrics, Resources res, int measureWidth, int measureHeight,
-            int countX, int countY, int orientation) {
+    static void getMetrics(Rect metrics, int paddedMeasureWidth,
+            int paddedMeasureHeight, int countX, int countY) {
         LauncherAppState app = LauncherAppState.getInstance();
         DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
-        metrics.set(grid.calculateCellWidth(measureWidth, countX),
-                grid.calculateCellHeight(measureHeight, countY), 0, 0);
+        metrics.set(grid.calculateCellWidth(paddedMeasureWidth, countX),
+                grid.calculateCellHeight(paddedMeasureHeight, countY), 0, 0);
     }
 
     public void setFixedSize(int width, int height) {
@@ -2961,18 +2961,22 @@
      * @param result An array of length 2 in which to store the result (may be null).
      */
     public int[] rectToCell(int width, int height, int[] result) {
-        return rectToCell(getResources(), width, height, result);
+        return rectToCell(width, height, result);
     }
 
-    public static int[] rectToCell(Resources resources, int width, int height, int[] result) {
+    public static int[] rectToCell(int width, int height, int[] result) {
         LauncherAppState app = LauncherAppState.getInstance();
         DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
+        Rect padding = grid.getWorkspacePadding(grid.isLandscape ?
+                CellLayout.LANDSCAPE : CellLayout.PORTRAIT);
 
         // Always assume we're working with the smallest span to make sure we
         // reserve enough space in both orientations.
-        int actualWidth = grid.cellWidthPx;
-        int actualHeight = grid.cellHeightPx;
-        int smallerSize = Math.min(actualWidth, actualHeight);
+        int parentWidth = grid.calculateCellWidth(grid.widthPx
+                - padding.left - padding.right, (int) grid.numColumns);
+        int parentHeight = grid.calculateCellHeight(grid.heightPx
+                - padding.top - padding.bottom, (int) grid.numRows);
+        int smallerSize = Math.min(parentWidth, parentHeight);
 
         // Always round up to next largest cell
         int spanX = (int) Math.ceil(width / (float) smallerSize);
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 88046e4..9ffc572 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -1267,7 +1267,7 @@
         // to ensure that it gets the full amount of space that it has requested
         int requiredWidth = minWidth + padding.left + padding.right;
         int requiredHeight = minHeight + padding.top + padding.bottom;
-        return CellLayout.rectToCell(context.getResources(), requiredWidth, requiredHeight, null);
+        return CellLayout.rectToCell(requiredWidth, requiredHeight, null);
     }
 
     static int[] getSpanForWidget(Context context, AppWidgetProviderInfo info) {
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 696b702..b2f7433 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -1878,16 +1878,21 @@
                     }
                 }
             }
+            ObjectAnimator pageIndicatorAlpha = null;
+            if (getPageIndicator() != null) {
+                pageIndicatorAlpha = ObjectAnimator.ofFloat(getPageIndicator(), "alpha",
+                        finalHotseatAndPageIndicatorAlpha);
+            }
             ObjectAnimator hotseatAlpha = ObjectAnimator.ofFloat(mLauncher.getHotseat(), "alpha",
                     finalHotseatAndPageIndicatorAlpha);
-            ObjectAnimator pageIndicatorAlpha = ObjectAnimator.ofFloat(getPageIndicator(), "alpha",
-                    finalHotseatAndPageIndicatorAlpha);
             ObjectAnimator overviewPanelAlpha = ObjectAnimator.ofFloat(mLauncher.getOverviewPanel(),
                     "alpha", finalOverviewPanelAlpha);
             overviewPanelAlpha.addUpdateListener(new AlphaUpdateListener(
                     mLauncher.getOverviewPanel()));
             hotseatAlpha.addUpdateListener(new AlphaUpdateListener(mLauncher.getHotseat()));
-            pageIndicatorAlpha.addUpdateListener(new AlphaUpdateListener(getPageIndicator()));
+            if (getPageIndicator() != null) {
+                pageIndicatorAlpha.addUpdateListener(new AlphaUpdateListener(getPageIndicator()));
+            }
             anim.play(overviewPanelAlpha);
             anim.play(hotseatAlpha);
             anim.play(pageIndicatorAlpha);
@@ -1895,7 +1900,9 @@
         } else {
             mLauncher.getOverviewPanel().setAlpha(finalOverviewPanelAlpha);
             mLauncher.getHotseat().setAlpha(finalHotseatAndPageIndicatorAlpha);
-            getPageIndicator().setAlpha(finalHotseatAndPageIndicatorAlpha);
+            if (getPageIndicator() != null) {
+                getPageIndicator().setAlpha(finalHotseatAndPageIndicatorAlpha);
+            }
         }
 
         if (stateIsSpringLoaded) {
@@ -2634,9 +2641,8 @@
                 int width = largestSize.x - padding.left - padding.right;
                 int height = smallestSize.y - padding.top - padding.bottom;
                 mLandscapeCellLayoutMetrics = new Rect();
-                CellLayout.getMetrics(mLandscapeCellLayoutMetrics, res,
-                        width, height, LauncherModel.getCellCountX(), LauncherModel.getCellCountY(),
-                        orientation);
+                CellLayout.getMetrics(mLandscapeCellLayoutMetrics, width, height,
+                        LauncherModel.getCellCountX(), LauncherModel.getCellCountY());
             }
             return mLandscapeCellLayoutMetrics;
         } else if (orientation == CellLayout.PORTRAIT) {
@@ -2645,9 +2651,8 @@
                 int width = smallestSize.x - padding.left - padding.right;
                 int height = largestSize.y - padding.top - padding.bottom;
                 mPortraitCellLayoutMetrics = new Rect();
-                CellLayout.getMetrics(mPortraitCellLayoutMetrics, res,
-                        width, height, LauncherModel.getCellCountX(), LauncherModel.getCellCountY(),
-                        orientation);
+                CellLayout.getMetrics(mPortraitCellLayoutMetrics, width, height,
+                        LauncherModel.getCellCountX(), LauncherModel.getCellCountY());
             }
             return mPortraitCellLayoutMetrics;
         }