diff options
author | Tony Wickham <twickham@google.com> | 2015-09-23 18:37:57 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2015-10-08 09:23:10 -0700 |
commit | d6b4037b093445fefa7d036da339dd549fae7a9b (patch) | |
tree | 6a527ffee467c5d53fb3364a5243379894aa9bb2 | |
parent | 53d3be63a5ab056280279bcb13089faae0e7796f (diff) | |
download | android_packages_apps_Trebuchet-d6b4037b093445fefa7d036da339dd549fae7a9b.tar.gz android_packages_apps_Trebuchet-d6b4037b093445fefa7d036da339dd549fae7a9b.tar.bz2 android_packages_apps_Trebuchet-d6b4037b093445fefa7d036da339dd549fae7a9b.zip |
Grid adjustments, specifically for Ryu.
> Less than 14% of the screen is used for left/right workspace padding.
(To be clear, this means 7% for the left and 7% for the right.)
> Hotseat icons are the same size as workspace icons.
> Far left and right hotseat edges line up with workspace edges.
> All Apps button is scaled down 8dp.
Bug: 24003478
Change-Id: Idb057ab0f6ba29e7fd93feac7573ca2e07c7e839
-rw-r--r-- | res/values-sw720dp/dimens.xml | 1 | ||||
-rw-r--r-- | res/values/dimens.xml | 1 | ||||
-rw-r--r-- | src/com/android/launcher3/DeviceProfile.java | 40 | ||||
-rw-r--r-- | src/com/android/launcher3/Hotseat.java | 7 | ||||
-rw-r--r-- | src/com/android/launcher3/InvariantDeviceProfile.java | 6 |
5 files changed, 39 insertions, 16 deletions
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml index 807fab919..b9e28a95f 100644 --- a/res/values-sw720dp/dimens.xml +++ b/res/values-sw720dp/dimens.xml @@ -16,6 +16,7 @@ <resources> <!-- All Apps --> + <dimen name="all_apps_button_scale_down">8dp</dimen> <dimen name="all_apps_search_bar_height">54dp</dimen> <dimen name="all_apps_icon_top_bottom_padding">14dp</dimen> <dimen name="all_apps_empty_search_message_top_offset">64dp</dimen> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 36721797e..28ede6785 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -63,6 +63,7 @@ <dimen name="container_fastscroll_popup_text_size">48dp</dimen> <!-- All Apps --> + <dimen name="all_apps_button_scale_down">0dp</dimen> <dimen name="all_apps_grid_view_start_margin">0dp</dimen> <dimen name="all_apps_grid_section_y_offset">8dp</dimen> <dimen name="all_apps_grid_section_text_size">24sp</dimen> diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 47c5ccc9e..b297658b4 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -49,6 +49,12 @@ public class DeviceProfile { public final int heightPx; public final int availableWidthPx; public final int availableHeightPx; + /** + * The maximum amount of left/right workspace padding as a percentage of the screen width. + * To be clear, this means that up to 7% of the screen width can be used as left padding, and + * 7% of the screen width can be used as right padding. + */ + private static final float MAX_HORIZONTAL_PADDING_PERCENT = 0.14f; // Overview mode private final int overviewModeMinIconZoneHeightPx; @@ -167,7 +173,8 @@ public class DeviceProfile { private void computeAllAppsButtonSize(Context context) { Resources res = context.getResources(); float padding = res.getInteger(R.integer.config_allAppsButtonPaddingPercent) / 100f; - allAppsButtonVisualSize = (int) (hotseatIconSizePx * (1 - padding)); + allAppsButtonVisualSize = (int) (hotseatIconSizePx * (1 - padding)) - context.getResources() + .getDimensionPixelSize(R.dimen.all_apps_button_scale_down); } private void updateAvailableDimensions(DisplayMetrics dm, Resources res) { @@ -302,12 +309,15 @@ public class DeviceProfile { int height = getCurrentHeight(); int paddingTop = searchBarBounds.bottom; int paddingBottom = hotseatBarHeightPx + pageIndicatorHeightPx; - int availableWidth = Math.max(0, width - (int) ((inv.numColumns * cellWidthPx) + - (inv.numColumns * gapScale * cellWidthPx))); - int availableHeight = Math.max(0, height - paddingTop - paddingBottom + // The amount of screen space available for left/right padding. + int availablePaddingX = Math.max(0, width - (int) ((inv.numColumns * cellWidthPx) + + ((inv.numColumns - 1) * gapScale * cellWidthPx))); + availablePaddingX = (int) Math.min(availablePaddingX, + width * MAX_HORIZONTAL_PADDING_PERCENT); + int availablePaddingY = Math.max(0, height - paddingTop - paddingBottom - (int) (2 * inv.numRows * cellHeightPx)); - padding.set(availableWidth / 2, paddingTop + availableHeight / 2, - availableWidth / 2, paddingBottom + availableHeight / 2); + padding.set(availablePaddingX / 2, paddingTop + availablePaddingY / 2, + availablePaddingX / 2, paddingBottom + availablePaddingY / 2); } else { // Pad the top and bottom of the workspace with search/hotseat bar sizes padding.set(desiredWorkspaceLeftRightMarginPx - defaultWidgetPadding.left, @@ -420,6 +430,13 @@ public class DeviceProfile { // Layout the hotseat View hotseat = launcher.findViewById(R.id.hotseat); lp = (FrameLayout.LayoutParams) hotseat.getLayoutParams(); + // We want the edges of the hotseat to line up with the edges of the workspace, but the + // icons in the hotseat are a different size, and so don't line up perfectly. To account for + // this, we pad the left and right of the hotseat with half of the difference of a workspace + // cell vs a hotseat cell. + float workspaceCellWidth = (float) getCurrentWidth() / inv.numColumns; + float hotseatCellWidth = (float) getCurrentWidth() / inv.numHotseatIcons; + int hotseatAdjustment = Math.round((workspaceCellWidth - hotseatCellWidth) / 2); if (hasVerticalBarLayout) { // Vertical hotseat -- The hotseat is fixed in the layout to be on the right of the // screen regardless of RTL @@ -432,17 +449,18 @@ public class DeviceProfile { lp.gravity = Gravity.BOTTOM; lp.width = LayoutParams.MATCH_PARENT; lp.height = hotseatBarHeightPx; - hotseat.setPadding(edgeMarginPx + padding.left, 0, - edgeMarginPx + padding.right, - 2 * edgeMarginPx); + hotseat.findViewById(R.id.layout).setPadding( + hotseatAdjustment + padding.left, 0, + hotseatAdjustment + padding.right, 2 * edgeMarginPx); } else { // For phones, layout the hotseat without any bottom margin // to ensure that we have space for the folders lp.gravity = Gravity.BOTTOM; lp.width = LayoutParams.MATCH_PARENT; lp.height = hotseatBarHeightPx; - hotseat.findViewById(R.id.layout).setPadding(2 * edgeMarginPx, 0, - 2 * edgeMarginPx, 0); + hotseat.findViewById(R.id.layout).setPadding( + hotseatAdjustment + padding.left, 0, + hotseatAdjustment + padding.right, 0); } hotseat.setLayoutParams(lp); diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 17fdeb1dc..98912f56e 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -17,8 +17,7 @@ package com.android.launcher3; import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.AttributeSet; @@ -118,6 +117,10 @@ public class Hotseat extends FrameLayout Drawable d = context.getResources().getDrawable(R.drawable.all_apps_button_icon); mLauncher.resizeIconDrawable(d); + int scaleDownPx = getResources().getDimensionPixelSize(R.dimen.all_apps_button_scale_down); + Rect bounds = d.getBounds(); + d.setBounds(bounds.left, bounds.top + scaleDownPx / 2, bounds.right - scaleDownPx, + bounds.bottom - scaleDownPx / 2); allAppsButton.setCompoundDrawables(null, d, null, null); allAppsButton.setContentDescription(context.getString(R.string.all_apps_button_label)); diff --git a/src/com/android/launcher3/InvariantDeviceProfile.java b/src/com/android/launcher3/InvariantDeviceProfile.java index ae204c40c..d91104acb 100644 --- a/src/com/android/launcher3/InvariantDeviceProfile.java +++ b/src/com/android/launcher3/InvariantDeviceProfile.java @@ -74,7 +74,7 @@ public class InvariantDeviceProfile { /** * Number of icons inside the hotseat area. */ - float numHotseatIcons; + int numHotseatIcons; float hotseatIconSize; int defaultLayoutId; @@ -95,7 +95,7 @@ public class InvariantDeviceProfile { } InvariantDeviceProfile(String n, float w, float h, int r, int c, int fr, int fc, int maapc, - float is, float its, float hs, float his, int dlId) { + float is, float its, int hs, float his, int dlId) { // Ensure that we have an odd number of hotseat items (since we need to place all apps) if (hs % 2 == 0) { throw new RuntimeException("All Device Profiles must have an odd number of hotseat spaces"); @@ -195,7 +195,7 @@ public class InvariantDeviceProfile { 575, 904, 5, 6, 4, 5, 4, 72, 14.4f, 7, 60, R.xml.default_workspace_5x6)); // Larger tablet profiles always have system bars on the top & bottom predefinedDeviceProfiles.add(new InvariantDeviceProfile("Nexus 10", - 727, 1207, 5, 6, 4, 5, 4, 76, 14.4f, 7, 64, R.xml.default_workspace_5x6)); + 727, 1207, 5, 6, 4, 5, 4, 76, 14.4f, 7, 76, R.xml.default_workspace_5x6)); predefinedDeviceProfiles.add(new InvariantDeviceProfile("20-inch Tablet", 1527, 2527, 7, 7, 6, 6, 4, 100, 20, 7, 72, R.xml.default_workspace_4x4)); return predefinedDeviceProfiles; |