Fixing regression in folder positioning.

- When we had the search bar, the workspace padding always 
  accounted for the search bar (and therefor drop target bar) height
  when the folder opened.  Now that there is no padding on the top, we
  should offset the bar whenever possible to ensure that the drop target
  bar is visible.

Bug: 30110595
Change-Id: Ia9a8581981c777f2507b6bd880994a3dcfd52c39
This commit is contained in:
Winson
2016-07-22 16:35:37 -07:00
committed by Winson Chung
parent 68f98ac102
commit fadbe8ffbd
2 changed files with 34 additions and 9 deletions
+21 -1
View File
@@ -378,12 +378,32 @@ public class DeviceProfile {
padding.set(desiredWorkspaceLeftRightMarginPx, padding.set(desiredWorkspaceLeftRightMarginPx,
topWorkspacePadding, topWorkspacePadding,
desiredWorkspaceLeftRightMarginPx, desiredWorkspaceLeftRightMarginPx,
hotseatBarHeightPx + pageIndicatorHeightPx); paddingBottom);
} }
} }
return padding; 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() { private int getWorkspacePageSpacing() {
if (isVerticalBarLayout() || isLargeTablet) { if (isVerticalBarLayout() || isLargeTablet) {
// In landscape mode the page spacing is set to the default. // In landscape mode the page spacing is set to the default.
+13 -8
View File
@@ -1030,27 +1030,25 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
} }
private void centerAboutIcon() { 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); DragLayer parent = (DragLayer) mLauncher.findViewById(R.id.drag_layer);
int width = getPaddingLeft() + getPaddingRight() + mContent.getDesiredWidth(); int width = getPaddingLeft() + getPaddingRight() + mContent.getDesiredWidth();
int height = getFolderHeight(); int height = getFolderHeight();
float scale = parent.getDescendantRectRelativeToSelf(mFolderIcon, sTempRect); float scale = parent.getDescendantRectRelativeToSelf(mFolderIcon, sTempRect);
int centerX = sTempRect.centerX();
DeviceProfile grid = mLauncher.getDeviceProfile(); int centerY = sTempRect.centerY();
int centerX = (int) (sTempRect.left + sTempRect.width() * scale / 2);
int centerY = (int) (sTempRect.top + sTempRect.height() * scale / 2);
int centeredLeft = centerX - width / 2; int centeredLeft = centerX - width / 2;
int centeredTop = centerY - height / 2; int centeredTop = centerY - height / 2;
// We need to bound the folder to the currently visible workspace area // We need to bound the folder to the currently visible workspace area
mLauncher.getWorkspace().getPageAreaRelativeToDragLayer(sTempRect); mLauncher.getWorkspace().getPageAreaRelativeToDragLayer(sTempRect);
int left = Math.min(Math.max(sTempRect.left, centeredLeft), 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), int top = Math.min(Math.max(sTempRect.top, centeredTop),
sTempRect.top + sTempRect.height() - height); sTempRect.bottom - height);
int distFromEdgeOfScreen = mLauncher.getWorkspace().getPaddingLeft() + getPaddingLeft(); 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; left = sTempRect.left + (sTempRect.width() - width) / 2;
} }
if (height >= sTempRect.height()) { if (height >= sTempRect.height()) {
// Folder height is greater than page height, center on page
top = sTempRect.top + (sTempRect.height() - height) / 2; 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); int folderPivotX = width / 2 + (centeredLeft - left);