diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index ea15acb78d..dbf9759167 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -314,10 +314,10 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar int qsbEnd; if (layoutRtl) { qsbStart = iconEnd + mItemMarginLeftRight; - qsbEnd = qsbStart + deviceProfile.qsbWidth; + qsbEnd = qsbStart + deviceProfile.hotseatQsbWidth; } else { qsbEnd = iconEnd - mItemMarginLeftRight; - qsbStart = qsbEnd - deviceProfile.qsbWidth; + qsbStart = qsbEnd - deviceProfile.hotseatQsbWidth; } int qsbTop = (bottom - top - deviceProfile.hotseatQsbHeight) / 2; int qsbBottom = qsbTop + deviceProfile.hotseatQsbHeight; diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java index 0f6de73c7d..929dc200c8 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java @@ -295,10 +295,11 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar boolean isRtl = Utilities.isRtl(child.getResources()); float hotseatIconCenter = isRtl ? launcherDp.widthPx - hotseatPadding.right + borderSpacing - + launcherDp.qsbWidth / 2f - : hotseatPadding.left - borderSpacing - launcherDp.qsbWidth / 2f; + + launcherDp.hotseatQsbWidth / 2f + : hotseatPadding.left - borderSpacing - launcherDp.hotseatQsbWidth / 2f; float childCenter = (child.getLeft() + child.getRight()) / 2f; - float halfQsbIconWidthDiff = (launcherDp.qsbWidth - taskbarDp.iconSizePx) / 2f; + float halfQsbIconWidthDiff = + (launcherDp.hotseatQsbWidth - taskbarDp.iconSizePx) / 2f; setter.addFloat(child, ICON_TRANSLATE_X, isRtl ? -halfQsbIconWidthDiff : halfQsbIconWidthDiff, hotseatIconCenter - childCenter, LINEAR); @@ -312,7 +313,7 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar : Interpolators.clampToProgress(LINEAR, 0.84f, 1f)); setter.addOnFrameListener(animator -> AlphaUpdateListener.updateVisibility(child)); - float qsbInsetFraction = halfQsbIconWidthDiff / launcherDp.qsbWidth; + float qsbInsetFraction = halfQsbIconWidthDiff / launcherDp.hotseatQsbWidth; if (child instanceof HorizontalInsettableView) { setter.addFloat((HorizontalInsettableView) child, HorizontalInsettableView.HORIZONTAL_INSETS, qsbInsetFraction, 0, diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileTest.kt index 1208a2a682..b50d3eef5a 100644 --- a/quickstep/tests/src/com/android/quickstep/DeviceProfileTest.kt +++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileTest.kt @@ -110,7 +110,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 4\n" + "\thotseatBorderSpace: 95.0px (36.190475dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 913.0px (347.8095dp)\n" + + "\thotseatQsbWidth: 913.0px (347.8095dp)\n" + "\tisTaskbarPresent:false\n" + "\tisTaskbarPresentInApps:false\n" + "\ttaskbarSize: 0.0px (0.0dp)\n" + @@ -229,7 +229,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 4\n" + "\thotseatBorderSpace: 95.0px (36.190475dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 913.0px (347.8095dp)\n" + + "\thotseatQsbWidth: 913.0px (347.8095dp)\n" + "\tisTaskbarPresent:false\n" + "\tisTaskbarPresentInApps:false\n" + "\ttaskbarSize: 0.0px (0.0dp)\n" + @@ -349,7 +349,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 5\n" + "\thotseatBorderSpace: 101.0px (50.5dp)\n" + "\tisQsbInline: true\n" + - "\tqsbWidth: 855.0px (427.5dp)\n" + + "\thotseatQsbWidth: 855.0px (427.5dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 120.0px (60.0dp)\n" + @@ -469,7 +469,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 6\n" + "\thotseatBorderSpace: 100.0px (50.0dp)\n" + "\tisQsbInline: true\n" + - "\tqsbWidth: 640.0px (320.0dp)\n" + + "\thotseatQsbWidth: 640.0px (320.0dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 120.0px (60.0dp)\n" + @@ -560,8 +560,8 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tfolderCellLayoutBorderSpacePx Horizontal: 0.0px (0.0dp)\n" + "\tfolderCellLayoutBorderSpacePx Vertical: 0.0px (0.0dp)\n" + "\tbottomSheetTopPadding: 704.0px (352.0dp)\n" + - "\tallAppsShiftRange: 1856.0px (928.0dp)\n" + - "\tallAppsTopPadding: 704.0px (352.0dp)\n" + + "\tallAppsShiftRange: 1936.0px (968.0dp)\n" + + "\tallAppsTopPadding: 624.0px (312.0dp)\n" + "\tallAppsIconSizePx: 120.0px (60.0dp)\n" + "\tallAppsIconTextSizePx: 28.0px (14.0dp)\n" + "\tallAppsIconDrawablePaddingPx: 14.0px (7.0dp)\n" + @@ -589,7 +589,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 5\n" + "\thotseatBorderSpace: 116.0px (58.0dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1300.0px (650.0dp)\n" + + "\thotseatQsbWidth: 1300.0px (650.0dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 120.0px (60.0dp)\n" + @@ -680,8 +680,8 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tfolderCellLayoutBorderSpacePx Horizontal: 0.0px (0.0dp)\n" + "\tfolderCellLayoutBorderSpacePx Vertical: 0.0px (0.0dp)\n" + "\tbottomSheetTopPadding: 704.0px (352.0dp)\n" + - "\tallAppsShiftRange: 1856.0px (928.0dp)\n" + - "\tallAppsTopPadding: 704.0px (352.0dp)\n" + + "\tallAppsShiftRange: 1936.0px (968.0dp)\n" + + "\tallAppsTopPadding: 624.0px (312.0dp)\n" + "\tallAppsIconSizePx: 120.0px (60.0dp)\n" + "\tallAppsIconTextSizePx: 28.0px (14.0dp)\n" + "\tallAppsIconDrawablePaddingPx: 14.0px (7.0dp)\n" + @@ -709,7 +709,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 6\n" + "\thotseatBorderSpace: 116.0px (58.0dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1300.0px (650.0dp)\n" + + "\thotseatQsbWidth: 1300.0px (650.0dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 120.0px (60.0dp)\n" + @@ -829,7 +829,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 6\n" + "\thotseatBorderSpace: 61.0px (23.238094dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1467.0px (558.8571dp)\n" + + "\thotseatQsbWidth: 1467.0px (558.8571dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 158.0px (60.190475dp)\n" + @@ -949,7 +949,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 6\n" + "\thotseatBorderSpace: 105.0px (40.0dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1467.0px (558.8571dp)\n" + + "\thotseatQsbWidth: 1467.0px (558.8571dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 158.0px (60.190475dp)\n" + @@ -1069,7 +1069,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 6\n" + "\thotseatBorderSpace: 47.0px (17.904762dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1236.0px (470.85715dp)\n" + + "\thotseatQsbWidth: 1236.0px (470.85715dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 158.0px (60.190475dp)\n" + @@ -1189,7 +1189,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 6\n" + "\thotseatBorderSpace: 84.0px (32.0dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1236.0px (470.85715dp)\n" + + "\thotseatQsbWidth: 1236.0px (470.85715dp)\n" + "\tisTaskbarPresent:true\n" + "\tisTaskbarPresentInApps:true\n" + "\ttaskbarSize: 158.0px (60.190475dp)\n" + @@ -1308,7 +1308,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 4\n" + "\thotseatBorderSpace: 0.0px (0.0dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1525.0px (580.9524dp)\n" + + "\thotseatQsbWidth: 1525.0px (580.9524dp)\n" + "\tisTaskbarPresent:false\n" + "\tisTaskbarPresentInApps:false\n" + "\ttaskbarSize: 0.0px (0.0dp)\n" + @@ -1427,7 +1427,7 @@ class DeviceProfileTest : DeviceProfileBaseTest() { "\tnumShownHotseatIcons: 4\n" + "\thotseatBorderSpace: 0.0px (0.0dp)\n" + "\tisQsbInline: false\n" + - "\tqsbWidth: 1621.0px (617.5238dp)\n" + + "\thotseatQsbWidth: 1621.0px (617.5238dp)\n" + "\tisTaskbarPresent:false\n" + "\tisTaskbarPresentInApps:false\n" + "\ttaskbarSize: 0.0px (0.0dp)\n" + diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 1f18217bb7..0d412300c5 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -41,7 +41,6 @@ import androidx.annotation.NonNull; import com.android.launcher3.CellLayout.ContainerType; import com.android.launcher3.DevicePaddings.DevicePadding; -import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.icons.DotRenderer; import com.android.launcher3.icons.IconNormalizer; import com.android.launcher3.uioverrides.ApiWrapper; @@ -56,6 +55,8 @@ import java.util.List; public class DeviceProfile { private static final int DEFAULT_DOT_SIZE = 100; + private static final float ALL_APPS_TABLET_MAX_ROWS = 5.5f; + // Ratio of empty space, qsb should take up to appear visually centered. private final float mQsbCenterFactor; @@ -169,13 +170,12 @@ public class DeviceProfile { // Start is the side next to the nav bar, end is the side next to the workspace public final int hotseatBarSidePaddingStartPx; public final int hotseatBarSidePaddingEndPx; + public int hotseatQsbWidth; // only used when isQsbInline public final int hotseatQsbHeight; public final int hotseatQsbVisualHeight; private final int hotseatQsbShadowHeight; public int hotseatBorderSpace; - public int qsbWidth; // only used when isQsbInline - // All apps public Point allAppsBorderSpacePx; public int allAppsShiftRange; @@ -311,10 +311,6 @@ public class DeviceProfile { + res.getDimensionPixelSize(R.dimen.bottom_sheet_extra_top_padding) + (isTablet ? 0 : edgeMarginPx); // phones need edgeMarginPx additional padding - allAppsTopPadding = isTablet ? bottomSheetTopPadding : 0; - allAppsShiftRange = isTablet - ? heightPx - allAppsTopPadding - : res.getDimensionPixelSize(R.dimen.all_apps_starting_vertical_translate); folderLabelTextScale = res.getFloat(R.dimen.folder_label_text_scale); folderContentPaddingLeftRight = res.getDimensionPixelSize(R.dimen.folder_content_padding_left_right); @@ -465,7 +461,21 @@ public class DeviceProfile { // Hotseat and QSB width depends on updated cellSize and workspace padding hotseatBorderSpace = calculateHotseatBorderSpace(); - qsbWidth = calculateQsbWidth(); + hotseatQsbWidth = calculateQsbWidth(); + + // AllApps height calculation depends on updated cellSize + if (isTablet) { + int collapseHandleHeight = + res.getDimensionPixelOffset(R.dimen.bottom_sheet_handle_area_height); + int contentHeight = heightPx - collapseHandleHeight - hotseatQsbHeight; + int targetContentHeight = (int) (allAppsCellHeightPx * ALL_APPS_TABLET_MAX_ROWS); + allAppsTopPadding = Math.max(mInsets.top, contentHeight - targetContentHeight); + allAppsShiftRange = heightPx - allAppsTopPadding; + } else { + allAppsTopPadding = 0; + allAppsShiftRange = + res.getDimensionPixelSize(R.dimen.all_apps_starting_vertical_translate); + } flingToDeleteThresholdVelocity = res.getDimensionPixelSize( R.dimen.drag_flingToDeleteMinVelocity); @@ -1068,7 +1078,7 @@ public class DeviceProfile { hotseatBarSizePx - hotseatBarBottomPadding - hotseatCellHeightPx; // Push icons to the side - int additionalQsbSpace = isQsbInline ? qsbWidth + hotseatBorderSpace : 0; + int additionalQsbSpace = isQsbInline ? hotseatQsbWidth + hotseatBorderSpace : 0; int requiredWidth = iconSizePx * numShownHotseatIcons + hotseatBorderSpace * (numShownHotseatIcons - 1) + additionalQsbSpace; @@ -1093,7 +1103,7 @@ public class DeviceProfile { hotseatBarPadding.right += diff; } } else if (isScalableGrid) { - int sideSpacing = (availableWidthPx - qsbWidth) / 2; + int sideSpacing = (availableWidthPx - hotseatQsbWidth) / 2; hotseatBarPadding.set(sideSpacing, 0, sideSpacing, @@ -1366,7 +1376,7 @@ public class DeviceProfile { writer.println(prefix + "\tnumShownHotseatIcons: " + numShownHotseatIcons); writer.println(prefix + pxToDpStr("hotseatBorderSpace", hotseatBorderSpace)); writer.println(prefix + "\tisQsbInline: " + isQsbInline); - writer.println(prefix + pxToDpStr("qsbWidth", qsbWidth)); + writer.println(prefix + pxToDpStr("hotseatQsbWidth", hotseatQsbWidth)); writer.println(prefix + "\tisTaskbarPresent:" + isTaskbarPresent); writer.println(prefix + "\tisTaskbarPresentInApps:" + isTaskbarPresentInApps); diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java index 05ed3198cb..bf492a9313 100644 --- a/src/com/android/launcher3/Hotseat.java +++ b/src/com/android/launcher3/Hotseat.java @@ -47,7 +47,6 @@ public class Hotseat extends CellLayout implements Insettable { private Consumer mOnVisibilityAggregatedCallback; private final View mQsb; - private final int mQsbHeight; public Hotseat(Context context) { this(context, null); @@ -62,8 +61,6 @@ public class Hotseat extends CellLayout implements Insettable { mQsb = LayoutInflater.from(context).inflate(R.layout.search_container_hotseat, this, false); addView(mQsb); - - mQsbHeight = getResources().getDimensionPixelSize(R.dimen.qsb_widget_height); } /** @@ -171,29 +168,29 @@ public class Hotseat extends CellLayout implements Insettable { protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - int qsbWidth = mActivity.getDeviceProfile().qsbWidth; - - mQsb.measure(MeasureSpec.makeMeasureSpec(qsbWidth, MeasureSpec.EXACTLY), - MeasureSpec.makeMeasureSpec(mQsbHeight, MeasureSpec.EXACTLY)); + DeviceProfile dp = mActivity.getDeviceProfile(); + mQsb.measure(MeasureSpec.makeMeasureSpec(dp.hotseatQsbWidth, MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(dp.hotseatQsbHeight, MeasureSpec.EXACTLY)); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); - int qsbWidth = mQsb.getMeasuredWidth(); + int qsbMeasuredWidth = mQsb.getMeasuredWidth(); int left; - if (mActivity.getDeviceProfile().isQsbInline) { - int qsbSpace = mActivity.getDeviceProfile().hotseatBorderSpace; + DeviceProfile dp = mActivity.getDeviceProfile(); + if (dp.isQsbInline) { + int qsbSpace = dp.hotseatBorderSpace; left = Utilities.isRtl(getResources()) ? r - getPaddingRight() + qsbSpace - : l + getPaddingLeft() - qsbWidth - qsbSpace; + : l + getPaddingLeft() - qsbMeasuredWidth - qsbSpace; } else { - left = (r - l - qsbWidth) / 2; + left = (r - l - qsbMeasuredWidth) / 2; } - int right = left + qsbWidth; + int right = left + qsbMeasuredWidth; - int bottom = b - t - mActivity.getDeviceProfile().getQsbOffsetY(); - int top = bottom - mQsbHeight; + int bottom = b - t - dp.getQsbOffsetY(); + int top = bottom - dp.hotseatQsbHeight; mQsb.layout(left, top, right, bottom); } diff --git a/src/com/android/launcher3/allapps/WorkModeSwitch.java b/src/com/android/launcher3/allapps/WorkModeSwitch.java index aee7c4c99a..fedc91fb05 100644 --- a/src/com/android/launcher3/allapps/WorkModeSwitch.java +++ b/src/com/android/launcher3/allapps/WorkModeSwitch.java @@ -91,12 +91,12 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams(); if (lp != null) { int bottomMargin = getResources().getDimensionPixelSize(R.dimen.work_fab_margin_bottom); + DeviceProfile dp = ActivityContext.lookupContext(getContext()).getDeviceProfile(); if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) { bottomMargin <<= 1; // Double margin to add space above search bar. - bottomMargin += getResources().getDimensionPixelSize(R.dimen.qsb_widget_height); + bottomMargin += dp.hotseatQsbHeight; } - DeviceProfile dp = ActivityContext.lookupContext(getContext()).getDeviceProfile(); if (!dp.isGestureMode) { if (dp.isTaskbarPresent) { bottomMargin += dp.taskbarSize;