diff options
Diffstat (limited to 'src/com/android/launcher3/DeviceProfile.java')
-rw-r--r-- | src/com/android/launcher3/DeviceProfile.java | 86 |
1 files changed, 29 insertions, 57 deletions
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 8470b39a3..e67ec197a 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -43,18 +43,16 @@ import java.util.Comparator; class DeviceProfileQuery { - DeviceProfile profile; float widthDps; float heightDps; float value; PointF dimens; - DeviceProfileQuery(DeviceProfile p, float v) { - widthDps = p.minWidthDps; - heightDps = p.minHeightDps; + DeviceProfileQuery(float w, float h, float v) { + widthDps = w; + heightDps = h; value = v; - dimens = new PointF(widthDps, heightDps); - profile = p; + dimens = new PointF(w, h); } } @@ -74,9 +72,6 @@ public class DeviceProfile { private int iconDrawablePaddingOriginalPx; private float hotseatIconSize; - int defaultLayoutId; - int defaultNoAllAppsLayoutId; - boolean isLandscape; boolean isTablet; boolean isLargeTablet; @@ -132,7 +127,7 @@ public class DeviceProfile { private ArrayList<DeviceProfileCallbacks> mCallbacks = new ArrayList<DeviceProfileCallbacks>(); DeviceProfile(String n, float w, float h, float r, float c, - float is, float its, float hs, float his, int dlId, int dnalId) { + float is, float its, float hs, float his) { // Ensure that we have an odd number of hotseat items (since we need to place all apps) if (!LauncherAppState.isDisableAllApps() && hs % 2 == 0) { throw new RuntimeException("All Device Profiles must have an odd number of hotseat spaces"); @@ -147,8 +142,6 @@ public class DeviceProfile { iconTextSize = its; numHotseatIcons = hs; hotseatIconSize = his; - defaultLayoutId = dlId; - defaultNoAllAppsLayoutId = dnalId; } DeviceProfile(Context context, @@ -189,32 +182,29 @@ public class DeviceProfile { overviewModeScaleFactor = res.getInteger(R.integer.config_dynamic_grid_overview_scale_percentage) / 100f; - // Find the closes profile given the width/height + // Interpolate the rows for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p, 0f)); + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numRows)); } - DeviceProfile closestProfile = findClosestDeviceProfile(minWidth, minHeight, points); - - // Snap to the closest row count - numRows = closestProfile.numRows; - - // Snap to the closest column count - numColumns = closestProfile.numColumns; - - // Snap to the closest hotseat size - numHotseatIcons = closestProfile.numHotseatIcons; + numRows = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); + // Interpolate the columns + points.clear(); + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numColumns)); + } + numColumns = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); + // Interpolate the hotseat length + points.clear(); + for (DeviceProfile p : profiles) { + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.numHotseatIcons)); + } + numHotseatIcons = Math.round(invDistWeightedInterpolate(minWidth, minHeight, points)); hotseatAllAppsRank = (int) (numHotseatIcons / 2); - // Snap to the closest default layout id - defaultLayoutId = closestProfile.defaultLayoutId; - - // Snap to the closest default no all-apps layout id - defaultNoAllAppsLayoutId = closestProfile.defaultNoAllAppsLayoutId; - // Interpolate the icon size points.clear(); for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p, p.iconSize)); + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconSize)); } iconSize = invDistWeightedInterpolate(minWidth, minHeight, points); // AllApps uses the original non-scaled icon size @@ -223,7 +213,7 @@ public class DeviceProfile { // Interpolate the icon text size points.clear(); for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p, p.iconTextSize)); + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.iconTextSize)); } iconTextSize = invDistWeightedInterpolate(minWidth, minHeight, points); iconDrawablePaddingOriginalPx = @@ -234,7 +224,7 @@ public class DeviceProfile { // Interpolate the hotseat icon size points.clear(); for (DeviceProfile p : profiles) { - points.add(new DeviceProfileQuery(p, p.hotseatIconSize)); + points.add(new DeviceProfileQuery(p.minWidthDps, p.minHeightDps, p.hotseatIconSize)); } // Hotseat hotseatIconSize = invDistWeightedInterpolate(minWidth, minHeight, points); @@ -408,28 +398,6 @@ public class DeviceProfile { return (float) (1f / Math.pow(d, pow)); } - /** Returns the closest device profile given the width and height and a list of profiles */ - private DeviceProfile findClosestDeviceProfile(float width, float height, - ArrayList<DeviceProfileQuery> points) { - return findClosestDeviceProfiles(width, height, points).get(0).profile; - } - - /** Returns the closest device profiles ordered by closeness to the specified width and height */ - private ArrayList<DeviceProfileQuery> findClosestDeviceProfiles(float width, float height, - ArrayList<DeviceProfileQuery> points) { - final PointF xy = new PointF(width, height); - - // Sort the profiles by their closeness to the dimensions - ArrayList<DeviceProfileQuery> pointsByNearness = points; - Collections.sort(pointsByNearness, new Comparator<DeviceProfileQuery>() { - public int compare(DeviceProfileQuery a, DeviceProfileQuery b) { - return (int) (dist(xy, a.dimens) - dist(xy, b.dimens)); - } - }); - - return pointsByNearness; - } - private float invDistWeightedInterpolate(float width, float height, ArrayList<DeviceProfileQuery> points) { float sum = 0; @@ -438,8 +406,12 @@ public class DeviceProfile { float kNearestNeighbors = 3; final PointF xy = new PointF(width, height); - ArrayList<DeviceProfileQuery> pointsByNearness = findClosestDeviceProfiles(width, height, - points); + ArrayList<DeviceProfileQuery> pointsByNearness = points; + Collections.sort(pointsByNearness, new Comparator<DeviceProfileQuery>() { + public int compare(DeviceProfileQuery a, DeviceProfileQuery b) { + return (int) (dist(xy, a.dimens) - dist(xy, b.dimens)); + } + }); for (int i = 0; i < pointsByNearness.size(); ++i) { DeviceProfileQuery p = pointsByNearness.get(i); |