Merge "Making launcher update widgets with min/max extents" into jb-dev
This commit is contained in:
@@ -307,11 +307,38 @@ public class AppWidgetResizeFrame extends FrameLayout {
|
||||
lp.cellVSpan = spanY;
|
||||
mRunningVInc += vSpanDelta;
|
||||
mRunningHInc += hSpanDelta;
|
||||
if (!onDismiss) {
|
||||
updateWidgetSizeRanges(mWidgetView, mLauncher, spanX, spanY);
|
||||
}
|
||||
}
|
||||
|
||||
mWidgetView.requestLayout();
|
||||
}
|
||||
|
||||
static void updateWidgetSizeRanges(AppWidgetHostView widgetView, Launcher launcher,
|
||||
int spanX, int spanY) {
|
||||
Rect landMetrics = Workspace.getCellLayoutMetrics(launcher, CellLayout.LANDSCAPE);
|
||||
Rect portMetrics = Workspace.getCellLayoutMetrics(launcher, CellLayout.PORTRAIT);
|
||||
final float density = launcher.getResources().getDisplayMetrics().density;
|
||||
|
||||
// Compute landscape size
|
||||
int cellWidth = landMetrics.left;
|
||||
int cellHeight = landMetrics.top;
|
||||
int widthGap = landMetrics.right;
|
||||
int heightGap = landMetrics.bottom;
|
||||
int landWidth = (int) ((spanX * cellWidth + (spanX - 1) * widthGap) / density);
|
||||
int landHeight = (int) ((spanY * cellHeight + (spanY - 1) * heightGap) / density);
|
||||
|
||||
// Compute portrait size
|
||||
cellWidth = portMetrics.left;
|
||||
cellHeight = portMetrics.top;
|
||||
widthGap = portMetrics.right;
|
||||
heightGap = portMetrics.bottom;
|
||||
int portWidth = (int) ((spanX * cellWidth + (spanX - 1) * widthGap) / density);
|
||||
int portHeight = (int) ((spanY * cellHeight + (spanY - 1) * heightGap) / density);
|
||||
|
||||
widgetView.updateAppWidgetSize(null, portWidth, landHeight, landWidth, portHeight);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the final step of the resize. Here we save the new widget size and position
|
||||
* to LauncherModel and animate the resize frame.
|
||||
|
||||
@@ -146,6 +146,9 @@ public class CellLayout extends ViewGroup {
|
||||
private static final boolean DESTRUCTIVE_REORDER = false;
|
||||
private static final boolean DEBUG_VISUALIZE_OCCUPIED = false;
|
||||
|
||||
static final int LANDSCAPE = 0;
|
||||
static final int PORTRAIT = 1;
|
||||
|
||||
private static final float REORDER_HINT_MAGNITUDE = 0.27f;
|
||||
private static final int REORDER_ANIMATION_DURATION = 150;
|
||||
private float mReorderHintAnimationMagnitude;
|
||||
@@ -910,11 +913,10 @@ public class CellLayout extends ViewGroup {
|
||||
return r;
|
||||
}
|
||||
|
||||
final int LANDSCAPE = 0;
|
||||
final int PORTRAIT = 1;
|
||||
void getCellLayoutMetrics(int measureWidth, int measureHeight, int orientation, Rect metrics) {
|
||||
int numWidthGaps = mCountX - 1;
|
||||
int numHeightGaps = mCountY - 1;
|
||||
static void getMetrics(Rect metrics, Resources res, int measureWidth, int measureHeight,
|
||||
int countX, int countY, int orientation) {
|
||||
int numWidthGaps = countX - 1;
|
||||
int numHeightGaps = countY - 1;
|
||||
|
||||
int widthGap;
|
||||
int heightGap;
|
||||
@@ -925,7 +927,7 @@ public class CellLayout extends ViewGroup {
|
||||
int paddingTop;
|
||||
int paddingBottom;
|
||||
|
||||
Resources res = getContext().getResources();
|
||||
int maxGap = res.getDimensionPixelSize(R.dimen.workspace_max_gap);
|
||||
if (orientation == LANDSCAPE) {
|
||||
cellWidth = res.getDimensionPixelSize(R.dimen.workspace_cell_width_land);
|
||||
cellHeight = res.getDimensionPixelSize(R.dimen.workspace_cell_height_land);
|
||||
@@ -950,18 +952,16 @@ public class CellLayout extends ViewGroup {
|
||||
if (widthGap < 0 || heightGap < 0) {
|
||||
int hSpace = measureWidth - paddingLeft - paddingRight;
|
||||
int vSpace = measureHeight - paddingTop - paddingBottom;
|
||||
int hFreeSpace = hSpace - (mCountX * cellWidth);
|
||||
int vFreeSpace = vSpace - (mCountY * cellHeight);
|
||||
widthGap = Math.min(mMaxGap, numWidthGaps > 0 ? (hFreeSpace / numWidthGaps) : 0);
|
||||
heightGap = Math.min(mMaxGap, numHeightGaps > 0 ? (vFreeSpace / numHeightGaps) : 0);
|
||||
int hFreeSpace = hSpace - (countX * cellWidth);
|
||||
int vFreeSpace = vSpace - (countY * cellHeight);
|
||||
widthGap = Math.min(maxGap, numWidthGaps > 0 ? (hFreeSpace / numWidthGaps) : 0);
|
||||
heightGap = Math.min(maxGap, numHeightGaps > 0 ? (vFreeSpace / numHeightGaps) : 0);
|
||||
}
|
||||
metrics.set(cellWidth, cellHeight, widthGap, heightGap);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
// TODO: currently ignoring padding
|
||||
|
||||
int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
|
||||
int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);
|
||||
|
||||
|
||||
@@ -1102,6 +1102,8 @@ public final class Launcher extends Activity
|
||||
|
||||
launcherInfo.hostView.setTag(launcherInfo);
|
||||
launcherInfo.hostView.setVisibility(View.VISIBLE);
|
||||
AppWidgetResizeFrame.updateWidgetSizeRanges(launcherInfo.hostView,
|
||||
this, launcherInfo.spanX, launcherInfo.spanY);
|
||||
mWorkspace.addInScreen(launcherInfo.hostView, container, screen, cellXY[0], cellXY[1],
|
||||
launcherInfo.spanX, launcherInfo.spanY, isWorkspaceLocked());
|
||||
|
||||
|
||||
@@ -122,6 +122,9 @@ public class Workspace extends SmoothPagedView
|
||||
private int mDragOverX = -1;
|
||||
private int mDragOverY = -1;
|
||||
|
||||
static Rect mLandscapeCellLayoutMetrics = null;
|
||||
static Rect mPortraitCellLayoutMetrics = null;
|
||||
|
||||
/**
|
||||
* The CellLayout that is currently being dragged over
|
||||
*/
|
||||
@@ -2389,6 +2392,44 @@ public class Workspace extends SmoothPagedView
|
||||
}
|
||||
}
|
||||
|
||||
static Rect getCellLayoutMetrics(Launcher launcher, int orientation) {
|
||||
Resources res = launcher.getResources();
|
||||
Display display = launcher.getWindowManager().getDefaultDisplay();
|
||||
Point smallestSize = new Point();
|
||||
Point largestSize = new Point();
|
||||
display.getCurrentSizeRange(smallestSize, largestSize);
|
||||
if (orientation == CellLayout.LANDSCAPE) {
|
||||
if (mLandscapeCellLayoutMetrics == null) {
|
||||
int paddingLeft = res.getDimensionPixelSize(R.dimen.workspace_left_padding_land);
|
||||
int paddingRight = res.getDimensionPixelSize(R.dimen.workspace_right_padding_land);
|
||||
int paddingTop = res.getDimensionPixelSize(R.dimen.workspace_top_padding_land);
|
||||
int paddingBottom = res.getDimensionPixelSize(R.dimen.workspace_bottom_padding_land);
|
||||
int width = largestSize.x - paddingLeft - paddingRight;
|
||||
int height = smallestSize.y - paddingTop - paddingBottom;
|
||||
mLandscapeCellLayoutMetrics = new Rect();
|
||||
CellLayout.getMetrics(mLandscapeCellLayoutMetrics, res,
|
||||
width, height, LauncherModel.getCellCountX(), LauncherModel.getCellCountY(),
|
||||
orientation);
|
||||
}
|
||||
return mLandscapeCellLayoutMetrics;
|
||||
} else if (orientation == CellLayout.PORTRAIT) {
|
||||
if (mPortraitCellLayoutMetrics == null) {
|
||||
int paddingLeft = res.getDimensionPixelSize(R.dimen.workspace_left_padding_land);
|
||||
int paddingRight = res.getDimensionPixelSize(R.dimen.workspace_right_padding_land);
|
||||
int paddingTop = res.getDimensionPixelSize(R.dimen.workspace_top_padding_land);
|
||||
int paddingBottom = res.getDimensionPixelSize(R.dimen.workspace_bottom_padding_land);
|
||||
int width = smallestSize.x - paddingLeft - paddingRight;
|
||||
int height = largestSize.y - paddingTop - paddingBottom;
|
||||
mPortraitCellLayoutMetrics = new Rect();
|
||||
CellLayout.getMetrics(mPortraitCellLayoutMetrics, res,
|
||||
width, height, LauncherModel.getCellCountX(), LauncherModel.getCellCountY(),
|
||||
orientation);
|
||||
}
|
||||
return mPortraitCellLayoutMetrics;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void onDragExit(DragObject d) {
|
||||
mDragEnforcer.onDragExit();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user