Make hotseat column span responsive

Flag: NONE
Test: DeviceProfileDumpTest, DeviceProfileAlternativeDumpTest, HomeScreenImageTest
Bug: 325084912
Change-Id: Ifa9e8066662a1ab053f66b8800b739d813d2dab8
(cherry picked from commit e4b0b71faa)
This commit is contained in:
fbaron
2024-03-29 14:31:17 -07:00
committed by Federico Baron
parent 4a01d58d9a
commit 6fba6cdb85
20 changed files with 168 additions and 86 deletions

View File

@@ -42,6 +42,8 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(510)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(70)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1445)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(150)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(580)
@@ -64,6 +66,8 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(510)
assertThat(dp.numShownHotseatIcons).isEqualTo(4)
assertThat(dp.hotseatBorderSpace).isEqualTo(40)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1080)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(150)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(550)
@@ -85,6 +89,8 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(705)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(54)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1468)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(231)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(759)
@@ -100,22 +106,21 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
@Test
fun nav_buttons_dont_interfere_with_required_hotseat_width() {
initializeVarsForTablet(isGestureMode = false, isLandscape = true)
inv?.apply {
hotseatColumnSpan = IntArray(4) { 4 }
inlineQsb = BooleanArray(4) { false }
}
inv?.apply { inlineQsb = BooleanArray(4) { false } }
val dp = newDP()
dp.isTaskbarPresentInApps = true
assertThat(dp.hotseatBarEndOffset).isEqualTo(660)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(100)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1975)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(300)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(1040)
assertThat(dp.isQsbInline).isFalse()
assertThat(dp.hotseatQsbWidth).isEqualTo(1223)
assertThat(dp.hotseatQsbWidth).isEqualTo(1965)
}
/** This is a case when after setting the hotseat, the QSB width needs to be changed to fit */
@@ -128,13 +133,15 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(660)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(36)
assertThat(dp.hotseatBorderSpace).isEqualTo(34)
assertThat(dp.hotseatColumnSpan).isEqualTo(4)
assertThat(dp.hotseatWidthPx).isEqualTo(1179)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(864)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(696)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(876)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(694)
assertThat(dp.isQsbInline).isTrue()
assertThat(dp.hotseatQsbWidth).isEqualTo(528)
assertThat(dp.hotseatQsbWidth).isEqualTo(542)
}
/**
@@ -151,6 +158,8 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(660)
assertThat(dp.numShownHotseatIcons).isEqualTo(5)
assertThat(dp.hotseatBorderSpace).isEqualTo(36)
assertThat(dp.hotseatColumnSpan).isEqualTo(4)
assertThat(dp.hotseatWidthPx).isEqualTo(1095)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(816)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(700)
@@ -158,4 +167,23 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.isQsbInline).isTrue()
assertThat(dp.hotseatQsbWidth).isEqualTo(480)
}
@Test
fun increase_span_when_space_between_icons_is_less_than_minimum() {
initializeVarsForTwoPanel(isGestureMode = false, isLandscape = false, rows = 5, cols = 5)
val dp = newDP()
dp.isTaskbarPresentInApps = true
assertThat(dp.hotseatBarEndOffset).isEqualTo(600)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(48)
assertThat(dp.hotseatColumnSpan).isEqualTo(8)
assertThat(dp.hotseatWidthPx).isEqualTo(1383)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(126)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(652)
assertThat(dp.isQsbInline).isFalse()
assertThat(dp.hotseatQsbWidth).isEqualTo(1372)
}
}

View File

@@ -40,6 +40,7 @@
<!-- Hotseat -->
<dimen name="dynamic_grid_hotseat_side_padding">0dp</dimen>
<dimen name="spring_loaded_hotseat_top_margin">65dp</dimen>
<dimen name="min_hotseat_icon_space">17dp</dimen>
<!-- Dragging -->
<dimen name="drop_target_top_margin">64dp</dimen>

View File

@@ -201,17 +201,6 @@
defaults to 2 * numHotseatIcons -->
<attr name="numExtendedHotseatIcons" format="integer" />
<!-- alignment of hotseat to the grid.
Not applicable for 3 button mode when taskbar is enabled -->
<!-- defaults to numColumns, if not specified -->
<attr name="hotseatColumnSpan" format="integer" />
<!-- defaults to numColumns, if not specified -->
<attr name="hotseatColumnSpanLandscape" format="integer" />
<!-- defaults to numColumns, if not specified -->
<attr name="hotseatColumnSpanTwoPanelLandscape" format="integer" />
<!-- defaults to numColumns, if not specified -->
<attr name="hotseatColumnSpanTwoPanelPortrait" format="integer" />
<!-- Spacing to have at the end of the nav buttons in large screen 3 button nav,
defaults to @dimen/taskbar_button_margin_default -->
<attr name="inlineNavButtonsEndSpacing" format="reference" />

View File

@@ -168,7 +168,6 @@
launcher:numFolderRows="3"
launcher:numFolderColumns="3"
launcher:numHotseatIcons="6"
launcher:hotseatColumnSpanLandscape="4"
launcher:numAllAppsColumns="6"
launcher:isScalable="true"
launcher:inlineNavButtonsEndSpacing="@dimen/taskbar_button_margin_6_5"

View File

@@ -46,6 +46,7 @@ import android.view.Surface;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.core.content.res.ResourcesCompat;
import com.android.launcher3.CellLayout.ContainerType;
@@ -210,6 +211,8 @@ public class DeviceProfile {
// Hotseat
public int numShownHotseatIcons;
public int hotseatCellHeightPx;
private int mHotseatColumnSpan;
private int mHotseatWidthPx; // not used in vertical bar layout
public final boolean areNavButtonsInline;
// In portrait: size = height, in landscape: size = width
public int hotseatBarSizePx;
@@ -544,6 +547,7 @@ public class DeviceProfile {
areNavButtonsInline = isTaskbarPresent && !isGestureMode;
numShownHotseatIcons =
isTwoPanels ? inv.numDatabaseHotseatIcons : inv.numShownHotseatIcons;
mHotseatColumnSpan = inv.numColumns;
numShownAllAppsColumns =
isTwoPanels ? inv.numDatabaseAllAppsColumns : inv.numAllAppsColumns;
@@ -811,8 +815,7 @@ public class DeviceProfile {
- hotseatBorderSpace * numShownHotseatIcons
- iconExtraSpacePx;
} else {
int columns = inv.hotseatColumnSpan[mTypeIndex];
return getIconToIconWidthForColumns(columns) - iconExtraSpacePx;
return getIconToIconWidthForColumns(mHotseatColumnSpan) - iconExtraSpacePx;
}
}
@@ -883,10 +886,31 @@ public class DeviceProfile {
public void recalculateHotseatWidthAndBorderSpace() {
if (!mIsScalableGrid) return;
int columns = inv.hotseatColumnSpan[mTypeIndex];
float hotseatWidthPx = getIconToIconWidthForColumns(columns);
hotseatBorderSpace = calculateHotseatBorderSpace(hotseatWidthPx, /* numExtraBorder= */ 0);
updateHotseatWidthAndBorderSpace(inv.numColumns);
int numWorkspaceColumns = getPanelCount() * inv.numColumns;
if (isTwoPanels) {
updateHotseatWidthAndBorderSpace(inv.numDatabaseHotseatIcons);
// If hotseat doesn't fit with current width, increase column span to fit by multiple
// of 2.
while (hotseatBorderSpace < mMinHotseatIconSpacePx
&& mHotseatColumnSpan < numWorkspaceColumns) {
updateHotseatWidthAndBorderSpace(mHotseatColumnSpan + 2);
}
}
if (isQsbInline) {
// If QSB is inline, reduce column span until it fits.
int maxHotseatWidthAllowedPx = getIconToIconWidthForColumns(numWorkspaceColumns);
int minHotseatWidthRequiredPx =
mMinHotseatQsbWidthPx + hotseatBorderSpace + mHotseatWidthPx;
while (minHotseatWidthRequiredPx > maxHotseatWidthAllowedPx
&& mHotseatColumnSpan > 1) {
updateHotseatWidthAndBorderSpace(mHotseatColumnSpan - 1);
minHotseatWidthRequiredPx =
mMinHotseatQsbWidthPx + hotseatBorderSpace + mHotseatWidthPx;
}
}
hotseatQsbWidth = calculateQsbWidth(hotseatBorderSpace);
// Spaces should be correct when the nav buttons are not inline
if (!areNavButtonsInline) {
return;
@@ -928,6 +952,12 @@ public class DeviceProfile {
} while (hotseatBorderSpace < mMinHotseatIconSpacePx && numShownHotseatIcons > 1);
}
private void updateHotseatWidthAndBorderSpace(int columns) {
mHotseatColumnSpan = columns;
mHotseatWidthPx = getIconToIconWidthForColumns(mHotseatColumnSpan);
hotseatBorderSpace = calculateHotseatBorderSpace(mHotseatWidthPx, /* numExtraBorder= */ 0);
}
private Point getCellLayoutBorderSpace(InvariantDeviceProfile idp) {
return getCellLayoutBorderSpace(idp, 1f);
}
@@ -951,6 +981,16 @@ public class DeviceProfile {
return mInfo;
}
@VisibleForTesting
public int getHotseatColumnSpan() {
return mHotseatColumnSpan;
}
@VisibleForTesting
public int getHotseatWidthPx() {
return mHotseatWidthPx;
}
public Builder toBuilder(Context context) {
WindowBounds bounds = new WindowBounds(
widthPx, heightPx, availableWidthPx, availableHeightPx, rotationHint);
@@ -2113,7 +2153,8 @@ public class DeviceProfile {
writer.println(prefix + pxToDpStr("allAppsLeftRightMargin", allAppsLeftRightMargin));
writer.println(prefix + pxToDpStr("hotseatBarSizePx", hotseatBarSizePx));
writer.println(prefix + "\tinv.hotseatColumnSpan: " + inv.hotseatColumnSpan[mTypeIndex]);
writer.println(prefix + "\tmHotseatColumnSpan: " + mHotseatColumnSpan);
writer.println(prefix + pxToDpStr("mHotseatWidthPx", mHotseatWidthPx));
writer.println(prefix + pxToDpStr("hotseatCellHeightPx", hotseatCellHeightPx));
writer.println(prefix + pxToDpStr("hotseatBarBottomSpacePx", hotseatBarBottomSpacePx));
writer.println(prefix + pxToDpStr("mHotseatBarEdgePaddingPx",

View File

@@ -162,7 +162,6 @@ public class InvariantDeviceProfile {
*/
public int numDatabaseHotseatIcons;
public int[] hotseatColumnSpan;
public float[] hotseatBarBottomSpace;
public float[] hotseatQsbSpace;
@@ -419,7 +418,6 @@ public class InvariantDeviceProfile {
numShownHotseatIcons = closestProfile.numHotseatIcons;
numDatabaseHotseatIcons = deviceType == TYPE_MULTI_DISPLAY
? closestProfile.numDatabaseHotseatIcons : closestProfile.numHotseatIcons;
hotseatColumnSpan = closestProfile.hotseatColumnSpan;
hotseatBarBottomSpace = displayOption.hotseatBarBottomSpace;
hotseatQsbSpace = displayOption.hotseatQsbSpace;
@@ -830,8 +828,6 @@ public class InvariantDeviceProfile {
private final int numHotseatIcons;
private final int numDatabaseHotseatIcons;
private final int[] hotseatColumnSpan = new int[COUNT_SIZES];
private final boolean[] inlineQsb = new boolean[COUNT_SIZES];
private @DimenRes int inlineNavButtonsEndSpacing;
@@ -882,17 +878,6 @@ public class InvariantDeviceProfile {
numDatabaseHotseatIcons = a.getInt(
R.styleable.GridDisplayOption_numExtendedHotseatIcons, 2 * numHotseatIcons);
hotseatColumnSpan[INDEX_DEFAULT] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpan, numColumns);
hotseatColumnSpan[INDEX_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpanLandscape, numColumns);
hotseatColumnSpan[INDEX_TWO_PANEL_LANDSCAPE] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpanTwoPanelLandscape,
numColumns);
hotseatColumnSpan[INDEX_TWO_PANEL_PORTRAIT] = a.getInt(
R.styleable.GridDisplayOption_hotseatColumnSpanTwoPanelPortrait,
numColumns);
inlineNavButtonsEndSpacing =
a.getResourceId(R.styleable.GridDisplayOption_inlineNavButtonsEndSpacing,
R.dimen.taskbar_button_margin_default);

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 0.0px (0.0dp)
allAppsLeftRightMargin: 0.0px (0.0dp)
hotseatBarSizePx: 273.0px (104.0dp)
inv.hotseatColumnSpan: 5
mHotseatColumnSpan: 5
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 166.0px (63.238094dp)
hotseatBarBottomSpacePx: 126.0px (48.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 0.0px (0.0dp)
allAppsLeftRightMargin: 0.0px (0.0dp)
hotseatBarSizePx: 294.0px (112.0dp)
inv.hotseatColumnSpan: 5
mHotseatColumnSpan: 5
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 166.0px (63.238094dp)
hotseatBarBottomSpacePx: 147.0px (56.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 0.0px (0.0dp)
allAppsLeftRightMargin: 0.0px (0.0dp)
hotseatBarSizePx: 252.0px (96.0dp)
inv.hotseatColumnSpan: 5
mHotseatColumnSpan: 5
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 166.0px (63.238094dp)
hotseatBarBottomSpacePx: 0.0px (0.0dp)
mHotseatBarEdgePaddingPx: 63.0px (24.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 0.0px (0.0dp)
allAppsLeftRightMargin: 0.0px (0.0dp)
hotseatBarSizePx: 252.0px (96.0dp)
inv.hotseatColumnSpan: 5
mHotseatColumnSpan: 5
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 166.0px (63.238094dp)
hotseatBarBottomSpacePx: 0.0px (0.0dp)
mHotseatBarEdgePaddingPx: 63.0px (24.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 32.0px (16.0dp)
allAppsLeftRightMargin: 412.0px (206.0dp)
hotseatBarSizePx: 200.0px (100.0dp)
inv.hotseatColumnSpan: 4
mHotseatColumnSpan: 6
mHotseatWidthPx: 1960.0px (980.0dp)
hotseatCellHeightPx: 135.0px (67.5dp)
hotseatBarBottomSpacePx: 80.0px (40.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)
@@ -82,12 +83,12 @@ DeviceProfile:
springLoadedHotseatBarTopMarginPx: 128.0px (64.0dp)
getHotseatLayoutPadding(context).top: 0.0px (0.0dp)
getHotseatLayoutPadding(context).bottom: 65.0px (32.5dp)
getHotseatLayoutPadding(context).left: 668.0px (334.0dp)
getHotseatLayoutPadding(context).right: 668.0px (334.0dp)
getHotseatLayoutPadding(context).left: 300.0px (150.0dp)
getHotseatLayoutPadding(context).right: 300.0px (150.0dp)
numShownHotseatIcons: 6
hotseatBorderSpace: 100.0px (50.0dp)
hotseatBorderSpace: 248.0px (124.0dp)
isQsbInline: false
hotseatQsbWidth: 1214.0px (607.0dp)
hotseatQsbWidth: 1950.0px (975.0dp)
isTaskbarPresent:false
isTaskbarPresentInApps:true
taskbarHeight: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 32.0px (16.0dp)
allAppsLeftRightMargin: 412.0px (206.0dp)
hotseatBarSizePx: 200.0px (100.0dp)
inv.hotseatColumnSpan: 4
mHotseatColumnSpan: 6
mHotseatWidthPx: 1960.0px (980.0dp)
hotseatCellHeightPx: 135.0px (67.5dp)
hotseatBarBottomSpacePx: 80.0px (40.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)
@@ -82,12 +83,12 @@ DeviceProfile:
springLoadedHotseatBarTopMarginPx: 128.0px (64.0dp)
getHotseatLayoutPadding(context).top: 0.0px (0.0dp)
getHotseatLayoutPadding(context).bottom: 65.0px (32.5dp)
getHotseatLayoutPadding(context).left: 668.0px (334.0dp)
getHotseatLayoutPadding(context).right: 668.0px (334.0dp)
getHotseatLayoutPadding(context).left: 300.0px (150.0dp)
getHotseatLayoutPadding(context).right: 300.0px (150.0dp)
numShownHotseatIcons: 6
hotseatBorderSpace: 100.0px (50.0dp)
hotseatBorderSpace: 248.0px (124.0dp)
isQsbInline: false
hotseatQsbWidth: 1214.0px (607.0dp)
hotseatQsbWidth: 1950.0px (975.0dp)
isTaskbarPresent:false
isTaskbarPresentInApps:true
taskbarHeight: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 32.0px (16.0dp)
allAppsLeftRightMargin: 152.0px (76.0dp)
hotseatBarSizePx: 272.0px (136.0dp)
inv.hotseatColumnSpan: 6
mHotseatColumnSpan: 6
mHotseatWidthPx: 1300.0px (650.0dp)
hotseatCellHeightPx: 135.0px (67.5dp)
hotseatBarBottomSpacePx: 152.0px (76.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 32.0px (16.0dp)
allAppsLeftRightMargin: 152.0px (76.0dp)
hotseatBarSizePx: 272.0px (136.0dp)
inv.hotseatColumnSpan: 6
mHotseatColumnSpan: 6
mHotseatWidthPx: 1300.0px (650.0dp)
hotseatCellHeightPx: 135.0px (67.5dp)
hotseatBarBottomSpacePx: 152.0px (76.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 42.0px (16.0dp)
allAppsLeftRightMargin: 183.0px (69.71429dp)
hotseatBarSizePx: 267.0px (101.71429dp)
inv.hotseatColumnSpan: 4
mHotseatColumnSpan: 4
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 159.0px (60.57143dp)
hotseatBarBottomSpacePx: 126.0px (48.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 42.0px (16.0dp)
allAppsLeftRightMargin: 183.0px (69.71429dp)
hotseatBarSizePx: 267.0px (101.71429dp)
inv.hotseatColumnSpan: 4
mHotseatColumnSpan: 4
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 159.0px (60.57143dp)
hotseatBarBottomSpacePx: 126.0px (48.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 42.0px (16.0dp)
allAppsLeftRightMargin: 1.0px (0.3809524dp)
hotseatBarSizePx: 267.0px (101.71429dp)
inv.hotseatColumnSpan: 4
mHotseatColumnSpan: 4
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 159.0px (60.57143dp)
hotseatBarBottomSpacePx: 126.0px (48.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -71,7 +71,8 @@ DeviceProfile:
allAppsPadding.right: 42.0px (16.0dp)
allAppsLeftRightMargin: 1.0px (0.3809524dp)
hotseatBarSizePx: 267.0px (101.71429dp)
inv.hotseatColumnSpan: 4
mHotseatColumnSpan: 4
mHotseatWidthPx: 0.0px (0.0dp)
hotseatCellHeightPx: 159.0px (60.57143dp)
hotseatBarBottomSpacePx: 126.0px (48.0dp)
mHotseatBarEdgePaddingPx: 0.0px (0.0dp)

View File

@@ -157,7 +157,6 @@ abstract class FakeInvariantDeviceProfileTest {
numDatabaseHotseatIcons = 4
hotseatColumnSpan = IntArray(4) { 4 }
hotseatBarBottomSpace = FloatArray(4) { 48f }
hotseatQsbSpace = FloatArray(4) { 36f }
@@ -240,7 +239,6 @@ abstract class FakeInvariantDeviceProfileTest {
numDatabaseHotseatIcons = 6
hotseatColumnSpan = intArrayOf(6, 4, 6, 6)
hotseatBarBottomSpace = floatArrayOf(36f, 40f, 36f, 36f)
hotseatQsbSpace = FloatArray(4) { 32f }
@@ -259,8 +257,10 @@ abstract class FakeInvariantDeviceProfileTest {
}
protected fun initializeVarsForTwoPanel(
isLandscape: Boolean = false,
isGestureMode: Boolean = true
isLandscape: Boolean = false,
isGestureMode: Boolean = true,
rows: Int = 4,
cols: Int = 4,
) {
val (x, y) = if (isLandscape) Pair(2208, 1840) else Pair(1840, 2208)
@@ -276,9 +276,9 @@ abstract class FakeInvariantDeviceProfileTest {
inv =
InvariantDeviceProfile().apply {
numRows = 4
numColumns = 4
numSearchContainerColumns = 4
numRows = rows
numColumns = cols
numSearchContainerColumns = cols
iconSize = floatArrayOf(60f, 52f, 52f, 60f)
iconTextSize = floatArrayOf(14f, 14f, 12f, 14f)
@@ -319,7 +319,6 @@ abstract class FakeInvariantDeviceProfileTest {
numDatabaseHotseatIcons = 6
hotseatColumnSpan = IntArray(4) { 6 }
hotseatBarBottomSpace = floatArrayOf(48f, 48f, 36f, 20f)
hotseatQsbSpace = floatArrayOf(36f, 36f, 36f, 28f)

View File

@@ -42,6 +42,8 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(145)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1445)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(177)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(177)
@@ -64,6 +66,8 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(72)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1080)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(110)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(110)
@@ -85,6 +89,8 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(104)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1468)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(370)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(370)
@@ -100,22 +106,21 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
@Test
fun nav_buttons_dont_interfere_with_required_hotseat_width() {
initializeVarsForTablet(isGestureMode = false, isLandscape = true)
inv?.apply {
hotseatColumnSpan = IntArray(4) { 4 }
inlineQsb = BooleanArray(4) { false }
}
inv?.apply { inlineQsb = BooleanArray(4) { false } }
val dp = newDP()
dp.isTaskbarPresentInApps = true
assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(100)
assertThat(dp.hotseatBorderSpace).isEqualTo(248)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1960)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(668)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(668)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(300)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(300)
assertThat(dp.isQsbInline).isFalse()
assertThat(dp.hotseatQsbWidth).isEqualTo(1214)
assertThat(dp.hotseatQsbWidth).isEqualTo(1950)
}
/** This is a case when after setting the hotseat, the QSB width needs to be changed to fit */
@@ -128,13 +133,15 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(91)
assertThat(dp.hotseatBorderSpace).isEqualTo(233)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1885)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(640)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(640)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(287)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(287)
assertThat(dp.isQsbInline).isFalse()
assertThat(dp.hotseatQsbWidth).isEqualTo(1169)
assertThat(dp.hotseatQsbWidth).isEqualTo(1875)
}
/**
@@ -150,13 +157,15 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(75)
assertThat(dp.hotseatBorderSpace).isEqualTo(205)
assertThat(dp.hotseatColumnSpan).isEqualTo(6)
assertThat(dp.hotseatWidthPx).isEqualTo(1745)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(582)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(582)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(257)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(257)
assertThat(dp.isQsbInline).isFalse()
assertThat(dp.hotseatQsbWidth).isEqualTo(1085)
assertThat(dp.hotseatQsbWidth).isEqualTo(1735)
}
@Test
@@ -179,4 +188,23 @@ class HotseatWidthCalculationTest : FakeInvariantDeviceProfileTest() {
assertThat(dp.hotseatQsbWidth).isEqualTo(1435)
}
}
@Test
fun increase_span_when_space_between_icons_is_less_than_minimum() {
initializeVarsForTwoPanel(isGestureMode = false, isLandscape = false, rows = 5, cols = 5)
val dp = newDP()
dp.isTaskbarPresentInApps = true
assertThat(dp.hotseatBarEndOffset).isEqualTo(0)
assertThat(dp.numShownHotseatIcons).isEqualTo(6)
assertThat(dp.hotseatBorderSpace).isEqualTo(112)
assertThat(dp.hotseatColumnSpan).isEqualTo(8)
assertThat(dp.hotseatWidthPx).isEqualTo(1383)
assertThat(dp.getHotseatLayoutPadding(context).left).isEqualTo(228)
assertThat(dp.getHotseatLayoutPadding(context).right).isEqualTo(228)
assertThat(dp.isQsbInline).isFalse()
assertThat(dp.hotseatQsbWidth).isEqualTo(1372)
}
}