diff options
author | Thales Lima <tsuharesu@google.com> | 2022-03-25 17:06:11 +0000 |
---|---|---|
committer | Thales Lima <tsuharesu@google.com> | 2022-03-30 20:57:57 +0100 |
commit | 12d0eff037ff7537297f4d80b5d4e7d610529c5b (patch) | |
tree | cb9900288b2f77eecddf3aefd356c728b88e19e3 /tests | |
parent | ee09cd03f38b42f6d27ab4a35af763f944835e89 (diff) | |
download | Launcher3-12d0eff037ff7537297f4d80b5d4e7d610529c5b.tar.gz |
Make inline qsb part of grid attrs
This should make it more configurable, and be independent of the screen size set by the user.
Fix: 223726518
Test: atest Launcher3Tests:HotseatSizeTest
Test: atest Launcher3Tests:InlineQsbTest
Change-Id: If04f3fb0f556103f60b580c757a9fc06da561516
Diffstat (limited to 'tests')
-rw-r--r-- | tests/src/com/android/launcher3/DeviceProfileBaseTest.kt | 133 | ||||
-rw-r--r-- | tests/src/com/android/launcher3/DeviceProfileTest.kt | 219 | ||||
-rw-r--r-- | tests/src/com/android/launcher3/HotseatSizeTest.kt | 186 | ||||
-rw-r--r-- | tests/src/com/android/launcher3/InlineQsbTest.kt | 105 |
4 files changed, 424 insertions, 219 deletions
diff --git a/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt b/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt new file mode 100644 index 0000000000..e598df961d --- /dev/null +++ b/tests/src/com/android/launcher3/DeviceProfileBaseTest.kt @@ -0,0 +1,133 @@ +/* + * 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.content.Context +import android.graphics.PointF +import androidx.test.core.app.ApplicationProvider +import com.android.launcher3.util.DisplayController.Info +import com.android.launcher3.util.WindowBounds +import org.junit.Before +import org.mockito.ArgumentMatchers.any +import org.mockito.Mockito.mock +import org.mockito.Mockito.`when` as whenever + +abstract class DeviceProfileBaseTest { + + protected var context: Context? = null + protected var inv: InvariantDeviceProfile? = null + protected var info: Info = mock(Info::class.java) + protected var windowBounds: WindowBounds? = null + protected var isMultiWindowMode: Boolean = false + protected var transposeLayoutWithOrientation: Boolean = false + protected var useTwoPanels: Boolean = false + protected var isGestureMode: Boolean = true + + @Before + fun setUp() { + context = ApplicationProvider.getApplicationContext() + // make sure to reset values + useTwoPanels = false + isGestureMode = true + } + + protected fun newDP(): DeviceProfile = DeviceProfile( + context, + inv, + info, + windowBounds, + isMultiWindowMode, + transposeLayoutWithOrientation, + useTwoPanels, + isGestureMode + ) + + protected fun initializeVarsForPhone(isLandscape: Boolean = false) { + val (x, y) = if (isLandscape) + Pair(3120, 1440) + else + Pair(1440, 3120) + + windowBounds = WindowBounds(x, y, x, y - 100, 0) + + whenever(info.isTablet(any())).thenReturn(false) + + inv = newScalableInvariantDeviceProfile() + } + + protected fun initializeVarsForTablet(isLandscape: Boolean = false) { + val (x, y) = if (isLandscape) + Pair(2560, 1600) + else + Pair(1600, 2560) + + windowBounds = WindowBounds(x, y, x, y - 100, 0) + + whenever(info.isTablet(any())).thenReturn(true) + + inv = newScalableInvariantDeviceProfile() + } + + /** + * A very generic grid, just to make qsb tests work. For real calculations, make sure to use + * values that better represent a real grid. + */ + protected fun newScalableInvariantDeviceProfile(): InvariantDeviceProfile = + InvariantDeviceProfile().apply { + isScalable = true + numColumns = 5 + numRows = 5 + numShownHotseatIcons = 5 + numDatabaseHotseatIcons = 6 + numShrunkenHotseatIcons = 4 + horizontalMargin = FloatArray(4) { 22f } + borderSpaces = listOf( + PointF(16f, 16f), + PointF(16f, 16f), + PointF(16f, 16f), + PointF(16f, 16f) + ).toTypedArray() + allAppsBorderSpaces = listOf( + PointF(16f, 16f), + PointF(16f, 16f), + PointF(16f, 16f), + PointF(16f, 16f) + ).toTypedArray() + hotseatBorderSpaces = FloatArray(4) { 16f } + iconSize = FloatArray(4) { 56f } + allAppsIconSize = FloatArray(4) { 56f } + iconTextSize = FloatArray(4) { 14f } + allAppsIconTextSize = FloatArray(4) { 14f } + minCellSize = listOf( + PointF(64f, 83f), + PointF(64f, 83f), + PointF(64f, 83f), + PointF(64f, 83f) + ).toTypedArray() + allAppsCellSize = listOf( + PointF(64f, 83f), + PointF(64f, 83f), + PointF(64f, 83f), + PointF(64f, 83f) + ).toTypedArray() + inlineQsb = booleanArrayOf( + false, + false, + false, + false + ) + } +}
\ No newline at end of file diff --git a/tests/src/com/android/launcher3/DeviceProfileTest.kt b/tests/src/com/android/launcher3/DeviceProfileTest.kt deleted file mode 100644 index d1e91ed072..0000000000 --- a/tests/src/com/android/launcher3/DeviceProfileTest.kt +++ /dev/null @@ -1,219 +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.content.Context -import android.graphics.PointF -import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.filters.SmallTest -import com.android.launcher3.util.DisplayController.Info -import com.android.launcher3.util.WindowBounds -import com.google.common.truth.Truth.assertThat -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mockito.* - -@SmallTest -@RunWith(AndroidJUnit4::class) -class DeviceProfileTest { - - private var context: Context? = null - private var inv: InvariantDeviceProfile? = null - private var info: Info = mock(Info::class.java) - private var windowBounds: WindowBounds? = null - private var isMultiWindowMode: Boolean = false - private var transposeLayoutWithOrientation: Boolean = false - private var useTwoPanels: Boolean = false - private var isGestureMode: Boolean = true - - @Before - fun setUp() { - context = ApplicationProvider.getApplicationContext() - // make sure to reset values - useTwoPanels = false - } - - @Test - fun qsbWidth_is_match_parent_for_phones() { - initializeVarsForPhone() - - val dp = DeviceProfile( - context, - inv, - info, - windowBounds, - isMultiWindowMode, - transposeLayoutWithOrientation, - useTwoPanels, - isGestureMode - ) - - assertThat(dp.isQsbInline).isFalse() - assertThat(dp.qsbWidth).isEqualTo(0) - } - - @Test - fun qsbWidth_is_match_parent_for_tablet_portrait() { - initializeVarsForLargeTablet() - - val dp = DeviceProfile( - context, - inv, - info, - windowBounds, - isMultiWindowMode, - transposeLayoutWithOrientation, - useTwoPanels, - isGestureMode - ) - - assertThat(dp.isQsbInline).isFalse() - assertThat(dp.qsbWidth).isEqualTo(0) - } - - @Test - fun qsbWidth_has_size_for_large_tablet_landscape() { - initializeVarsForLargeTablet(true) - - val dp = DeviceProfile( - context, - inv, - info, - windowBounds, - isMultiWindowMode, - transposeLayoutWithOrientation, - useTwoPanels, - isGestureMode - ) - - if (dp.hotseatQsbHeight > 0) { - assertThat(dp.isQsbInline).isTrue() - assertThat(dp.qsbWidth).isGreaterThan(0) - } else { - assertThat(dp.isQsbInline).isFalse() - assertThat(dp.qsbWidth).isEqualTo(0) - } - } - - /** - * This test is to make sure that two panels don't inline the QSB as tablets do - */ - @Test - fun qsbWidth_is_match_parent_for_small_two_panel_landscape() { - initializeVarsForSmallTablet(true) - useTwoPanels = true - - val dp = DeviceProfile( - context, - inv, - info, - windowBounds, - isMultiWindowMode, - transposeLayoutWithOrientation, - useTwoPanels, - isGestureMode - ) - - assertThat(dp.isQsbInline).isFalse() - assertThat(dp.qsbWidth).isEqualTo(0) - } - - private fun initializeVarsForPhone(isLandscape: Boolean = false) { - val (x, y) = if (isLandscape) - Pair(3120, 1440) - else - Pair(1440, 3120) - - windowBounds = WindowBounds(x, y, x, y - 100, 0) - - `when`(info.isTablet(any())).thenReturn(false) - `when`(info.isLargeTablet(any())).thenReturn(false) - - scalableInvariantDeviceProfile() - } - - private fun initializeVarsForSmallTablet(isLandscape: Boolean = false) { - val (x, y) = if (isLandscape) - Pair(2560, 1600) - else - Pair(1600, 2560) - - windowBounds = WindowBounds(x, y, x, y - 100, 0) - - `when`(info.isTablet(any())).thenReturn(true) - `when`(info.isLargeTablet(any())).thenReturn(false) - - scalableInvariantDeviceProfile() - } - - private fun initializeVarsForLargeTablet(isLandscape: Boolean = false) { - val (x, y) = if (isLandscape) - Pair(2560, 1600) - else - Pair(1600, 2560) - - windowBounds = WindowBounds(x, y, x, y - 100, 0) - - `when`(info.isTablet(any())).thenReturn(true) - `when`(info.isLargeTablet(any())).thenReturn(true) - - scalableInvariantDeviceProfile() - } - - /** - * A very generic grid, just to make qsb tests work. For real calculations, make sure to use - * values that better represent a real grid. - */ - private fun scalableInvariantDeviceProfile() { - inv = InvariantDeviceProfile().apply { - isScalable = true - numColumns = 5 - numRows = 5 - horizontalMargin = FloatArray(4) { 22f } - borderSpaces = listOf( - PointF(16f, 16f), - PointF(16f, 16f), - PointF(16f, 16f), - PointF(16f, 16f) - ).toTypedArray() - allAppsBorderSpaces = listOf( - PointF(16f, 16f), - PointF(16f, 16f), - PointF(16f, 16f), - PointF(16f, 16f) - ).toTypedArray() - hotseatBorderSpaces = FloatArray(4) { 16f } - iconSize = FloatArray(4) { 56f } - allAppsIconSize = FloatArray(4) { 56f } - iconTextSize = FloatArray(4) { 14f } - allAppsIconTextSize = FloatArray(4) { 14f } - minCellSize = listOf( - PointF(64f, 83f), - PointF(64f, 83f), - PointF(64f, 83f), - PointF(64f, 83f) - ).toTypedArray() - allAppsCellSize = listOf( - PointF(64f, 83f), - PointF(64f, 83f), - PointF(64f, 83f), - PointF(64f, 83f) - ).toTypedArray() - } - } -}
\ No newline at end of file diff --git a/tests/src/com/android/launcher3/HotseatSizeTest.kt b/tests/src/com/android/launcher3/HotseatSizeTest.kt new file mode 100644 index 0000000000..ca697d7c96 --- /dev/null +++ b/tests/src/com/android/launcher3/HotseatSizeTest.kt @@ -0,0 +1,186 @@ +/* + * 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 androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.launcher3.InvariantDeviceProfile.TYPE_MULTI_DISPLAY +import com.android.launcher3.InvariantDeviceProfile.TYPE_PHONE +import com.android.launcher3.InvariantDeviceProfile.TYPE_TABLET +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] + */ +@SmallTest +@RunWith(AndroidJUnit4::class) +class HotseatSizeTest : DeviceProfileBaseTest() { + + @Test + fun hotseat_size_is_normal_for_handhelds() { + initializeVarsForPhone() + inv = newScalableInvariantDeviceProfile().apply { + deviceType = TYPE_PHONE + } + + val dp = newDP() + + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(5) + } + + @Test + fun hotseat_size_is_max_for_foldables() { + initializeVarsForTablet(isLandscape = true) + inv = newScalableInvariantDeviceProfile().apply { + deviceType = TYPE_MULTI_DISPLAY + } + useTwoPanels = true + + val dp = newDP() + + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(6) + } + + @Test + fun hotseat_size_is_shrunk_if_needed() { + initializeVarsForTablet(isLandscape = true) + inv = newScalableInvariantDeviceProfile().apply { + deviceType = TYPE_MULTI_DISPLAY + inlineQsb = booleanArrayOf( + false, + false, + false, + true // two panels landscape + ) + } + useTwoPanels = true + + isGestureMode = false + val dp = newDP() + + if (dp.hotseatQsbHeight > 0) { + assertThat(dp.isQsbInline).isTrue() + assertThat(dp.numShownHotseatIcons).isEqualTo(4) + } else { // Launcher3 doesn't have QSB height + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(6) + } + } + + /** + * For consistency, the hotseat should shrink if any orientation on the device type has an + * inline qsb + */ + @Test + fun hotseat_size_is_shrunk_even_in_portrait() { + initializeVarsForTablet() + inv = newScalableInvariantDeviceProfile().apply { + deviceType = TYPE_MULTI_DISPLAY + inlineQsb = booleanArrayOf( + false, + false, + false, + true // two panels landscape + ) + } + useTwoPanels = true + + isGestureMode = false + val dp = newDP() + + if (dp.hotseatQsbHeight > 0) { + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(4) + } else { // Launcher3 doesn't have QSB height + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(6) + } + } + + @Test + fun hotseat_size_is_default_when_folded() { + initializeVarsForPhone() + inv = newScalableInvariantDeviceProfile().apply { + deviceType = TYPE_MULTI_DISPLAY + } + useTwoPanels = true + + val dp = newDP() + + assertThat(dp.numShownHotseatIcons).isEqualTo(5) + } + + @Test + fun hotseat_size_is_shrunk_if_needed_on_tablet() { + initializeVarsForTablet(isLandscape = true) + inv = newScalableInvariantDeviceProfile().apply { + deviceType = TYPE_TABLET + inlineQsb = booleanArrayOf( + false, + true, // landscape + false, + false + ) + } + + isGestureMode = false + val dp = newDP() + + if (dp.hotseatQsbHeight > 0) { + assertThat(dp.isQsbInline).isTrue() + assertThat(dp.numShownHotseatIcons).isEqualTo(4) + } else { // Launcher3 doesn't have QSB height + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(5) + } + } + + /** + * For consistency, the hotseat should shrink if any orientation on the device type has an + * inline qsb + */ + @Test + fun hotseat_size_is_shrunk_even_in_portrait_on_tablet() { + initializeVarsForTablet() + inv = newScalableInvariantDeviceProfile().apply { + deviceType = TYPE_TABLET + inlineQsb = booleanArrayOf( + false, + true, // landscape + false, + false + ) + } + + isGestureMode = false + val dp = newDP() + + if (dp.hotseatQsbHeight > 0) { + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(4) + } else { // Launcher3 doesn't have QSB height + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.numShownHotseatIcons).isEqualTo(5) + } + } + +}
\ No newline at end of file diff --git a/tests/src/com/android/launcher3/InlineQsbTest.kt b/tests/src/com/android/launcher3/InlineQsbTest.kt new file mode 100644 index 0000000000..e00dca86e2 --- /dev/null +++ b/tests/src/com/android/launcher3/InlineQsbTest.kt @@ -0,0 +1,105 @@ +/* + * 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 androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Test for [DeviceProfile] + */ +@SmallTest +@RunWith(AndroidJUnit4::class) +class InlineQsbTest : DeviceProfileBaseTest() { + + @Test + fun qsbWidth_is_match_parent_for_phones() { + initializeVarsForPhone() + + val dp = newDP() + + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.qsbWidth).isEqualTo(0) + } + + @Test + fun qsbWidth_is_match_parent_for_tablet_portrait() { + initializeVarsForTablet() + inv = newScalableInvariantDeviceProfile().apply { + inlineQsb = booleanArrayOf( + false, + true, // landscape + false, + false + ) + } + + val dp = DeviceProfile( + context, + inv, + info, + windowBounds, + isMultiWindowMode, + transposeLayoutWithOrientation, + useTwoPanels, + isGestureMode + ) + + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.qsbWidth).isEqualTo(0) + } + + @Test + fun qsbWidth_has_size_for_tablet_landscape() { + initializeVarsForTablet(isLandscape = true) + inv = newScalableInvariantDeviceProfile().apply { + inlineQsb = booleanArrayOf( + false, + true, // landscape + false, + false + ) + } + + val dp = newDP() + + if (dp.hotseatQsbHeight > 0) { + assertThat(dp.isQsbInline).isTrue() + assertThat(dp.qsbWidth).isGreaterThan(0) + } else { // Launcher3 doesn't have QSB height + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.qsbWidth).isEqualTo(0) + } + } + + /** + * This test is to make sure that a tablet doesn't inline the QSB if the layout doesn't support + */ + @Test + fun qsbWidth_is_match_parent_for_tablet_landscape_without_inline() { + initializeVarsForTablet(isLandscape = true) + useTwoPanels = true + + val dp = newDP() + + assertThat(dp.isQsbInline).isFalse() + assertThat(dp.qsbWidth).isEqualTo(0) + } + +}
\ No newline at end of file |