summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/DynamicGrid.java
diff options
context:
space:
mode:
authorWinson Chung <winsonc@google.com>2013-08-22 16:15:50 -0700
committerWinson Chung <winsonc@google.com>2013-08-23 12:13:02 -0700
commit892c74d460ad98c6306420e1127c9aa3e505ba25 (patch)
tree5abbb89efdad34335ef876284d520f6c7a705e3f /src/com/android/launcher3/DynamicGrid.java
parentfe14e04987a8baf77f0ffbd6d66839f33a4f0474 (diff)
downloadandroid_packages_apps_Trebuchet-892c74d460ad98c6306420e1127c9aa3e505ba25.tar.gz
android_packages_apps_Trebuchet-892c74d460ad98c6306420e1127c9aa3e505ba25.tar.bz2
android_packages_apps_Trebuchet-892c74d460ad98c6306420e1127c9aa3e505ba25.zip
Fixing folders to always show in view, removing old assets and references to LauncherModel count.
Diffstat (limited to 'src/com/android/launcher3/DynamicGrid.java')
-rw-r--r--src/com/android/launcher3/DynamicGrid.java71
1 files changed, 52 insertions, 19 deletions
diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java
index 37cccfbd3..16af64814 100644
--- a/src/com/android/launcher3/DynamicGrid.java
+++ b/src/com/android/launcher3/DynamicGrid.java
@@ -68,6 +68,8 @@ class DeviceProfile {
int widthPx;
int heightPx;
+ int availableWidthPx;
+ int availableHeightPx;
int iconSizePx;
int iconTextSizePx;
int cellWidthPx;
@@ -100,16 +102,15 @@ class DeviceProfile {
}
DeviceProfile(ArrayList<DeviceProfile> profiles,
- float minWidth, int minWidthPx,
- float minHeight, int minHeightPx,
+ float minWidth, float minHeight,
int wPx, int hPx,
+ int awPx, int ahPx,
Resources resources) {
DisplayMetrics dm = resources.getDisplayMetrics();
ArrayList<DeviceProfileQuery> points =
new ArrayList<DeviceProfileQuery>();
transposeLayoutWithOrientation =
resources.getBoolean(R.bool.hotseat_transpose_layout_with_orientation);
- updateFromConfiguration(resources, wPx, hPx);
minWidthDps = minWidth;
minHeightDps = minHeight;
@@ -133,16 +134,16 @@ class DeviceProfile {
points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconSize));
}
iconSize = invDistWeightedInterpolate(minWidth, minHeight, points);
- iconSizePx = (int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
- iconSize, dm));
+ iconSizePx = DynamicGrid.pxFromDp(iconSize, dm);
+
// Interpolate the icon text size
points.clear();
for (DeviceProfile p : profiles) {
points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconTextSize));
}
iconTextSize = invDistWeightedInterpolate(minWidth, minHeight, points);
- iconTextSizePx = (int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
- iconTextSize, dm));
+ iconTextSizePx = DynamicGrid.pxFromSp(iconTextSize, dm);
+
// Interpolate the hotseat size
points.clear();
for (DeviceProfile p : profiles) {
@@ -154,14 +155,12 @@ class DeviceProfile {
for (DeviceProfile p : profiles) {
points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.hotseatIconSize));
}
-
// Hotseat
hotseatIconSize = invDistWeightedInterpolate(minWidth, minHeight, points);
- hotseatIconSizePx = (int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
- hotseatIconSize, dm));
- hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx;
- hotseatCellWidthPx = iconSizePx;
- hotseatCellHeightPx = iconSizePx;
+ hotseatIconSizePx = DynamicGrid.pxFromDp(hotseatIconSize, dm);
+
+ // Calculate other vars based on Configuration
+ updateFromConfiguration(resources, wPx, hPx, awPx, ahPx);
// Search Bar
searchBarSpaceMaxWidthPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width);
@@ -176,6 +175,27 @@ class DeviceProfile {
cellWidthPx = iconSizePx;
cellHeightPx = iconSizePx + (int) Math.ceil(fm.bottom - fm.top);
+ // At this point, if the cells do not fit into the available height, then we need
+ // to shrink the icon size
+ /*
+ Rect padding = getWorkspacePadding(isLandscape ?
+ CellLayout.LANDSCAPE : CellLayout.PORTRAIT);
+ int h = (int) (numRows * cellHeightPx) + padding.top + padding.bottom;
+ if (h > availableHeightPx) {
+ float delta = h - availableHeightPx;
+ int deltaPx = (int) Math.ceil(delta / numRows);
+ iconSizePx -= deltaPx;
+ iconSize = DynamicGrid.dpiFromPx(iconSizePx, dm);
+ cellWidthPx = iconSizePx;
+ cellHeightPx = iconSizePx + (int) Math.ceil(fm.bottom - fm.top);
+ }
+ */
+
+ // Hotseat
+ hotseatBarHeightPx = iconSizePx + 4 * edgeMarginPx;
+ hotseatCellWidthPx = iconSizePx;
+ hotseatCellHeightPx = iconSizePx;
+
// Folder
folderCellWidthPx = cellWidthPx + 3 * edgeMarginPx;
folderCellHeightPx = cellHeightPx + edgeMarginPx;
@@ -183,13 +203,17 @@ class DeviceProfile {
folderIconSizePx = iconSizePx + 2 * -folderBackgroundOffset;
}
- void updateFromConfiguration(Resources resources, int wPx, int hPx) {
+ void updateFromConfiguration(Resources resources, int wPx, int hPx,
+ int awPx, int ahPx) {
+ DisplayMetrics dm = resources.getDisplayMetrics();
isLandscape = (resources.getConfiguration().orientation ==
Configuration.ORIENTATION_LANDSCAPE);
isTablet = resources.getBoolean(R.bool.is_tablet);
isLargeTablet = resources.getBoolean(R.bool.is_large_tablet);
widthPx = wPx;
heightPx = hPx;
+ availableWidthPx = awPx;
+ availableHeightPx = ahPx;
}
private float dist(PointF p0, PointF p1) {
@@ -415,13 +439,22 @@ public class DynamicGrid {
private float mMinWidth;
private float mMinHeight;
- public static int dpiFromPx(int size, DisplayMetrics metrics){
+ public static float dpiFromPx(int size, DisplayMetrics metrics){
float densityRatio = (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT;
- return (int) Math.round(size / densityRatio);
+ return (size / densityRatio);
+ }
+ public static int pxFromDp(float size, DisplayMetrics metrics) {
+ return (int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ size, metrics));
+ }
+ public static int pxFromSp(float size, DisplayMetrics metrics) {
+ return (int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
+ size, metrics));
}
public DynamicGrid(Resources resources, int minWidthPx, int minHeightPx,
- int widthPx, int heightPx) {
+ int widthPx, int heightPx,
+ int awPx, int ahPx) {
DisplayMetrics dm = resources.getDisplayMetrics();
ArrayList<DeviceProfile> deviceProfiles =
new ArrayList<DeviceProfile>();
@@ -456,9 +489,9 @@ public class DynamicGrid {
mMinWidth = dpiFromPx(minWidthPx, dm);
mMinHeight = dpiFromPx(minHeightPx, dm);
mProfile = new DeviceProfile(deviceProfiles,
- mMinWidth, minWidthPx,
- mMinHeight, minHeightPx,
+ mMinWidth, mMinHeight,
widthPx, heightPx,
+ awPx, ahPx,
resources);
}