Merge "Update hotseat sizing for 4x5 grids." into sc-dev
diff --git a/quickstep/src/com/android/quickstep/views/AllAppsEduView.java b/quickstep/src/com/android/quickstep/views/AllAppsEduView.java
index 04a7baa..e9d7c3c 100644
--- a/quickstep/src/com/android/quickstep/views/AllAppsEduView.java
+++ b/quickstep/src/com/android/quickstep/views/AllAppsEduView.java
@@ -17,6 +17,7 @@
import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.LauncherState.NORMAL;
+import static com.android.launcher3.Utilities.EDGE_NAV_BAR;
import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.anim.Interpolators.OVERSHOOT_1_7;
@@ -67,6 +68,8 @@
private int mWidthPx;
private int mMaxHeightPx;
+ private boolean mCanInterceptTouch;
+
public AllAppsEduView(Context context, AttributeSet attrs) {
super(context, attrs);
mCircle = (GradientDrawable) context.getDrawable(R.drawable.all_apps_edu_circle);
@@ -116,16 +119,27 @@
return true;
}
+
+ private boolean shouldInterceptTouch(MotionEvent ev) {
+ if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+ mCanInterceptTouch = (ev.getEdgeFlags() & EDGE_NAV_BAR) == 0;
+ }
+ return mCanInterceptTouch;
+ }
+
@Override
public boolean onControllerTouchEvent(MotionEvent ev) {
- mTouchController.onControllerTouchEvent(ev);
- if (mAnimation != null) {
+ if (shouldInterceptTouch(ev)) {
+ mTouchController.onControllerTouchEvent(ev);
updateAnimationOnTouchEvent(ev);
}
- return super.onControllerTouchEvent(ev);
+ return true;
}
private void updateAnimationOnTouchEvent(MotionEvent ev) {
+ if (mAnimation == null) {
+ return;
+ }
switch (ev.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mAnimation.pause();
@@ -144,7 +158,10 @@
@Override
public boolean onControllerInterceptTouchEvent(MotionEvent ev) {
- mTouchController.onControllerInterceptTouchEvent(ev);
+ if (shouldInterceptTouch(ev)) {
+ mTouchController.onControllerInterceptTouchEvent(ev);
+ updateAnimationOnTouchEvent(ev);
+ }
return true;
}
diff --git a/res/layout/user_folder_icon_normalized.xml b/res/layout/user_folder_icon_normalized.xml
index 15131f1..11eea60 100644
--- a/res/layout/user_folder_icon_normalized.xml
+++ b/res/layout/user_folder_icon_normalized.xml
@@ -44,7 +44,6 @@
style="@style/TextHeadline"
android:layout_weight="1"
android:background="@android:color/transparent"
- android:textStyle="bold"
android:gravity="center_horizontal"
android:hint="@string/folder_hint_text"
android:imeOptions="flagNoExtractUi"
diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java
index 5a3e7dd..9ca753d 100644
--- a/src/com/android/launcher3/DeviceProfile.java
+++ b/src/com/android/launcher3/DeviceProfile.java
@@ -90,6 +90,7 @@
private static final float MAX_HORIZONTAL_PADDING_PERCENT = 0.14f;
private static final float TALL_DEVICE_ASPECT_RATIO_THRESHOLD = 2.0f;
+ private static final float TALLER_DEVICE_ASPECT_RATIO_THRESHOLD = 2.15f;
// To evenly space the icons, increase the left/right margins for tablets in portrait mode.
private static final int PORTRAIT_TABLET_LEFT_RIGHT_PADDING_MULTIPLIER = 4;
@@ -149,12 +150,13 @@
public int folderChildDrawablePaddingPx;
// Hotseat
+ public int hotseatBarSizeExtraSpacePx;
public final int numShownHotseatIcons;
public int hotseatCellHeightPx;
private final int hotseatExtraVerticalSize;
// In portrait: size = height, in landscape: size = width
public int hotseatBarSizePx;
- public final int hotseatBarTopPaddingPx;
+ public int hotseatBarTopPaddingPx;
public final int hotseatBarBottomPaddingPx;
// Start is the side next to the nav bar, end is the side next to the workspace
public final int hotseatBarSidePaddingStartPx;
@@ -323,6 +325,7 @@
isTwoPanels ? inv.numDatabaseHotseatIcons : inv.numShownHotseatIcons;
numShownAllAppsColumns =
isTwoPanels ? inv.numDatabaseAllAppsColumns : inv.numAllAppsColumns;
+ hotseatBarSizeExtraSpacePx = 0;
hotseatBarTopPaddingPx =
res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_top_padding);
hotseatBarBottomPaddingPx = (isTallDevice ? 0
@@ -353,6 +356,7 @@
// Calculate all of the remaining variables.
extraSpace = updateAvailableDimensions(res);
+
// Now that we have all of the variables calculated, we can tune certain sizes.
if (isScalableGrid && inv.devicePaddings != null) {
// Paddings were created assuming no scaling, so we first unscale the extra space.
@@ -372,12 +376,25 @@
qsbBottomMarginPx = Math.round(qsbBottomMarginOriginalPx * cellScaleToFit);
} else if (!isVerticalBarLayout() && isPhone && isTallDevice) {
// We increase the hotseat size when there is extra space.
- // ie. For a display with a large aspect ratio, we can keep the icons on the workspace
- // in portrait mode closer together by adding more height to the hotseat.
- // Note: This calculation was created after noticing a pattern in the design spec.
- int extraSpace = getCellSize().y - iconSizePx - iconDrawablePaddingPx * 2
- - workspacePageIndicatorHeight;
- hotseatBarSizePx += extraSpace;
+
+ if (Float.compare(aspectRatio, TALLER_DEVICE_ASPECT_RATIO_THRESHOLD) >= 0) {
+ // For taller devices, we will take a third of the extra space from each row,
+ // and add it to the space above and below the hotseat.
+ int extraSpace = ((getCellSize().y - iconSizePx - iconDrawablePaddingPx * 2)
+ * inv.numRows) / 3;
+
+ int halfExtraSpace = extraSpace / 2;
+ hotseatBarTopPaddingPx += halfExtraSpace;
+ hotseatBarSizeExtraSpacePx = halfExtraSpace;
+ } else {
+ // ie. For a display with a large aspect ratio, we can keep the icons on the
+ // workspace in portrait mode closer together by adding more height to the hotseat.
+ // Note: This calculation was created after noticing a pattern in the design spec.
+ hotseatBarSizeExtraSpacePx = getCellSize().y - iconSizePx
+ - iconDrawablePaddingPx * 2 - workspacePageIndicatorHeight;
+ }
+
+ updateHotseatIconSize(iconSizePx);
// Recalculate the available dimensions using the new hotseat size.
updateAvailableDimensions(res);
@@ -402,7 +419,8 @@
+ hotseatBarSidePaddingEndPx;
} else {
hotseatBarSizePx = hotseatIconSizePx + hotseatBarTopPaddingPx
- + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize);
+ + hotseatBarBottomPaddingPx + (isScalableGrid ? 0 : hotseatExtraVerticalSize)
+ + hotseatBarSizeExtraSpacePx;
}
}
@@ -652,8 +670,11 @@
int textHeight = Utilities.calculateTextHeight(folderChildTextSizePx);
if (isScalableGrid) {
- folderCellWidthPx = (int) (cellWidthPx * scale);
- folderCellHeightPx = (int) (cellHeightPx * scale);
+ int minWidth = folderChildIconSizePx + iconDrawablePaddingPx * 2;
+ int minHeight = folderChildIconSizePx + iconDrawablePaddingPx * 2 + textHeight;
+
+ folderCellWidthPx = (int) Math.max(minWidth, cellWidthPx * scale);
+ folderCellHeightPx = (int) Math.max(minHeight, cellHeightPx * scale);
int borderSpacing = (int) (cellLayoutBorderSpacingOriginalPx * scale);
folderCellLayoutBorderSpacingPx = borderSpacing;