From a7335bccdc5af8b74ea70335e5beccddc79cda6c Mon Sep 17 00:00:00 2001 From: Pat Manning Date: Mon, 27 Jun 2022 18:27:22 +0100 Subject: [PATCH] Simplify vertical bar hotseat bottom calculation for spring loaded state. Fix: 236941743 Test: manual. Change-Id: I7f110fea48eb88e7f941a64c17a65feec14531f3 --- quickstep/Android.bp | 2 +- .../quickstep/DeviceProfileQuickstepTest.kt | 122 +++++++++++++++++ src/com/android/launcher3/DeviceProfile.java | 9 +- .../launcher3/DeviceProfileBaseTest.kt | 2 + .../DeviceProfileGridDimensionsTest.kt | 128 ------------------ 5 files changed, 128 insertions(+), 135 deletions(-) create mode 100644 quickstep/tests/src/com/android/quickstep/DeviceProfileQuickstepTest.kt delete mode 100644 tests/src/com/android/launcher3/DeviceProfileGridDimensionsTest.kt diff --git a/quickstep/Android.bp b/quickstep/Android.bp index 70b1438c38..f739f8140c 100644 --- a/quickstep/Android.bp +++ b/quickstep/Android.bp @@ -26,7 +26,7 @@ filegroup { filegroup { name: "launcher3-quickstep-tests-src", path: "tests", - srcs: ["tests/src/**/*.java"], + srcs: ["tests/src/**/*.java", "tests/src/**/*.kt"], } filegroup { diff --git a/quickstep/tests/src/com/android/quickstep/DeviceProfileQuickstepTest.kt b/quickstep/tests/src/com/android/quickstep/DeviceProfileQuickstepTest.kt new file mode 100644 index 0000000000..368dc2ac0c --- /dev/null +++ b/quickstep/tests/src/com/android/quickstep/DeviceProfileQuickstepTest.kt @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.quickstep + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.launcher3.DeviceProfileBaseTest +import com.android.launcher3.InvariantDeviceProfile +import com.android.launcher3.util.WindowBounds +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.Mockito.`when` as whenever + +/** + * Test for [DeviceProfile] quickstep. + */ +@SmallTest +@RunWith(AndroidJUnit4::class) +class DeviceProfileQuickstepTest : DeviceProfileBaseTest() { + + @Test + fun getCellLayoutWidthAndHeight_twoPanelLandscapeScalable4By4GridTablet() { + val tabletWidth = 2560 + val tabletHeight = 1600 + val availableWidth = 2560 + val availableHeight = 1500 + windowBounds = WindowBounds(tabletWidth, tabletHeight, availableWidth, availableHeight, 0) + useTwoPanels = true + whenever(info.isTablet(ArgumentMatchers.any())).thenReturn(true) + whenever(info.densityDpi).thenReturn(320) + whenever(info.smallestSizeDp(ArgumentMatchers.any())).thenReturn(800f) + inv = newScalableInvariantDeviceProfile() + + val dp = newDP() + + assertThat(dp.cellLayoutWidth).isEqualTo(1235) + assertThat(dp.cellLayoutHeight).isEqualTo(1235) + } + + @Test + fun getCellSize_twoPanelLandscapeScalable4By4GridTablet() { + val tabletWidth = 2560 + val tabletHeight = 1600 + val availableWidth = 2560 + val availableHeight = 1500 + windowBounds = WindowBounds(tabletWidth, tabletHeight, availableWidth, availableHeight, 0) + useTwoPanels = true + whenever(info.isTablet(ArgumentMatchers.any())).thenReturn(true) + whenever(info.densityDpi).thenReturn(320) + whenever(info.smallestSizeDp(ArgumentMatchers.any())).thenReturn(800f) + inv = newScalableInvariantDeviceProfile() + + val dp = newDP() + + assertThat(dp.getCellSize().y).isEqualTo(264) + assertThat(dp.getCellSize().x).isEqualTo(258) + } + + @Test + fun getPanelCount_twoPanelLandscapeScalable4By4GridTablet() { + val tabletWidth = 2560 + val tabletHeight = 1600 + val availableWidth = 2560 + val availableHeight = 1500 + windowBounds = WindowBounds(tabletWidth, tabletHeight, availableWidth, availableHeight, 0) + useTwoPanels = true + whenever(info.isTablet(ArgumentMatchers.any())).thenReturn(true) + whenever(info.densityDpi).thenReturn(320) + whenever(info.smallestSizeDp(ArgumentMatchers.any())).thenReturn(800f) + inv = newScalableInvariantDeviceProfile() + + val dp = newDP() + + assertThat(dp.panelCount).isEqualTo(2) + } + + @Test + fun getWorkspaceSpringLoadShrunkTopBottom_landscapePhoneVerticalBar() { + inv = newScalableInvariantDeviceProfile() + initializeVarsForPhone(true) + inv = newScalableInvariantDeviceProfile().apply { + deviceType = InvariantDeviceProfile.TYPE_PHONE + transposeLayoutWithOrientation = true + } + + val dp = newDP() + + assertThat(dp.isVerticalBarLayout).isEqualTo(true) + assertThat(dp.cellLayoutSpringLoadShrunkTop).isEqualTo(168) + assertThat(dp.cellLayoutSpringLoadShrunkBottom).isEqualTo(1358) + } + + @Test + fun getWorkspaceSpringLoadShrunkTopBottom_portraitPhone() { + inv = newScalableInvariantDeviceProfile() + initializeVarsForPhone() + inv = newScalableInvariantDeviceProfile().apply { + deviceType = InvariantDeviceProfile.TYPE_PHONE + } + + val dp = newDP() + + assertThat(dp.isVerticalBarLayout).isEqualTo(false) + assertThat(dp.cellLayoutSpringLoadShrunkTop).isEqualTo(364) + assertThat(dp.cellLayoutSpringLoadShrunkBottom).isEqualTo(2199) + } +} \ No newline at end of file diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 8c1f505187..60af347585 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -930,15 +930,12 @@ public class DeviceProfile { * Gets the space in px from the bottom of last item in the vertical-bar hotseat to the * bottom of the screen. */ - public int getVerticalHotseatLastItemBottomOffset() { + private int getVerticalHotseatLastItemBottomOffset() { int cellHeight = calculateCellHeight( heightPx - mHotseatPadding.top - mHotseatPadding.bottom, hotseatBorderSpace, numShownHotseatIcons); - int hotseatSize = (cellHeight * numShownHotseatIcons) - + (hotseatBorderSpace * (numShownHotseatIcons - 1)); - int extraHotseatEndSpacing = (heightPx - hotseatSize) / 2; int extraIconEndSpacing = (cellHeight - iconSizePx) / 2; - return extraHotseatEndSpacing + extraIconEndSpacing + mHotseatPadding.bottom; + return extraIconEndSpacing + mHotseatPadding.bottom; } /** @@ -953,7 +950,7 @@ public class DeviceProfile { /** * Gets the scaled bottom of the workspace in px for the spring-loaded edit state. */ - private float getCellLayoutSpringLoadShrunkBottom() { + public float getCellLayoutSpringLoadShrunkBottom() { int topOfHotseat = hotseatBarSizePx + springLoadedHotseatBarTopMarginPx; workspaceSpringLoadShrunkBottom = heightPx - (isVerticalBarLayout() ? getVerticalHotseatLastItemBottomOffset() diff --git a/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt b/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt index 6d0fcb6faa..6a6c40f24a 100644 --- a/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt +++ b/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt @@ -65,6 +65,7 @@ abstract class DeviceProfileBaseTest { whenever(info.isTablet(any())).thenReturn(false) whenever(info.getDensityDpi()).thenReturn(560) + whenever(info.smallestSizeDp(any())).thenReturn(411f) inv = newScalableInvariantDeviceProfile() } @@ -79,6 +80,7 @@ abstract class DeviceProfileBaseTest { whenever(info.isTablet(any())).thenReturn(true) whenever(info.getDensityDpi()).thenReturn(320) + whenever(info.smallestSizeDp(any())).thenReturn(800f) inv = newScalableInvariantDeviceProfile() } diff --git a/tests/src/com/android/launcher3/DeviceProfileGridDimensionsTest.kt b/tests/src/com/android/launcher3/DeviceProfileGridDimensionsTest.kt deleted file mode 100644 index 80259a59b4..0000000000 --- a/tests/src/com/android/launcher3/DeviceProfileGridDimensionsTest.kt +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.launcher3 - -import android.graphics.PointF -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.SmallTest -import com.android.launcher3.util.WindowBounds -import com.google.common.truth.Truth.assertThat -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers -import org.mockito.Mockito.`when` as whenever - -/** - * Test for [DeviceProfile] grid dimensions. - * - * This includes workspace, cell layout, shortcut and widget container, cell sizes, etc. - */ -@SmallTest -@RunWith(AndroidJUnit4::class) -class DeviceProfileGridDimensionsTest : DeviceProfileBaseTest() { - - @Test - fun getCellLayoutWidth_twoPanelLandscapeScalable4By4GridTablet_equalsSinglePanelWidth() { - val tabletWidth = 2560 - val tabletHeight = 1600 - val availableWidth = 2560 - val availableHeight = 1500 - windowBounds = WindowBounds(tabletWidth, tabletHeight, availableWidth, availableHeight, 0) - useTwoPanels = true - whenever(info.isTablet(ArgumentMatchers.any())).thenReturn(true) - whenever(info.densityDpi).thenReturn(320) - inv = newScalableInvariantDeviceProfile() - - val dp = newDP() - - val expectedWorkspaceWidth = availableWidth - val expectedCellLayoutWidth = - (expectedWorkspaceWidth - (dp.workspacePadding.right + dp.workspacePadding.left)) / - dp.panelCount - assertThat(dp.cellLayoutWidth).isEqualTo(expectedCellLayoutWidth) - } - - @Test - fun getCellLayoutHeight_twoPanelLandscapeScalable4By4GridTablet_equalsSinglePanelHeight() { - val tabletWidth = 2560 - val tabletHeight = 1600 - val availableWidth = 2560 - val availableHeight = 1500 - windowBounds = WindowBounds(tabletWidth, tabletHeight, availableWidth, availableHeight, 0) - useTwoPanels = true - whenever(info.isTablet(ArgumentMatchers.any())).thenReturn(true) - whenever(info.densityDpi).thenReturn(320) - inv = newScalableInvariantDeviceProfile() - - val dp = newDP() - - val expectedWorkspaceHeight = availableHeight - val expectedCellLayoutHeight = - expectedWorkspaceHeight - (dp.workspacePadding.top + dp.workspacePadding.bottom) - assertThat(dp.cellLayoutHeight).isEqualTo(expectedCellLayoutHeight) - } - - @Test - fun getCellSize_twoPanelLandscapeScalable4By4GridTablet_equalsSinglePanelWidth() { - val tabletWidth = 2560 - val tabletHeight = 1600 - val availableWidth = 2560 - val availableHeight = 1500 - windowBounds = WindowBounds(tabletWidth, tabletHeight, availableWidth, availableHeight, 0) - useTwoPanels = true - whenever(info.isTablet(ArgumentMatchers.any())).thenReturn(true) - whenever(info.densityDpi).thenReturn(320) - inv = newScalableInvariantDeviceProfile() - - val dp = newDP() - - val expectedWorkspaceWidth = availableWidth - val expectedCellLayoutWidth = - (expectedWorkspaceWidth - (dp.workspacePadding.right + dp.workspacePadding.left)) / - dp.panelCount - val expectedShortcutAndWidgetContainerWidth = - expectedCellLayoutWidth - - (dp.cellLayoutPaddingPx.left + dp.cellLayoutPaddingPx.right) - assertThat(dp.getCellSize().x).isEqualTo( - (expectedShortcutAndWidgetContainerWidth - - ((inv!!.numColumns - 1) * dp.cellLayoutBorderSpacePx.x)) / inv!!.numColumns) - val expectedWorkspaceHeight = availableHeight - val expectedCellLayoutHeight = - expectedWorkspaceHeight - (dp.workspacePadding.top + dp.workspacePadding.bottom) - val expectedShortcutAndWidgetContainerHeight = expectedCellLayoutHeight - - (dp.cellLayoutPaddingPx.top + dp.cellLayoutPaddingPx.bottom) - assertThat(dp.getCellSize().y).isEqualTo( - (expectedShortcutAndWidgetContainerHeight - - ((inv!!.numRows - 1) * dp.cellLayoutBorderSpacePx.y)) / inv!!.numRows) - } - - @Test - fun getPanelCount_twoPanelLandscapeScalable4By4GridTablet_equalsTwoPanels() { - val tabletWidth = 2560 - val tabletHeight = 1600 - val availableWidth = 2560 - val availableHeight = 1500 - windowBounds = WindowBounds(tabletWidth, tabletHeight, availableWidth, availableHeight, 0) - useTwoPanels = true - whenever(info.isTablet(ArgumentMatchers.any())).thenReturn(true) - whenever(info.densityDpi).thenReturn(320) - inv = newScalableInvariantDeviceProfile() - - val dp = newDP() - - assertThat(dp.panelCount).isEqualTo(2) - } -} \ No newline at end of file