summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2015-09-23 18:37:57 -0700
committerTony Wickham <twickham@google.com>2015-10-08 09:23:10 -0700
commitd6b4037b093445fefa7d036da339dd549fae7a9b (patch)
tree6a527ffee467c5d53fb3364a5243379894aa9bb2
parent53d3be63a5ab056280279bcb13089faae0e7796f (diff)
downloadandroid_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.xml1
-rw-r--r--res/values/dimens.xml1
-rw-r--r--src/com/android/launcher3/DeviceProfile.java40
-rw-r--r--src/com/android/launcher3/Hotseat.java7
-rw-r--r--src/com/android/launcher3/InvariantDeviceProfile.java6
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;