From: Winson Chung Date: Fri, 20 Sep 2013 18:32:26 +0000 (-0700) Subject: Fixing small regression in PageIndicators add page, fixing NPE (Bug 10779956) X-Git-Tag: android-x86-6.0-r1~918 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=89f9705077c054b541af7da52be832760e2ae2e8;p=android-x86%2Fpackages-apps-Launcher3.git Fixing small regression in PageIndicators add page, fixing NPE (Bug 10779956) Change-Id: I7ff711c6fc97987efc57bf023913e33e31ccf140 --- diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java index 04f4d8154..901f42bdf 100644 --- a/src/com/android/launcher3/CellLayout.java +++ b/src/com/android/launcher3/CellLayout.java @@ -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(); + } } } diff --git a/src/com/android/launcher3/PageIndicator.java b/src/com/android/launcher3/PageIndicator.java index 52c844760..08e5f721a 100644 --- a/src/com/android/launcher3/PageIndicator.java +++ b/src/com/android/launcher3/PageIndicator.java @@ -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)); diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index eb2b19df0..4dca5997a 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -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);