OSDN Git Service

Fixing small regression in PageIndicators add page, fixing NPE (Bug 10779956)
authorWinson Chung <winsonc@google.com>
Fri, 20 Sep 2013 18:32:26 +0000 (11:32 -0700)
committerWinson Chung <winsonc@google.com>
Fri, 20 Sep 2013 18:32:26 +0000 (11:32 -0700)
Change-Id: I7ff711c6fc97987efc57bf023913e33e31ccf140

src/com/android/launcher3/CellLayout.java
src/com/android/launcher3/PageIndicator.java
src/com/android/launcher3/Workspace.java

index 04f4d81..901f42b 100644 (file)
@@ -497,32 +497,31 @@ public class CellLayout extends ViewGroup {
             int height = width;
             cellToPoint(fra.mCellX, fra.mCellY, mTempLocation);
             View child = getChildAt(fra.mCellX, fra.mCellY);
+            if (child != null) {
+                int centerX = mTempLocation[0] + mCellWidth / 2;
+                int centerY = mTempLocation[1] + previewOffset / 2 +
+                        child.getPaddingTop() + grid.folderBackgroundOffset;
 
-            int centerX = mTempLocation[0] + mCellWidth / 2;
-            int centerY = mTempLocation[1] + previewOffset / 2 +
-                    child.getPaddingTop() + grid.folderBackgroundOffset;
+                canvas.save();
+                canvas.translate(centerX - width / 2, centerY - height / 2);
+                d.setBounds(0, 0, width, height);
+                d.draw(canvas);
+                canvas.restore();
 
-            canvas.save();
-            canvas.translate(centerX - width / 2, centerY - height / 2);
-            d.setBounds(0, 0, width, height);
-            d.draw(canvas);
-            canvas.restore();
+                // Draw inner ring
+                d = FolderRingAnimator.sSharedInnerRingDrawable;
+                width = (int) (fra.getInnerRingSize() * getChildrenScale());
+                height = width;
 
-            // Draw inner ring
-            d = FolderRingAnimator.sSharedInnerRingDrawable;
-            width = (int) (fra.getInnerRingSize() * getChildrenScale());
-            height = width;
-            cellToPoint(fra.mCellX, fra.mCellY, mTempLocation);
-            child = getChildAt(fra.mCellX, fra.mCellY);
-
-            centerX = mTempLocation[0] + mCellWidth / 2;
-            centerY = mTempLocation[1] + previewOffset / 2 +
-                    child.getPaddingTop() + grid.folderBackgroundOffset;
-            canvas.save();
-            canvas.translate(centerX - width / 2, centerY - width / 2);
-            d.setBounds(0, 0, width, height);
-            d.draw(canvas);
-            canvas.restore();
+                centerX = mTempLocation[0] + mCellWidth / 2;
+                centerY = mTempLocation[1] + previewOffset / 2 +
+                        child.getPaddingTop() + grid.folderBackgroundOffset;
+                canvas.save();
+                canvas.translate(centerX - width / 2, centerY - width / 2);
+                d.setBounds(0, 0, width, height);
+                d.draw(canvas);
+                canvas.restore();
+            }
         }
 
         if (mFolderLeaveBehindCell[0] >= 0 && mFolderLeaveBehindCell[1] >= 0) {
@@ -532,15 +531,17 @@ public class CellLayout extends ViewGroup {
 
             cellToPoint(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1], mTempLocation);
             View child = getChildAt(mFolderLeaveBehindCell[0], mFolderLeaveBehindCell[1]);
-            int centerX = mTempLocation[0] + mCellWidth / 2;
-            int centerY = mTempLocation[1] + previewOffset / 2 +
-                    child.getPaddingTop() + grid.folderBackgroundOffset;
-
-            canvas.save();
-            canvas.translate(centerX - width / 2, centerY - width / 2);
-            d.setBounds(0, 0, width, height);
-            d.draw(canvas);
-            canvas.restore();
+            if (child != null) {
+                int centerX = mTempLocation[0] + mCellWidth / 2;
+                int centerY = mTempLocation[1] + previewOffset / 2 +
+                        child.getPaddingTop() + grid.folderBackgroundOffset;
+
+                canvas.save();
+                canvas.translate(centerX - width / 2, centerY - width / 2);
+                d.setBounds(0, 0, width, height);
+                d.draw(canvas);
+                canvas.restore();
+            }
         }
     }
 
index 52c8447..08e5f72 100644 (file)
@@ -186,6 +186,11 @@ public class PageIndicator extends LinearLayout {
         }
     }
 
+    void updateMarker(int index, PageMarkerResources marker) {
+        PageIndicatorMarker m = mMarkers.get(index);
+        m.setMarkerDrawables(marker.activeId, marker.inactiveId);
+    }
+
     void removeMarker(int index, boolean allowAnimations) {
         if (mMarkers.size() > 0) {
             index = Math.max(0, Math.min(mMarkers.size() - 1, index));
index eb2b19d..4dca599 100644 (file)
@@ -616,6 +616,7 @@ public class Workspace extends SmoothPagedView
     }
 
     public long commitExtraEmptyScreen() {
+        int index = getPageIndexForScreenId(EXTRA_EMPTY_SCREEN_ID);
         CellLayout cl = mWorkspaceScreens.get(EXTRA_EMPTY_SCREEN_ID);
         mWorkspaceScreens.remove(EXTRA_EMPTY_SCREEN_ID);
         mScreenOrder.remove(EXTRA_EMPTY_SCREEN_ID);
@@ -624,6 +625,11 @@ public class Workspace extends SmoothPagedView
         mWorkspaceScreens.put(newId, cl);
         mScreenOrder.add(newId);
 
+        // Update the page indicator marker
+        if (getPageIndicator() != null) {
+            getPageIndicator().updateMarker(index, getPageIndicatorMarker(index));
+        }
+
         // Update the model for the new screen
         mLauncher.getModel().updateWorkspaceScreenOrder(mLauncher, mScreenOrder);