summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/launcher3/DeviceProfile.java22
-rw-r--r--src/com/android/launcher3/folder/Folder.java21
2 files changed, 34 insertions, 9 deletions
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index c9d5cff2e..15f47b4fc 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -378,12 +378,32 @@ public class DeviceProfile {
padding.set(desiredWorkspaceLeftRightMarginPx,
topWorkspacePadding,
desiredWorkspaceLeftRightMarginPx,
- hotseatBarHeightPx + pageIndicatorHeightPx);
+ paddingBottom);
}
}
return padding;
}
+ /**
+ * @return the bounds for which the open folders should be contained within
+ */
+ public Rect getAbsoluteOpenFolderBounds() {
+ if (isVerticalBarLayout()) {
+ // Folders should only appear right of the drop target bar and left of the hotseat
+ return new Rect(mInsets.left + dropTargetBarSizePx + edgeMarginPx,
+ mInsets.top,
+ mInsets.left + availableWidthPx - hotseatBarHeightPx - edgeMarginPx,
+ mInsets.top + availableHeightPx);
+ } else {
+ // Folders should only appear below the drop target bar and above the hotseat
+ return new Rect(mInsets.left,
+ mInsets.top + dropTargetBarSizePx + edgeMarginPx,
+ mInsets.left + availableWidthPx,
+ mInsets.top + availableHeightPx - hotseatBarHeightPx - pageIndicatorHeightPx -
+ edgeMarginPx);
+ }
+ }
+
private int getWorkspacePageSpacing() {
if (isVerticalBarLayout() || isLargeTablet) {
// In landscape mode the page spacing is set to the default.
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index 2fbbad56d..fdbb21430 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -1030,27 +1030,25 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
}
private void centerAboutIcon() {
- DragLayer.LayoutParams lp = (DragLayer.LayoutParams) getLayoutParams();
+ DeviceProfile grid = mLauncher.getDeviceProfile();
+ DragLayer.LayoutParams lp = (DragLayer.LayoutParams) getLayoutParams();
DragLayer parent = (DragLayer) mLauncher.findViewById(R.id.drag_layer);
int width = getPaddingLeft() + getPaddingRight() + mContent.getDesiredWidth();
int height = getFolderHeight();
float scale = parent.getDescendantRectRelativeToSelf(mFolderIcon, sTempRect);
-
- DeviceProfile grid = mLauncher.getDeviceProfile();
-
- int centerX = (int) (sTempRect.left + sTempRect.width() * scale / 2);
- int centerY = (int) (sTempRect.top + sTempRect.height() * scale / 2);
+ int centerX = sTempRect.centerX();
+ int centerY = sTempRect.centerY();
int centeredLeft = centerX - width / 2;
int centeredTop = centerY - height / 2;
// We need to bound the folder to the currently visible workspace area
mLauncher.getWorkspace().getPageAreaRelativeToDragLayer(sTempRect);
int left = Math.min(Math.max(sTempRect.left, centeredLeft),
- sTempRect.left + sTempRect.width() - width);
+ sTempRect.right- width);
int top = Math.min(Math.max(sTempRect.top, centeredTop),
- sTempRect.top + sTempRect.height() - height);
+ sTempRect.bottom - height);
int distFromEdgeOfScreen = mLauncher.getWorkspace().getPaddingLeft() + getPaddingLeft();
@@ -1064,7 +1062,14 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
left = sTempRect.left + (sTempRect.width() - width) / 2;
}
if (height >= sTempRect.height()) {
+ // Folder height is greater than page height, center on page
top = sTempRect.top + (sTempRect.height() - height) / 2;
+ } else {
+ // Folder height is less than page height, so bound it to the absolute open folder
+ // bounds if necessary
+ Rect folderBounds = grid.getAbsoluteOpenFolderBounds();
+ left = Math.max(folderBounds.left, Math.min(left, folderBounds.right - width));
+ top = Math.max(folderBounds.top, Math.min(top, folderBounds.bottom - height));
}
int folderPivotX = width / 2 + (centeredLeft - left);