Merge "Adjust height of tablet AllApps base on row height" into tm-qpr-dev

This commit is contained in:
Alex Chau
2022-08-04 13:55:06 +00:00
committed by Android (Google) Code Review
6 changed files with 58 additions and 50 deletions

View File

@@ -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;

View File

@@ -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,

View File

@@ -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" +

View File

@@ -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);

View File

@@ -47,7 +47,6 @@ public class Hotseat extends CellLayout implements Insettable {
private Consumer<Boolean> 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);
}

View File

@@ -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;