Merge "Simplify vertical bar hotseat bottom calculation for spring loaded state." into tm-qpr-dev

This commit is contained in:
Pat Manning
2022-07-05 10:28:10 +00:00
committed by Android (Google) Code Review
5 changed files with 128 additions and 135 deletions

View File

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

View File

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

View File

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

View File

@@ -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()
}

View File

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