• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.launcher3.responsive
18 
19 import android.content.Context
20 import androidx.test.ext.junit.runners.AndroidJUnit4
21 import androidx.test.filters.SmallTest
22 import androidx.test.platform.app.InstrumentationRegistry
23 import com.android.launcher3.AbstractDeviceProfileTest
24 import com.android.launcher3.responsive.ResponsiveSpec.Companion.ResponsiveSpecType
25 import com.android.launcher3.responsive.ResponsiveSpec.DimensionType
26 import com.android.launcher3.util.TestResourceHelper
27 import com.google.common.truth.Truth.assertThat
28 import org.junit.Before
29 import org.junit.Test
30 import org.junit.runner.RunWith
31 
32 @SmallTest
33 @RunWith(AndroidJUnit4::class)
34 class CalculatedFolderSpecTest : AbstractDeviceProfileTest() {
35     override val runningContext: Context = InstrumentationRegistry.getInstrumentation().context
36     private val deviceSpec = deviceSpecs["phone"]!!
37     private val aspectRatio = deviceSpec.naturalSize.first.toFloat() / deviceSpec.naturalSize.second
38 
39     @Before
setupnull40     fun setup() {
41         initializeVarsForPhone(deviceSpec)
42     }
43 
44     @Test
validate_matchWidthWorkspacenull45     fun validate_matchWidthWorkspace() {
46         val columns = 6
47 
48         // Loading workspace specs
49         val resourceHelperWorkspace = TestResourceHelper(context, "valid_workspace_file".xmlToId())
50         val workspaceSpecs =
51             ResponsiveSpecsProvider.create(resourceHelperWorkspace, ResponsiveSpecType.Workspace)
52 
53         // Loading folders specs
54         val resourceHelperFolder = TestResourceHelper(context, "valid_folders_specs".xmlToId())
55         val folderSpecs =
56             ResponsiveSpecsProvider.create(resourceHelperFolder, ResponsiveSpecType.Folder)
57         val specs = folderSpecs.getSpecsByAspectRatio(aspectRatio)
58 
59         assertThat(specs.widthSpecs.size).isEqualTo(2)
60         assertThat(specs.widthSpecs[0].cellSize.matchWorkspace).isEqualTo(true)
61         assertThat(specs.widthSpecs[1].cellSize.matchWorkspace).isEqualTo(false)
62 
63         // Validate width spec <= 800
64         var availableWidth = deviceSpec.naturalSize.first
65         var calculatedWorkspace =
66             workspaceSpecs.getCalculatedSpec(
67                 aspectRatio,
68                 DimensionType.WIDTH,
69                 columns,
70                 availableWidth
71             )
72         var calculatedWidthFolderSpec =
73             folderSpecs.getCalculatedSpec(
74                 aspectRatio,
75                 DimensionType.WIDTH,
76                 columns,
77                 availableWidth,
78                 calculatedWorkspace
79             )
80         with(calculatedWidthFolderSpec) {
81             assertThat(availableSpace).isEqualTo(availableWidth)
82             assertThat(cells).isEqualTo(columns)
83             assertThat(startPaddingPx).isEqualTo(16.dpToPx())
84             assertThat(endPaddingPx).isEqualTo(16.dpToPx())
85             assertThat(gutterPx).isEqualTo(16.dpToPx())
86             assertThat(cellSizePx).isEqualTo(calculatedWorkspace.cellSizePx)
87         }
88 
89         // Validate width spec > 800
90         availableWidth = 2000.dpToPx()
91         calculatedWorkspace =
92             workspaceSpecs.getCalculatedSpec(
93                 aspectRatio,
94                 DimensionType.WIDTH,
95                 columns,
96                 availableWidth
97             )
98         calculatedWidthFolderSpec =
99             folderSpecs.getCalculatedSpec(
100                 aspectRatio,
101                 DimensionType.WIDTH,
102                 columns,
103                 availableWidth,
104                 calculatedWorkspace
105             )
106         with(calculatedWidthFolderSpec) {
107             assertThat(availableSpace).isEqualTo(availableWidth)
108             assertThat(cells).isEqualTo(columns)
109             assertThat(startPaddingPx).isEqualTo(16.dpToPx())
110             assertThat(endPaddingPx).isEqualTo(16.dpToPx())
111             assertThat(gutterPx).isEqualTo(16.dpToPx())
112             assertThat(cellSizePx).isEqualTo(102.dpToPx())
113         }
114     }
115 
116     @Test
validate_matchHeightWorkspacenull117     fun validate_matchHeightWorkspace() {
118         // Hotseat is roughly 495px on a real device, it doesn't need to be precise on unit tests
119         val hotseatSize = 495
120         val statusBarHeight = deviceSpec.statusBarNaturalPx
121         val availableHeight = deviceSpec.naturalSize.second - statusBarHeight - hotseatSize
122         val rows = 5
123 
124         // Loading workspace specs
125         val resourceHelperWorkspace = TestResourceHelper(context, "valid_workspace_file".xmlToId())
126         val workspaceSpecs =
127             ResponsiveSpecsProvider.create(resourceHelperWorkspace, ResponsiveSpecType.Workspace)
128 
129         // Loading folders specs
130         val resourceHelperFolder = TestResourceHelper(context, "valid_folders_specs".xmlToId())
131         val folderSpecs =
132             ResponsiveSpecsProvider.create(resourceHelperFolder, ResponsiveSpecType.Folder)
133         val specs = folderSpecs.getSpecsByAspectRatio(aspectRatio)
134 
135         assertThat(specs.heightSpecs.size).isEqualTo(1)
136         assertThat(specs.heightSpecs[0].cellSize.matchWorkspace).isEqualTo(true)
137 
138         // Validate height spec
139         val calculatedWorkspace =
140             workspaceSpecs.getCalculatedSpec(
141                 aspectRatio,
142                 DimensionType.HEIGHT,
143                 rows,
144                 availableHeight
145             )
146         val calculatedFolderSpec =
147             folderSpecs.getCalculatedSpec(
148                 aspectRatio,
149                 DimensionType.HEIGHT,
150                 rows,
151                 availableHeight,
152                 calculatedWorkspace
153             )
154         with(calculatedFolderSpec) {
155             assertThat(availableSpace).isEqualTo(availableHeight)
156             assertThat(cells).isEqualTo(rows)
157             assertThat(startPaddingPx).isEqualTo(24.dpToPx())
158             assertThat(endPaddingPx).isEqualTo(64.dpToPx())
159             assertThat(gutterPx).isEqualTo(16.dpToPx())
160             assertThat(cellSizePx).isEqualTo(calculatedWorkspace.cellSizePx)
161         }
162     }
163 }
164