Skip to content

Commit 151f877

Browse files
Adds screenshot tests to :core:designsystem (#931)
* WIP: Adds screenshot tests to :core:designsystem Change-Id: I0672845feba4064652dd8d60f07047b87864e121 * 🤖 Updates screenshots * Creates tests for more components and cleans up Change-Id: I61fe3ae6a4e8a41a599d520e16fc14aa6a643a22 * WIP: More cleanup and more combinations of themes Change-Id: I34312bc7d147b31f1c638cd505a9c241f8267523 * Added the rest of the screenshot tests for designsystem Change-Id: Ic427db5491910781c038882055524e3f3dbed194 * Some more cleanup Change-Id: I7384e55864719af9122ad9da8e50a09cb9a60180 * Spotless Change-Id: I22aa46e1f56b8b638c9d609ababbe49d471a26c6 * 🤖 Updates screenshots * ScreenshotHelper cleanup Change-Id: Ic94d41618e7850ab47f294d8022b405f18c843f0
1 parent d0909a9 commit 151f877

File tree

120 files changed

+1120
-32
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

120 files changed

+1120
-32
lines changed

app/src/testDemo/java/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022 The Android Open Source Project
2+
* Copyright 2023 The Android Open Source Project
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import com.android.build.gradle.LibraryExtension
1818
import com.google.samples.apps.nowinandroid.configureAndroidCompose
1919
import org.gradle.api.Plugin
2020
import org.gradle.api.Project
21+
import org.gradle.kotlin.dsl.dependencies
2122
import org.gradle.kotlin.dsl.getByType
23+
import org.gradle.kotlin.dsl.kotlin
2224

2325
class AndroidLibraryComposeConventionPlugin : Plugin<Project> {
2426
override fun apply(target: Project) {

build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,11 @@ class AndroidLibraryConventionPlugin : Plugin<Project> {
4747
disableUnnecessaryAndroidTests(target)
4848
}
4949
dependencies {
50-
add("androidTestImplementation", kotlin("test"))
5150
add("testImplementation", kotlin("test"))
51+
add("testImplementation", project(":core:testing"))
52+
add("androidTestImplementation", kotlin("test"))
53+
add("androidTestImplementation", project(":core:testing"))
5254
}
5355
}
5456
}
55-
}
57+
}

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,20 @@ import androidx.compose.foundation.layout.Box
2121
import androidx.compose.foundation.layout.PaddingValues
2222
import androidx.compose.foundation.layout.RowScope
2323
import androidx.compose.foundation.layout.padding
24+
import androidx.compose.foundation.layout.size
2425
import androidx.compose.foundation.layout.sizeIn
2526
import androidx.compose.material3.Button
2627
import androidx.compose.material3.ButtonDefaults
28+
import androidx.compose.material3.Icon
2729
import androidx.compose.material3.MaterialTheme
2830
import androidx.compose.material3.OutlinedButton
31+
import androidx.compose.material3.Text
2932
import androidx.compose.material3.TextButton
3033
import androidx.compose.runtime.Composable
3134
import androidx.compose.ui.Modifier
3235
import androidx.compose.ui.unit.dp
36+
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
37+
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
3338

3439
/**
3540
* Now in Android filled button with generic content slot. Wraps Material 3 [Button].
@@ -260,6 +265,50 @@ private fun NiaButtonContent(
260265
}
261266
}
262267

268+
@ThemePreviews
269+
@Composable
270+
fun NiaButtonPreview() {
271+
NiaTheme {
272+
NiaBackground(modifier = Modifier.size(150.dp, 50.dp)) {
273+
NiaButton(onClick = {}, text = { Text("Test button") })
274+
}
275+
}
276+
}
277+
278+
@ThemePreviews
279+
@Composable
280+
fun NiaOutlinedButtonPreview() {
281+
NiaTheme() {
282+
NiaBackground(modifier = Modifier.size(150.dp, 50.dp)) {
283+
NiaOutlinedButton(onClick = {}, text = { Text("Test button") })
284+
}
285+
}
286+
}
287+
288+
@ThemePreviews
289+
@Composable
290+
fun NiaButtonPreview2() {
291+
NiaTheme {
292+
NiaBackground(modifier = Modifier.size(150.dp, 50.dp)) {
293+
NiaButton(onClick = {}, text = { Text("Test button") })
294+
}
295+
}
296+
}
297+
298+
@ThemePreviews
299+
@Composable
300+
fun NiaButtonLeadingIconPreview() {
301+
NiaTheme {
302+
NiaBackground(modifier = Modifier.size(150.dp, 50.dp)) {
303+
NiaButton(
304+
onClick = {},
305+
text = { Text("Test button") },
306+
leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) },
307+
)
308+
}
309+
}
310+
}
311+
263312
/**
264313
* Now in Android button default values.
265314
*/

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,21 @@
1616

1717
package com.google.samples.apps.nowinandroid.core.designsystem.component
1818

19+
import androidx.compose.foundation.layout.size
1920
import androidx.compose.foundation.shape.CircleShape
2021
import androidx.compose.material3.ExperimentalMaterial3Api
2122
import androidx.compose.material3.FilterChip
2223
import androidx.compose.material3.FilterChipDefaults
2324
import androidx.compose.material3.Icon
2425
import androidx.compose.material3.MaterialTheme
2526
import androidx.compose.material3.ProvideTextStyle
27+
import androidx.compose.material3.Text
2628
import androidx.compose.runtime.Composable
2729
import androidx.compose.ui.Modifier
2830
import androidx.compose.ui.graphics.Color
2931
import androidx.compose.ui.unit.dp
3032
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
33+
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
3134

3235
/**
3336
* Now in Android filter chip with included leading checked icon as well as text content slot.
@@ -103,6 +106,18 @@ fun NiaFilterChip(
103106
)
104107
}
105108

109+
@ThemePreviews
110+
@Composable
111+
fun ChipPreview() {
112+
NiaTheme {
113+
NiaBackground(modifier = Modifier.size(80.dp, 20.dp)) {
114+
NiaFilterChip(selected = true, onSelectedChange = {}) {
115+
Text("Chip")
116+
}
117+
}
118+
}
119+
}
120+
106121
/**
107122
* Now in Android chip default values.
108123
*/

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
package com.google.samples.apps.nowinandroid.core.designsystem.component
1818

1919
import androidx.compose.material3.FilledIconToggleButton
20+
import androidx.compose.material3.Icon
2021
import androidx.compose.material3.IconButton
2122
import androidx.compose.material3.IconButtonDefaults
2223
import androidx.compose.material3.MaterialTheme
2324
import androidx.compose.runtime.Composable
2425
import androidx.compose.ui.Modifier
2526
import androidx.compose.ui.graphics.Color
27+
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
28+
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
2629

2730
/**
2831
* Now in Android toggle button with icon and checked icon content slots. Wraps Material 3
@@ -68,6 +71,52 @@ fun NiaIconToggleButton(
6871
}
6972
}
7073

74+
@ThemePreviews
75+
@Composable
76+
fun IconButtonPreview() {
77+
NiaTheme {
78+
NiaIconToggleButton(
79+
checked = true,
80+
onCheckedChange = { },
81+
icon = {
82+
Icon(
83+
imageVector = NiaIcons.BookmarkBorder,
84+
contentDescription = null,
85+
)
86+
},
87+
checkedIcon = {
88+
Icon(
89+
imageVector = NiaIcons.Bookmark,
90+
contentDescription = null,
91+
)
92+
},
93+
)
94+
}
95+
}
96+
97+
@ThemePreviews
98+
@Composable
99+
fun IconButtonPreviewUnchecked() {
100+
NiaTheme {
101+
NiaIconToggleButton(
102+
checked = false,
103+
onCheckedChange = { },
104+
icon = {
105+
Icon(
106+
imageVector = NiaIcons.BookmarkBorder,
107+
contentDescription = null,
108+
)
109+
},
110+
checkedIcon = {
111+
Icon(
112+
imageVector = NiaIcons.Bookmark,
113+
contentDescription = null,
114+
)
115+
},
116+
)
117+
}
118+
}
119+
71120
/**
72121
* Now in Android icon button default values.
73122
*/

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ fun NiaLoadingWheel(
8888
// Specifies the color animation for the base-to-progress line color change
8989
val baseLineColor = MaterialTheme.colorScheme.onBackground
9090
val progressLineColor = MaterialTheme.colorScheme.inversePrimary
91+
9192
val colorAnimValues = (0 until NUM_OF_LINES).map { index ->
9293
infiniteTransition.animateColor(
9394
initialValue = baseLineColor,

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,21 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component
1818

1919
import androidx.compose.foundation.layout.ColumnScope
2020
import androidx.compose.foundation.layout.RowScope
21+
import androidx.compose.material3.Icon
2122
import androidx.compose.material3.MaterialTheme
2223
import androidx.compose.material3.NavigationBar
2324
import androidx.compose.material3.NavigationBarItem
2425
import androidx.compose.material3.NavigationBarItemDefaults
2526
import androidx.compose.material3.NavigationRail
2627
import androidx.compose.material3.NavigationRailItem
2728
import androidx.compose.material3.NavigationRailItemDefaults
29+
import androidx.compose.material3.Text
2830
import androidx.compose.runtime.Composable
2931
import androidx.compose.ui.Modifier
3032
import androidx.compose.ui.graphics.Color
3133
import androidx.compose.ui.unit.dp
34+
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
35+
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
3236

3337
/**
3438
* Now in Android navigation bar item with icon and label content slots. Wraps Material 3
@@ -161,6 +165,46 @@ fun NiaNavigationRail(
161165
)
162166
}
163167

168+
@ThemePreviews
169+
@Composable
170+
fun NiaNavigationPreview() {
171+
val items = listOf("For you", "Saved", "Interests")
172+
val icons = listOf(
173+
NiaIcons.UpcomingBorder,
174+
NiaIcons.BookmarksBorder,
175+
NiaIcons.Grid3x3,
176+
)
177+
val selectedIcons = listOf(
178+
NiaIcons.Upcoming,
179+
NiaIcons.Bookmarks,
180+
NiaIcons.Grid3x3,
181+
)
182+
183+
NiaTheme {
184+
NiaNavigationBar {
185+
items.forEachIndexed { index, item ->
186+
NiaNavigationBarItem(
187+
icon = {
188+
Icon(
189+
imageVector = icons[index],
190+
contentDescription = item,
191+
)
192+
},
193+
selectedIcon = {
194+
Icon(
195+
imageVector = selectedIcons[index],
196+
contentDescription = item,
197+
)
198+
},
199+
label = { Text(item) },
200+
selected = index == 0,
201+
onClick = { },
202+
)
203+
}
204+
}
205+
}
206+
}
207+
164208
/**
165209
* Now in Android navigation default values.
166210
*/

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,15 @@ import androidx.compose.material3.Tab
2424
import androidx.compose.material3.TabRow
2525
import androidx.compose.material3.TabRowDefaults
2626
import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset
27+
import androidx.compose.material3.Text
2728
import androidx.compose.runtime.Composable
29+
import androidx.compose.runtime.getValue
30+
import androidx.compose.runtime.setValue
2831
import androidx.compose.ui.Modifier
2932
import androidx.compose.ui.graphics.Color
3033
import androidx.compose.ui.text.style.TextAlign
3134
import androidx.compose.ui.unit.dp
35+
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
3236

3337
/**
3438
* Now in Android tab. Wraps Material 3 [Tab] and shifts text label down.
@@ -97,6 +101,23 @@ fun NiaTabRow(
97101
)
98102
}
99103

104+
@ThemePreviews
105+
@Composable
106+
fun TabsPreview() {
107+
NiaTheme {
108+
val titles = listOf("Topics", "People")
109+
NiaTabRow(selectedTabIndex = 0) {
110+
titles.forEachIndexed { index, title ->
111+
NiaTab(
112+
selected = index == 0,
113+
onClick = { },
114+
text = { Text(text = title) },
115+
)
116+
}
117+
}
118+
}
119+
}
120+
100121
object NiaTabDefaults {
101122
val TabTopPadding = 7.dp
102123
}

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ import androidx.compose.foundation.layout.Box
2020
import androidx.compose.material3.ButtonDefaults
2121
import androidx.compose.material3.MaterialTheme
2222
import androidx.compose.material3.ProvideTextStyle
23+
import androidx.compose.material3.Text
2324
import androidx.compose.material3.TextButton
2425
import androidx.compose.material3.contentColorFor
2526
import androidx.compose.runtime.Composable
2627
import androidx.compose.ui.Modifier
28+
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
2729

2830
@Composable
2931
fun NiaTopicTag(
@@ -59,6 +61,16 @@ fun NiaTopicTag(
5961
}
6062
}
6163

64+
@ThemePreviews
65+
@Composable
66+
fun TagPreview() {
67+
NiaTheme {
68+
NiaTopicTag(followed = true, onClick = {}) {
69+
Text("Topic".uppercase())
70+
}
71+
}
72+
}
73+
6274
/**
6375
* Now in Android tag default values.
6476
*/

0 commit comments

Comments
 (0)