Revert "Adjust edit state drop targets, workspace scaling, and m..."
Test: manual
Revert submission 17004675-edit-state
Reason for revert: b/226274309
Reverted Changes:
Ib50509b6f:Adjust edit state drop targets per device type and...
Id1817cd3c:Adjust edit state drop targets, workspace scaling,...
Change-Id: I22863d7735f49f6a040a17cf56cc66f20a3e0986
diff --git a/src/com/android/launcher3/CellLayout.java b/src/com/android/launcher3/CellLayout.java
index f7133c4..d235180 100644
--- a/src/com/android/launcher3/CellLayout.java
+++ b/src/com/android/launcher3/CellLayout.java
@@ -148,8 +148,7 @@
private boolean mVisualizeDropLocation = true;
private RectF mVisualizeGridRect = new RectF();
private Paint mVisualizeGridPaint = new Paint();
- private int mGridVisualizationPaddingX;
- private int mGridVisualizationPaddingY;
+ private int mGridVisualizationPadding;
private int mGridVisualizationRoundingRadius;
private float mGridAlpha = 0f;
private int mGridColor = 0;
@@ -261,10 +260,8 @@
mBackground.setAlpha(0);
mGridColor = Themes.getAttrColor(getContext(), R.attr.workspaceAccentColor);
- mGridVisualizationPaddingX = res.getDimensionPixelSize(
- R.dimen.grid_visualization_horizontal_cell_spacing);
- mGridVisualizationPaddingY = res.getDimensionPixelSize(
- R.dimen.grid_visualization_vertical_cell_spacing);
+ mGridVisualizationPadding =
+ res.getDimensionPixelSize(R.dimen.grid_visualization_cell_spacing);
mGridVisualizationRoundingRadius =
res.getDimensionPixelSize(R.dimen.grid_visualization_rounding_radius);
mReorderPreviewAnimationMagnitude = (REORDER_PREVIEW_MAGNITUDE * deviceProfile.iconSizePx);
@@ -594,8 +591,8 @@
protected void visualizeGrid(Canvas canvas) {
DeviceProfile dp = mActivity.getDeviceProfile();
- int paddingX = Math.min((mCellWidth - dp.iconSizePx) / 2, mGridVisualizationPaddingX);
- int paddingY = Math.min((mCellHeight - dp.iconSizePx) / 2, mGridVisualizationPaddingY);
+ int paddingX = (int) Math.min((mCellWidth - dp.iconSizePx) / 2, mGridVisualizationPadding);
+ int paddingY = (int) Math.min((mCellHeight - dp.iconSizePx) / 2, mGridVisualizationPadding);
mVisualizeGridRect.set(paddingX, paddingY,
mCellWidth - paddingX,
mCellHeight - paddingY);
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 0c33bce..6a3ce2b 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -94,16 +94,18 @@
private static final float TALL_DEVICE_EXTRA_SPACE_THRESHOLD_DP = 252;
private static final float TALL_DEVICE_MORE_EXTRA_SPACE_THRESHOLD_DP = 268;
+ // To evenly space the icons, increase the left/right margins for tablets in portrait mode.
+ private static final int PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER = 4;
+
// Workspace
public final int desiredWorkspaceHorizontalMarginOriginalPx;
public int desiredWorkspaceHorizontalMarginPx;
public Point cellLayoutBorderSpaceOriginalPx;
public Point cellLayoutBorderSpacePx;
- public Rect cellLayoutPaddingPx = new Rect();
-
+ public final int cellLayoutPaddingLeftRightPx;
+ public final int cellLayoutBottomPaddingPx;
public final int edgeMarginPx;
- public float workspaceSpringLoadShrunkTop;
- public float workspaceSpringLoadShrunkBottom;
+ public float workspaceSpringLoadShrinkFactor;
public final int workspaceSpringLoadedBottomSpace;
private final int extraSpace;
@@ -159,7 +161,6 @@
public int hotseatBarSizePx;
public int hotseatBarTopPaddingPx;
public final int hotseatBarBottomPaddingPx;
- public int springLoadedHotseatBarTopMarginPx;
// Start is the side next to the nav bar, end is the side next to the workspace
public final int hotseatBarSidePaddingStartPx;
public final int hotseatBarSidePaddingEndPx;
@@ -205,13 +206,8 @@
// Drop Target
public int dropTargetBarSizePx;
- public int dropTargetBarTopMarginPx;
- public int dropTargetBarBottomMarginPx;
public int dropTargetDragPaddingPx;
public int dropTargetTextSizePx;
- public int dropTargetHorizontalPaddingPx;
- public int dropTargetVerticalPaddingPx;
- public int dropTargetGapPx;
// Insets
private final Rect mInsets = new Rect();
@@ -323,6 +319,23 @@
folderCellLayoutBorderSpacePx = new Point(folderCellLayoutBorderSpaceOriginalPx,
folderCellLayoutBorderSpaceOriginalPx);
+ int cellLayoutPaddingLeftRightMultiplier = !isVerticalBarLayout() && isTablet
+ ? PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER : 1;
+ int cellLayoutPadding = isScalableGrid
+ ? 0
+ : res.getDimensionPixelSize(R.dimen.dynamic_grid_cell_layout_padding);
+
+ if (isTwoPanels) {
+ cellLayoutPaddingLeftRightPx = 0;
+ cellLayoutBottomPaddingPx = 0;
+ } else if (isLandscape) {
+ cellLayoutPaddingLeftRightPx = 0;
+ cellLayoutBottomPaddingPx = cellLayoutPadding;
+ } else {
+ cellLayoutPaddingLeftRightPx = cellLayoutPaddingLeftRightMultiplier * cellLayoutPadding;
+ cellLayoutBottomPaddingPx = 0;
+ }
+
workspacePageIndicatorHeight = res.getDimensionPixelSize(
R.dimen.workspace_page_indicator_height);
mWorkspacePageIndicatorOverlapWorkspace =
@@ -332,15 +345,8 @@
res.getDimensionPixelSize(R.dimen.dynamic_grid_icon_drawable_padding);
dropTargetBarSizePx = res.getDimensionPixelSize(R.dimen.dynamic_grid_drop_target_size);
- dropTargetBarTopMarginPx = res.getDimensionPixelSize(R.dimen.drop_target_top_margin);
- dropTargetBarBottomMarginPx = res.getDimensionPixelSize(R.dimen.drop_target_bottom_margin);
dropTargetDragPaddingPx = res.getDimensionPixelSize(R.dimen.drop_target_drag_padding);
dropTargetTextSizePx = res.getDimensionPixelSize(R.dimen.drop_target_text_size);
- dropTargetHorizontalPaddingPx = res.getDimensionPixelSize(
- R.dimen.drop_target_button_drawable_horizontal_padding);
- dropTargetVerticalPaddingPx = res.getDimensionPixelSize(
- R.dimen.drop_target_button_drawable_vertical_padding);
- dropTargetGapPx = res.getDimensionPixelSize(R.dimen.drop_target_button_gap);
workspaceSpringLoadedBottomSpace =
res.getDimensionPixelSize(R.dimen.dynamic_grid_min_spring_loaded_space);
@@ -378,8 +384,6 @@
+ res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_bottom_padding);
qsbWidth = 0;
}
- springLoadedHotseatBarTopMarginPx = res.getDimensionPixelSize(
- R.dimen.spring_loaded_hotseat_top_margin);
hotseatBarSidePaddingEndPx =
res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_side_padding);
// Add a bit of space between nav bar and hotseat in vertical bar layout.
@@ -473,12 +477,6 @@
// Recalculate the available dimensions using the new hotseat size.
updateAvailableDimensions(res);
}
-
- int cellLayoutPadding =
- isTwoPanels ? cellLayoutBorderSpacePx.x / 2 : res.getDimensionPixelSize(
- R.dimen.cell_layout_padding);
- cellLayoutPaddingPx = new Rect(cellLayoutPadding, cellLayoutPadding, cellLayoutPadding,
- cellLayoutPadding);
updateWorkspacePadding();
flingToDeleteThresholdVelocity = res.getDimensionPixelSize(
@@ -591,6 +589,7 @@
float appWidgetScaleX = (float) profile.getCellSize().x / getCellSize().x;
float appWidgetScaleY = (float) profile.getCellSize().y / getCellSize().y;
profile.appWidgetScale.set(appWidgetScaleX, appWidgetScaleY);
+ profile.updateWorkspacePadding();
return profile;
}
@@ -625,19 +624,18 @@
}
private void updateAllAppsContainerWidth(Resources res) {
- int cellLayoutHorizontalPadding =
- (cellLayoutPaddingPx.left + cellLayoutPaddingPx.right) / 2;
+
if (isTablet) {
allAppsLeftRightPadding =
- res.getDimensionPixelSize(R.dimen.all_apps_bottom_sheet_horizontal_padding);
-
+ res.getDimensionPixelSize(R.dimen.all_apps_bottom_sheet_horizontal_padding)
+ + cellLayoutPaddingLeftRightPx;
int usedWidth = (allAppsCellWidthPx * numShownAllAppsColumns)
+ (allAppsBorderSpacePx.x * (numShownAllAppsColumns - 1))
+ allAppsLeftRightPadding * 2;
allAppsLeftRightMargin = Math.max(1, (availableWidthPx - usedWidth) / 2);
} else {
allAppsLeftRightPadding =
- desiredWorkspaceHorizontalMarginPx + cellLayoutHorizontalPadding;
+ desiredWorkspaceHorizontalMarginPx + cellLayoutPaddingLeftRightPx;
}
}
@@ -647,12 +645,11 @@
private int updateAvailableDimensions(Resources res) {
updateIconSize(1f, res);
- updateWorkspacePadding();
Point workspacePadding = getTotalWorkspacePadding();
// Check to see if the icons fit within the available height.
float usedHeight = getCellLayoutHeight();
- final int maxHeight = getWorkspaceHeight(workspacePadding);
+ final int maxHeight = availableHeightPx - workspacePadding.y;
float extraHeight = Math.max(0, maxHeight - usedHeight);
float scaleY = maxHeight / usedHeight;
boolean shouldScale = scaleY < 1f;
@@ -662,7 +659,10 @@
// We scale to fit the cellWidth and cellHeight in the available space.
// The benefit of scalable grids is that we can get consistent aspect ratios between
// devices.
- float usedWidth = getCellLayoutWidth() + (desiredWorkspaceHorizontalMarginPx * 2);
+ int numColumns = isTwoPanels ? inv.numColumns * 2 : inv.numColumns;
+ float usedWidth = (cellWidthPx * numColumns)
+ + (cellLayoutBorderSpacePx.x * (numColumns - 1))
+ + (desiredWorkspaceHorizontalMarginPx * 2);
// We do not subtract padding here, as we also scale the workspace padding if needed.
scaleX = availableWidthPx / usedWidth;
shouldScale = true;
@@ -679,14 +679,7 @@
}
private int getCellLayoutHeight() {
- return (cellHeightPx * inv.numRows) + (cellLayoutBorderSpacePx.y * (inv.numRows - 1))
- + cellLayoutPaddingPx.top + cellLayoutPaddingPx.bottom;
- }
-
- private int getCellLayoutWidth() {
- int numColumns = isTwoPanels ? inv.numColumns * 2 : inv.numColumns;
- return (cellWidthPx * numColumns) + (cellLayoutBorderSpacePx.x * (numColumns - 1))
- + cellLayoutPaddingPx.left + cellLayoutPaddingPx.right;
+ return (cellHeightPx * inv.numRows) + (cellLayoutBorderSpacePx.y * (inv.numRows - 1));
}
/**
@@ -746,6 +739,18 @@
}
updateHotseatIconSize(iconSizePx);
+ if (!isVerticalLayout) {
+ int expectedWorkspaceHeight = availableHeightPx - hotseatBarSizePx
+ - workspacePageIndicatorHeight - edgeMarginPx;
+ float minRequiredHeight = dropTargetBarSizePx + workspaceSpringLoadedBottomSpace;
+ workspaceSpringLoadShrinkFactor = Math.min(
+ res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100.0f,
+ 1 - (minRequiredHeight / expectedWorkspaceHeight));
+ } else {
+ workspaceSpringLoadShrinkFactor =
+ res.getInteger(R.integer.config_workspaceSpringLoadShrinkPercentage) / 100.0f;
+ }
+
// Folder icon
folderIconSizePx = IconNormalizer.getNormalizedCircleSize(iconSizePx);
folderIconOffsetYPx = (iconSizePx - folderIconSizePx) / 2;
@@ -848,6 +853,7 @@
public void updateInsets(Rect insets) {
mInsets.set(insets);
+ updateWorkspacePadding();
}
/**
@@ -874,62 +880,23 @@
int numColumns = isTwoPanels ? inv.numColumns * 2 : inv.numColumns;
int screenWidthPx = getWorkspaceWidth(padding);
result.x = calculateCellWidth(screenWidthPx, cellLayoutBorderSpacePx.x, numColumns);
- int screenHeightPx = getWorkspaceHeight(padding);
- result.y = calculateCellHeight(screenHeightPx, cellLayoutBorderSpacePx.y, inv.numRows);
+ result.y = calculateCellHeight(availableHeightPx - padding.y
+ - cellLayoutBottomPaddingPx, cellLayoutBorderSpacePx.y, inv.numRows);
return result;
}
- /**
- * Gets the space in px from the bottom of last item in the vertical-bar hotseat to the
- * bottom of the screen.
- */
- public int getVerticalHotseatLastItemBottomOffset() {
- int cellHeight = calculateCellHeight(
- heightPx - mHotseatPadding.top - mHotseatPadding.bottom, hotseatBorderSpace,
- numShownHotseatIcons);
- int hotseatSize = (cellHeight * numShownHotseatIcons)
- + (hotseatBorderSpace * (numShownHotseatIcons - 1));
- int extraHotseatEndSpacing = (heightPx - hotseatSize) / 2;
- int extraIconEndSpacing = (cellHeight - iconSizePx) / 2;
- return extraHotseatEndSpacing + extraIconEndSpacing + mHotseatPadding.bottom;
- }
-
- /**
- * Gets the scaled top of the workspace in px for the spring-loaded edit state.
- */
- public float getWorkspaceSpringLoadShrunkTop() {
- workspaceSpringLoadShrunkTop = mInsets.top + dropTargetBarTopMarginPx + dropTargetBarSizePx
- + dropTargetBarBottomMarginPx;
- return workspaceSpringLoadShrunkTop;
- }
-
- /**
- * Gets the scaled bottom of the workspace in px for the spring-loaded edit state.
- */
- public float getWorkspaceSpringLoadShrunkBottom() {
- int topOfHotseat = hotseatBarSizePx + springLoadedHotseatBarTopMarginPx;
- workspaceSpringLoadShrunkBottom =
- heightPx - (isVerticalBarLayout() ? getVerticalHotseatLastItemBottomOffset()
- : topOfHotseat);
- return workspaceSpringLoadShrunkBottom;
- }
-
public int getWorkspaceWidth() {
return getWorkspaceWidth(getTotalWorkspacePadding());
}
public int getWorkspaceWidth(Point workspacePadding) {
int cellLayoutTotalPadding =
- (isTwoPanels ? 2 : 1) * (cellLayoutPaddingPx.left + cellLayoutPaddingPx.right);
+ isTwoPanels ? 4 * cellLayoutPaddingLeftRightPx : 2 * cellLayoutPaddingLeftRightPx;
return availableWidthPx - workspacePadding.x - cellLayoutTotalPadding;
}
- private int getWorkspaceHeight(Point workspacePadding) {
- return availableHeightPx - workspacePadding.y - (cellLayoutPaddingPx.top
- + cellLayoutPaddingPx.bottom);
- }
-
public Point getTotalWorkspacePadding() {
+ updateWorkspacePadding();
return new Point(workspacePadding.left + workspacePadding.right,
workspacePadding.top + workspacePadding.bottom);
}
@@ -955,26 +922,12 @@
int hotseatTop = hotseatBarSizePx;
int paddingBottom = hotseatTop + workspacePageIndicatorHeight
+ workspaceBottomPadding - mWorkspacePageIndicatorOverlapWorkspace;
- int paddingTop = workspaceTopPadding + (isScalableGrid ? 0 : edgeMarginPx);
- int paddingSide = desiredWorkspaceHorizontalMarginPx;
- padding.set(paddingSide, paddingTop, paddingSide, paddingBottom);
+ padding.set(desiredWorkspaceHorizontalMarginPx,
+ workspaceTopPadding + (isScalableGrid ? 0 : edgeMarginPx),
+ desiredWorkspaceHorizontalMarginPx,
+ paddingBottom);
}
- insetPadding(workspacePadding, cellLayoutPaddingPx);
- }
-
- private void insetPadding(Rect paddings, Rect insets) {
- insets.left = Math.min(insets.left, paddings.left);
- paddings.left -= insets.left;
-
- insets.top = Math.min(insets.top, paddings.top);
- paddings.top -= insets.top;
-
- insets.right = Math.min(insets.right, paddings.right);
- paddings.right -= insets.right;
-
- insets.bottom = Math.min(insets.bottom, paddings.bottom);
- paddings.bottom -= insets.bottom;
}
/**
@@ -988,17 +941,16 @@
// Workspace icons are moved up by a small factor. The variable diffOverlapFactor
// is set to account for that difference.
float diffOverlapFactor = iconSizePx * (ICON_OVERLAP_FACTOR - 1) / 2;
- int paddingTop = Math.max((int) (mInsets.top + cellLayoutPaddingPx.top
- - diffOverlapFactor), 0);
- int paddingBottom = Math.max((int) (mInsets.bottom + cellLayoutPaddingPx.bottom
+ int paddingTop = Math.max((int) (mInsets.top - diffOverlapFactor), 0);
+ int paddingBottom = Math.max((int) (mInsets.bottom + cellLayoutBottomPaddingPx
+ diffOverlapFactor), 0);
if (isSeascape()) {
- mHotseatPadding.set(mInsets.left + hotseatBarSidePaddingStartPx, paddingTop,
- hotseatBarSidePaddingEndPx, paddingBottom);
+ mHotseatPadding.set(mInsets.left + hotseatBarSidePaddingStartPx,
+ mInsets.top, hotseatBarSidePaddingEndPx, mInsets.bottom);
} else {
- mHotseatPadding.set(hotseatBarSidePaddingEndPx, paddingTop,
- mInsets.right + hotseatBarSidePaddingStartPx, paddingBottom);
+ mHotseatPadding.set(hotseatBarSidePaddingEndPx, mInsets.top,
+ mInsets.right + hotseatBarSidePaddingStartPx, mInsets.bottom);
}
} else if (isTaskbarPresent) {
int hotseatHeight = workspacePadding.bottom;
@@ -1037,12 +989,14 @@
float workspaceCellWidth = (float) widthPx / inv.numColumns;
float hotseatCellWidth = (float) widthPx / numShownHotseatIcons;
int hotseatAdjustment = Math.round((workspaceCellWidth - hotseatCellWidth) / 2);
- mHotseatPadding.set(hotseatAdjustment + workspacePadding.left + cellLayoutPaddingPx.left
- + mInsets.left, hotseatBarTopPaddingPx,
- hotseatAdjustment + workspacePadding.right + cellLayoutPaddingPx.right
+ mHotseatPadding.set(
+ hotseatAdjustment + workspacePadding.left + cellLayoutPaddingLeftRightPx
+ + mInsets.left,
+ hotseatBarTopPaddingPx,
+ hotseatAdjustment + workspacePadding.right + cellLayoutPaddingLeftRightPx
+ mInsets.right,
hotseatBarSizePx - hotseatCellHeightPx - hotseatBarTopPaddingPx
- + mInsets.bottom);
+ + cellLayoutBottomPaddingPx + mInsets.bottom);
}
return mHotseatPadding;
}
@@ -1126,8 +1080,6 @@
.getInfo().rotation == Surface.ROTATION_270;
if (mIsSeascape != isSeascape) {
mIsSeascape = isSeascape;
- // Hotseat changing sides requires updating workspace left/right paddings
- updateWorkspacePadding();
return true;
}
}
@@ -1206,11 +1158,6 @@
cellLayoutBorderSpacePx.x));
writer.println(prefix + pxToDpStr("cellLayoutBorderSpacePx Vertical",
cellLayoutBorderSpacePx.y));
- writer.println(prefix + pxToDpStr("cellLayoutPaddingPx.left", cellLayoutPaddingPx.left));
- writer.println(prefix + pxToDpStr("cellLayoutPaddingPx.top", cellLayoutPaddingPx.top));
- writer.println(prefix + pxToDpStr("cellLayoutPaddingPx.right", cellLayoutPaddingPx.right));
- writer.println(
- prefix + pxToDpStr("cellLayoutPaddingPx.bottom", cellLayoutPaddingPx.bottom));
writer.println(prefix + pxToDpStr("iconSizePx", iconSizePx));
writer.println(prefix + pxToDpStr("iconTextSizePx", iconTextSizePx));
@@ -1248,12 +1195,6 @@
hotseatBarSidePaddingStartPx));
writer.println(prefix + pxToDpStr("hotseatBarSidePaddingEndPx",
hotseatBarSidePaddingEndPx));
- writer.println(prefix + pxToDpStr("springLoadedHotseatBarTopMarginPx",
- springLoadedHotseatBarTopMarginPx));
- writer.println(prefix + pxToDpStr("mHotseatPadding.top", mHotseatPadding.top));
- writer.println(prefix + pxToDpStr("mHotseatPadding.bottom", mHotseatPadding.bottom));
- writer.println(prefix + pxToDpStr("mHotseatPadding.left", mHotseatPadding.left));
- writer.println(prefix + pxToDpStr("mHotseatPadding.right", mHotseatPadding.right));
writer.println(prefix + "\tnumShownHotseatIcons: " + numShownHotseatIcons);
writer.println(prefix + pxToDpStr("hotseatBorderSpace", hotseatBorderSpace));
writer.println(prefix + "\tisQsbInline: " + isQsbInline);
@@ -1304,16 +1245,6 @@
writer.println(prefix + pxToDpStr("overviewPageSpacing", overviewPageSpacing));
writer.println(prefix + pxToDpStr("overviewRowSpacing", overviewRowSpacing));
writer.println(prefix + pxToDpStr("overviewGridSideMargin", overviewGridSideMargin));
-
- writer.println(prefix + pxToDpStr("dropTargetBarTopMarginPx", dropTargetBarTopMarginPx));
- writer.println(prefix + pxToDpStr("dropTargetBarSizePx", dropTargetBarSizePx));
- writer.println(
- prefix + pxToDpStr("dropTargetBarBottomMarginPx", dropTargetBarBottomMarginPx));
-
- writer.println(
- prefix + pxToDpStr("workspaceSpringLoadShrunkTop", workspaceSpringLoadShrunkTop));
- writer.println(prefix + pxToDpStr("workspaceSpringLoadShrunkBottom",
- workspaceSpringLoadShrunkBottom));
}
private static Context getContext(Context c, Info info, int orientation, WindowBounds bounds) {
diff --git a/src/com/android/launcher3/DropTargetBar.java b/src/com/android/launcher3/DropTargetBar.java
index 73289fb..9fb14f6 100644
--- a/src/com/android/launcher3/DropTargetBar.java
+++ b/src/com/android/launcher3/DropTargetBar.java
@@ -17,6 +17,8 @@
package com.android.launcher3;
import static com.android.launcher3.ButtonDropTarget.TOOLTIP_DEFAULT;
+import static com.android.launcher3.ButtonDropTarget.TOOLTIP_LEFT;
+import static com.android.launcher3.ButtonDropTarget.TOOLTIP_RIGHT;
import static com.android.launcher3.anim.AlphaUpdateListener.updateVisibility;
import android.animation.TimeInterpolator;
@@ -39,8 +41,6 @@
import com.android.launcher3.dragndrop.DragOptions;
import com.android.launcher3.testing.TestProtocol;
-import java.util.Arrays;
-
/*
* The top bar containing various drop targets: Delete/App Info/Uninstall.
*/
@@ -94,28 +94,30 @@
lp.rightMargin = insets.right;
int tooltipLocation = TOOLTIP_DEFAULT;
- int horizontalMargin;
- if (grid.isTablet) {
- // XXX: If the icon size changes across orientations, we will have to take
- // that into account here too.
- horizontalMargin = ((grid.widthPx - 2 * grid.edgeMarginPx
- - (grid.inv.numColumns * grid.cellWidthPx))
- / (2 * (grid.inv.numColumns + 1)))
- + grid.edgeMarginPx;
+ if (grid.isVerticalBarLayout()) {
+ lp.width = grid.dropTargetBarSizePx;
+ lp.height = grid.availableHeightPx - 2 * grid.edgeMarginPx;
+ lp.gravity = grid.isSeascape() ? Gravity.RIGHT : Gravity.LEFT;
+ tooltipLocation = grid.isSeascape() ? TOOLTIP_LEFT : TOOLTIP_RIGHT;
} else {
- horizontalMargin = getContext().getResources()
- .getDimensionPixelSize(R.dimen.drop_target_bar_margin_horizontal);
- }
- lp.topMargin += grid.dropTargetBarTopMarginPx;
- lp.bottomMargin += grid.dropTargetBarBottomMarginPx;
- lp.width = grid.availableWidthPx - 2 * horizontalMargin;
- if (mIsVertical) {
- lp.leftMargin = (grid.widthPx - lp.width) / 2;
- lp.rightMargin = (grid.widthPx - lp.width) / 2;
- }
- lp.height = grid.dropTargetBarSizePx;
- lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
+ int gap;
+ if (grid.isTablet) {
+ // XXX: If the icon size changes across orientations, we will have to take
+ // that into account here too.
+ gap = ((grid.widthPx - 2 * grid.edgeMarginPx
+ - (grid.inv.numColumns * grid.cellWidthPx))
+ / (2 * (grid.inv.numColumns + 1)))
+ + grid.edgeMarginPx;
+ } else {
+ gap = getContext().getResources()
+ .getDimensionPixelSize(R.dimen.drop_target_bar_margin_horizontal);
+ }
+ lp.width = grid.availableWidthPx - 2 * gap;
+ lp.topMargin += grid.edgeMarginPx;
+ lp.height = grid.dropTargetBarSizePx;
+ lp.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
+ }
setLayoutParams(lp);
for (ButtonDropTarget button : mDropTargets) {
button.setTextSize(TypedValue.COMPLEX_UNIT_PX, grid.dropTargetTextSizePx);
@@ -137,7 +139,19 @@
int height = MeasureSpec.getSize(heightMeasureSpec);
int visibleCount = getVisibleButtonsCount();
- if (visibleCount > 0) {
+ if (visibleCount == 0) {
+ // do nothing
+ } else if (mIsVertical) {
+ int widthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
+ int heightSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST);
+
+ for (ButtonDropTarget button : mDropTargets) {
+ if (button.getVisibility() != GONE) {
+ button.setTextVisible(false);
+ button.measure(widthSpec, heightSpec);
+ }
+ }
+ } else {
int availableWidth = width / visibleCount;
boolean textVisible = true;
for (ButtonDropTarget buttons : mDropTargets) {
@@ -162,91 +176,31 @@
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
int visibleCount = getVisibleButtonsCount();
if (visibleCount == 0) {
- return;
- }
+ // do nothing
+ } else if (mIsVertical) {
+ int gap = getResources().getDimensionPixelSize(R.dimen.drop_target_vertical_gap);
+ int start = gap;
+ int end;
- Launcher launcher = Launcher.getLauncher(getContext());
- Workspace workspace = launcher.getWorkspace();
- DeviceProfile dp = launcher.getDeviceProfile();
- int buttonHorizontalPadding = dp.dropTargetHorizontalPaddingPx;
- int buttonVerticalPadding = dp.dropTargetVerticalPaddingPx;
- int barCenter = (right - left) / 2;
-
- ButtonDropTarget[] visibleButtons = Arrays.stream(mDropTargets)
- .filter(b -> b.getVisibility() != GONE)
- .toArray(ButtonDropTarget[]::new);
- Arrays.stream(visibleButtons).forEach(
- b -> b.setPadding(buttonHorizontalPadding, buttonVerticalPadding,
- buttonHorizontalPadding, buttonVerticalPadding));
-
- if (visibleCount == 1) {
- ButtonDropTarget button = visibleButtons[0];
- button.layout(barCenter - (button.getMeasuredWidth() / 2), 0,
- barCenter + (button.getMeasuredWidth() / 2), button.getMeasuredHeight());
- } else if (visibleCount == 2) {
- int buttonGap = dp.dropTargetGapPx;
-
- if (dp.isTwoPanels) {
- ButtonDropTarget leftButton = visibleButtons[0];
- leftButton.layout(barCenter - leftButton.getMeasuredWidth() - (buttonGap / 2), 0,
- barCenter - (buttonGap / 2), leftButton.getMeasuredHeight());
-
- ButtonDropTarget rightButton = visibleButtons[1];
- rightButton.layout(barCenter + (buttonGap / 2), 0,
- barCenter + rightButton.getMeasuredWidth() + (buttonGap / 2),
- rightButton.getMeasuredHeight());
- } else if (dp.isTablet) {
- int numberOfMargins = visibleCount - 1;
- int buttonWidths = Arrays.stream(mDropTargets)
- .filter(b -> b.getVisibility() != GONE)
- .mapToInt(ButtonDropTarget::getMeasuredWidth)
- .sum();
- int totalWidth = buttonWidths + (numberOfMargins * buttonGap);
- int buttonsStartMargin = barCenter - (totalWidth / 2);
-
- int start = buttonsStartMargin;
- for (ButtonDropTarget button : visibleButtons) {
- int margin = (start != buttonsStartMargin) ? buttonGap : 0;
- button.layout(start + margin, 0, start + margin + button.getMeasuredWidth(),
- button.getMeasuredHeight());
- start += button.getMeasuredWidth() + margin;
+ for (ButtonDropTarget button : mDropTargets) {
+ if (button.getVisibility() != GONE) {
+ end = start + button.getMeasuredHeight();
+ button.layout(0, start, button.getMeasuredWidth(), end);
+ start = end + gap;
}
- } else if (mIsVertical) {
- // Center buttons over workspace, not screen.
- int verticalCenter = (workspace.getRight() - workspace.getLeft()) / 2;
- ButtonDropTarget leftButton = visibleButtons[0];
- leftButton.layout(verticalCenter - leftButton.getMeasuredWidth() - (buttonGap / 2),
- 0, verticalCenter - (buttonGap / 2), leftButton.getMeasuredHeight());
+ }
+ } else {
+ int frameSize = (right - left) / visibleCount;
- ButtonDropTarget rightButton = visibleButtons[1];
- rightButton.layout(verticalCenter + (buttonGap / 2), 0,
- verticalCenter + rightButton.getMeasuredWidth() + (buttonGap / 2),
- rightButton.getMeasuredHeight());
- } else if (dp.isPhone) {
- // Buttons aligned to outer edges of scaled workspace.
- float shrunkTop = dp.getWorkspaceSpringLoadShrunkTop();
- float shrunkBottom = dp.getWorkspaceSpringLoadShrunkBottom();
- float scale =
- (shrunkBottom - shrunkTop) / launcher.getWorkspace().getNormalChildHeight();
- int workspaceWidth = (int) (launcher.getWorkspace().getNormalChildWidth() * scale);
- int start = barCenter - (workspaceWidth / 2);
- int end = barCenter + (workspaceWidth / 2);
-
- ButtonDropTarget leftButton = visibleButtons[0];
- ButtonDropTarget rightButton = visibleButtons[1];
-
- // If the text within the buttons is too long, the buttons can overlap
- int overlap = start + leftButton.getMeasuredWidth() + rightButton.getMeasuredWidth()
- - end;
- if (overlap > 0) {
- start -= overlap / 2;
- end += overlap / 2;
+ int start = frameSize / 2;
+ int halfWidth;
+ for (ButtonDropTarget button : mDropTargets) {
+ if (button.getVisibility() != GONE) {
+ halfWidth = button.getMeasuredWidth() / 2;
+ button.layout(start - halfWidth, 0,
+ start + halfWidth, button.getMeasuredHeight());
+ start = start + frameSize;
}
-
- leftButton.layout(start, 0, start + leftButton.getMeasuredWidth(),
- leftButton.getMeasuredHeight());
- rightButton.layout(end - rightButton.getMeasuredWidth(), 0, end,
- rightButton.getMeasuredHeight());
}
}
}
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index a7fc2f5..8b19a19 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -324,14 +324,37 @@
setPageSpacing(Math.max(maxInsets, maxPadding));
}
- updateCellLayoutPadding();
+ updateWorkspaceScreensPadding();
updateWorkspaceWidgetsSizes();
}
- private void updateCellLayoutPadding() {
- Rect padding = mLauncher.getDeviceProfile().cellLayoutPaddingPx;
- mWorkspaceScreens.forEach(
- s -> s.setPadding(padding.left, padding.top, padding.right, padding.bottom));
+ private void updateWorkspaceScreensPadding() {
+ DeviceProfile grid = mLauncher.getDeviceProfile();
+ int paddingLeftRight = grid.cellLayoutPaddingLeftRightPx;
+ int paddingBottom = grid.cellLayoutBottomPaddingPx;
+
+ int panelCount = getPanelCount();
+ int rightPanelModulus = mIsRtl ? 0 : panelCount - 1;
+ int leftPanelModulus = mIsRtl ? panelCount - 1 : 0;
+ int numberOfScreens = mScreenOrder.size();
+ for (int i = 0; i < numberOfScreens; i++) {
+ int paddingLeft = paddingLeftRight;
+ int paddingRight = paddingLeftRight;
+ // Add missing cellLayout border in-between panels.
+ if (panelCount > 1) {
+ if (i % panelCount == leftPanelModulus) {
+ paddingRight += grid.cellLayoutBorderSpacePx.x / 2;
+ } else if (i % panelCount == rightPanelModulus) { // right side panel
+ paddingLeft += grid.cellLayoutBorderSpacePx.x / 2;
+ } else { // middle panel
+ paddingLeft += grid.cellLayoutBorderSpacePx.x / 2;
+ paddingRight += grid.cellLayoutBorderSpacePx.x / 2;
+ }
+ }
+ // SparseArrayMap doesn't keep the order
+ mWorkspaceScreens.get(mScreenOrder.get(i))
+ .setPadding(paddingLeft, 0, paddingRight, paddingBottom);
+ }
}
private void updateWorkspaceWidgetsSizes() {
@@ -629,7 +652,7 @@
mLauncher.getStateManager().getState(), newScreen, insertIndex);
updatePageScrollValues();
- updateCellLayoutPadding();
+ updateWorkspaceScreensPadding();
return newScreen;
}
diff --git a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
index 3dfece7..cc17064 100644
--- a/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
+++ b/src/com/android/launcher3/graphics/LauncherPreviewRenderer.java
@@ -225,21 +225,21 @@
mHotseat.resetLayout(false);
CellLayout firstScreen = mRootView.findViewById(R.id.workspace);
- firstScreen.setPadding(mDp.workspacePadding.left + mDp.cellLayoutPaddingPx.left,
- mDp.workspacePadding.top + mDp.cellLayoutPaddingPx.top,
+ firstScreen.setPadding(mDp.workspacePadding.left + mDp.cellLayoutPaddingLeftRightPx,
+ mDp.workspacePadding.top,
(mDp.isTwoPanels ? mDp.cellLayoutBorderSpacePx.x / 2
- : mDp.workspacePadding.right) + mDp.cellLayoutPaddingPx.right,
- mDp.workspacePadding.bottom + mDp.cellLayoutPaddingPx.bottom
+ : mDp.workspacePadding.right) + mDp.cellLayoutPaddingLeftRightPx,
+ mDp.workspacePadding.bottom
);
mWorkspaceScreens.put(FIRST_SCREEN_ID, firstScreen);
if (mDp.isTwoPanels) {
CellLayout rightPanel = mRootView.findViewById(R.id.workspace_right);
rightPanel.setPadding(
- mDp.cellLayoutBorderSpacePx.x / 2 + mDp.cellLayoutPaddingPx.left,
- mDp.workspacePadding.top + mDp.cellLayoutPaddingPx.top,
- mDp.workspacePadding.right + mDp.cellLayoutPaddingPx.right,
- mDp.workspacePadding.bottom + mDp.cellLayoutPaddingPx.bottom
+ mDp.cellLayoutBorderSpacePx.x / 2 + mDp.cellLayoutPaddingLeftRightPx,
+ mDp.workspacePadding.top,
+ mDp.workspacePadding.right + mDp.cellLayoutPaddingLeftRightPx,
+ mDp.workspacePadding.bottom
);
mWorkspaceScreens.put(Workspace.SECOND_SCREEN_ID, rightPanel);
}
diff --git a/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java b/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java
index 9201006..967f2c8 100644
--- a/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java
+++ b/src/com/android/launcher3/secondarydisplay/SecondaryDragLayer.java
@@ -113,17 +113,13 @@
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child == mAppsView) {
- int horizontalPadding = (2 * grid.desiredWorkspaceHorizontalMarginPx)
- + grid.cellLayoutPaddingPx.left + grid.cellLayoutPaddingPx.right;
- int verticalPadding =
- grid.cellLayoutPaddingPx.top + grid.cellLayoutPaddingPx.bottom;
+ int padding = 2 * (grid.desiredWorkspaceHorizontalMarginPx
+ + grid.cellLayoutPaddingLeftRightPx);
- int maxWidth =
- grid.allAppsCellWidthPx * grid.numShownAllAppsColumns + horizontalPadding;
+ int maxWidth = grid.allAppsCellWidthPx * grid.numShownAllAppsColumns + padding;
int appsWidth = Math.min(width, maxWidth);
- int maxHeight =
- grid.allAppsCellHeightPx * grid.numShownAllAppsColumns + verticalPadding;
+ int maxHeight = grid.allAppsCellHeightPx * grid.numShownAllAppsColumns + padding;
int appsHeight = Math.min(height, maxHeight);
mAppsView.measure(
diff --git a/src/com/android/launcher3/states/SpringLoadedState.java b/src/com/android/launcher3/states/SpringLoadedState.java
index 9be3cc5..d52594e 100644
--- a/src/com/android/launcher3/states/SpringLoadedState.java
+++ b/src/com/android/launcher3/states/SpringLoadedState.java
@@ -18,6 +18,7 @@
import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_HOME;
import android.content.Context;
+import android.graphics.Rect;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Launcher;
@@ -51,15 +52,28 @@
return super.getWorkspaceScaleAndTranslation(launcher);
}
- float shrunkTop = grid.getWorkspaceSpringLoadShrunkTop();
- float shrunkBottom = grid.getWorkspaceSpringLoadShrunkBottom();
- float scale = (shrunkBottom - shrunkTop) / ws.getNormalChildHeight();
+ if (grid.isVerticalBarLayout()) {
+ float scale = grid.workspaceSpringLoadShrinkFactor;
+ return new ScaleAndTranslation(scale, 0, 0);
+ }
+
+ float scale = grid.workspaceSpringLoadShrinkFactor;
+ Rect insets = launcher.getDragLayer().getInsets();
+
+ float scaledHeight = scale * ws.getNormalChildHeight();
+ float shrunkTop = insets.top + grid.dropTargetBarSizePx;
+ float shrunkBottom = ws.getMeasuredHeight() - insets.bottom
+ - grid.workspacePadding.bottom
+ - grid.workspaceSpringLoadedBottomSpace;
+ float totalShrunkSpace = shrunkBottom - shrunkTop;
+
+ float desiredCellTop = shrunkTop + (totalShrunkSpace - scaledHeight) / 2;
float halfHeight = ws.getHeight() / 2;
float myCenter = ws.getTop() + halfHeight;
float cellTopFromCenter = halfHeight - ws.getChildAt(0).getTop();
float actualCellTop = myCenter - cellTopFromCenter * scale;
- return new ScaleAndTranslation(scale, 0, (shrunkTop - actualCellTop) / scale);
+ return new ScaleAndTranslation(scale, 0, (desiredCellTop - actualCellTop) / scale);
}
@Override