Skip to content

Commit 6ee26da

Browse files
authored
Merge branch 'main' into chore/gradle_wrapper_update
2 parents 936d066 + de8f4a9 commit 6ee26da

File tree

9 files changed

+121
-7
lines changed

9 files changed

+121
-7
lines changed

.github/workflows/test.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright 2020 Google LLC
1+
# Copyright 2024 Google LLC
22
#
33
# Licensed under the Apache License, Version 2.0 (the "License");
44
# you may not use this file except in compliance with the License.
@@ -45,3 +45,13 @@ jobs:
4545

4646
- name: Build modules
4747
run: ./gradlew build jacocoTestReport --stacktrace
48+
49+
- name: Run Screenshot Tests
50+
run: ./gradlew validateDebugScreenshotTest
51+
52+
- name: Upload build reports
53+
uses: actions/upload-artifact@v4
54+
if: always()
55+
with:
56+
name: my-artifact
57+
path: app/build/reports

app/build.gradle.kts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ plugins {
33
id("kotlin-android")
44
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
55
alias(libs.plugins.compose.compiler)
6+
alias(libs.plugins.screenshot)
67
}
78

89
android {
@@ -46,6 +47,14 @@ android {
4647
jvmTarget = "1.8"
4748
freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn"
4849
}
50+
51+
experimentalProperties["android.experimental.enableScreenshotTest"] = true
52+
53+
testOptions {
54+
screenshotTests {
55+
imageDifferenceThreshold = 0.035f // 3.5%
56+
}
57+
}
4958
}
5059

5160
dependencies {
@@ -68,6 +77,8 @@ dependencies {
6877
androidTestImplementation(libs.androidx.test.compose.ui)
6978
androidTestImplementation(libs.kotlinx.coroutines.test)
7079

80+
screenshotTestImplementation(libs.androidx.compose.ui.tooling)
81+
7182
// Instead of the lines below, regular apps would load these libraries from Maven according to
7283
// the README installation instructions
7384
implementation(project(":maps-compose"))
2.77 KB
Loading
2.77 KB
Loading

app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,18 @@ import androidx.compose.foundation.layout.systemBarsPadding
3131
import androidx.compose.foundation.layout.wrapContentSize
3232
import androidx.compose.material.CircularProgressIndicator
3333
import androidx.compose.material.MaterialTheme
34+
import androidx.compose.runtime.Composable
3435
import androidx.compose.runtime.getValue
3536
import androidx.compose.runtime.mutableStateOf
3637
import androidx.compose.runtime.remember
3738
import androidx.compose.runtime.setValue
3839
import androidx.compose.ui.Alignment
3940
import androidx.compose.ui.Modifier
41+
import androidx.compose.ui.tooling.preview.Preview
4042
import androidx.compose.ui.unit.dp
43+
import com.google.android.gms.maps.model.CameraPosition
44+
import com.google.android.gms.maps.model.LatLng
45+
import com.google.maps.android.compose.theme.MapsComposeSampleTheme
4146
import com.google.maps.android.compose.widgets.DarkGray
4247
import com.google.maps.android.compose.widgets.DisappearingScaleBar
4348
import com.google.maps.android.compose.widgets.ScaleBar
@@ -126,4 +131,26 @@ class ScaleBarActivity : ComponentActivity() {
126131
}
127132
}
128133
}
134+
}
135+
136+
@Preview
137+
@Composable
138+
fun PreviewScaleBar() {
139+
val cameraPositionState = remember {
140+
CameraPositionState(
141+
position = CameraPosition(
142+
LatLng(48.137154, 11.576124), // Example coordinates: Munich, Germany
143+
12f,
144+
0f,
145+
0f
146+
)
147+
)
148+
}
149+
150+
MapsComposeSampleTheme {
151+
ScaleBar(
152+
modifier = Modifier.padding(end = 4.dp),
153+
cameraPositionState = cameraPositionState
154+
)
155+
}
129156
}

app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ fun CustomRendererClustering(items: List<MyItem>) {
223223
},
224224
clusterManager = clusterManager,
225225
)
226+
226227
SideEffect {
227228
clusterManager ?: return@SideEffect
228229
clusterManager.setOnClusterClickListener {
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.google.maps.android.compose
2+
3+
import androidx.compose.foundation.layout.padding
4+
import androidx.compose.runtime.Composable
5+
import androidx.compose.runtime.remember
6+
import androidx.compose.ui.Modifier
7+
import androidx.compose.ui.tooling.preview.Preview
8+
import androidx.compose.ui.unit.dp
9+
import com.google.android.gms.maps.model.CameraPosition
10+
import com.google.android.gms.maps.model.LatLng
11+
import com.google.maps.android.compose.theme.MapsComposeSampleTheme
12+
import com.google.maps.android.compose.widgets.DisappearingScaleBar
13+
import com.google.maps.android.compose.widgets.ScaleBar
14+
15+
16+
class ScaleBarTest() {
17+
@Preview
18+
@Composable
19+
fun PreviewScaleBar() {
20+
val cameraPositionState = remember {
21+
CameraPositionState(
22+
position = CameraPosition(
23+
LatLng(48.137154, 11.576124), // Example coordinates: Munich, Germany
24+
12f,
25+
0f,
26+
0f
27+
)
28+
)
29+
}
30+
31+
MapsComposeSampleTheme {
32+
ScaleBar(
33+
modifier = Modifier.padding(end = 4.dp),
34+
cameraPositionState = cameraPositionState
35+
)
36+
}
37+
}
38+
39+
@Preview
40+
@Composable
41+
fun PreviewDisappearingScaleBar() {
42+
val cameraPositionState = remember {
43+
CameraPositionState(
44+
position = CameraPosition(
45+
LatLng(48.137154, 11.576124), // Example coordinates: Munich, Germany
46+
12f,
47+
0f,
48+
0f
49+
)
50+
)
51+
}
52+
53+
MapsComposeSampleTheme {
54+
DisappearingScaleBar(
55+
modifier = Modifier.padding(end = 4.dp),
56+
cameraPositionState = cameraPositionState
57+
)
58+
}
59+
}
60+
}

gradle.properties

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,6 @@ sonatypeToken=
3131
sonatypeTokenPassword=
3232

3333
android.nonTransitiveRClass=false
34-
android.nonFinalResIds=false
34+
android.nonFinalResIds=false
35+
36+
android.experimental.enableScreenshotTest=true

gradle/libs.versions.toml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
[versions]
22
activitycompose = "1.9.3"
33
agp = "8.7.2"
4-
androidxtest = "1.6.1"
5-
compose-bom = "2024.10.01"
4+
androidxtest = "1.6.2"
5+
androidCore = "1.6.1"
6+
compose-bom = "2024.11.00"
67
dokka = "1.9.20"
78
espresso = "3.6.1"
89
jacoco-plugin = "0.2.1"
@@ -14,6 +15,7 @@ mapsktx = "5.1.1"
1415
mapsecrets = "2.0.1"
1516
org-jacoco-core = "0.8.11"
1617
androidx-core = "1.15.0"
18+
screenshot = "0.0.1-alpha08"
1719

1820
[libraries]
1921
android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" }
@@ -26,10 +28,10 @@ androidx-compose-ui-preview-tooling = { module = "androidx.compose.ui:ui-tooling
2628
androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
2729
androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-core" }
2830
androidx-test-compose-ui = { module = "androidx.compose.ui:ui-test-junit4" }
29-
androidx-test-core = { module = "androidx.test:core", version.ref = "androidxtest" }
31+
androidx-test-core = { module = "androidx.test:core", version.ref = "androidCore" }
3032
androidx-test-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" }
3133
androidx-test-junit-ktx = { module = "androidx.test.ext:junit-ktx", version.ref = "junitktx" }
32-
androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidxtest" }
34+
androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidCore" }
3335
androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidxtest" }
3436
dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
3537
jacoco-android-plugin = { module = "com.mxalbert.gradle:jacoco-android", version.ref = "jacoco-plugin", version.require = "0.2.1" }
@@ -45,4 +47,5 @@ test-junit = { module = "junit:junit", version.ref = "junit" }
4547

4648
[plugins]
4749
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
48-
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
50+
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
51+
screenshot = { id = "com.android.compose.screenshot", version.ref = "screenshot"}

0 commit comments

Comments
 (0)