From 779cb53c64c28b9c43bd03a433f1152a0bdd135a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 17:54:11 +0100 Subject: [PATCH 01/16] chore: added screenshot testing --- app/build.gradle.kts | 5 +++ .../PreviewScaleBar_da39a3ee_da39a3ee_0.png | Bin 0 -> 2839 bytes .../maps/android/compose/ScaleBarActivity.kt | 27 ++++++++++++ .../MarkerClusteringActivity.kt | 10 ++++- .../maps/android/compose/ScaleBarTest.kt | 37 ++++++++++++++++ gradle.properties | 4 +- gradle/libs.versions.toml | 13 +++--- .../android/compose/clustering/Clustering.kt | 41 ++++++++++++++++++ 8 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewScaleBar_da39a3ee_da39a3ee_0.png create mode 100644 app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 093812ac..9fe42fe5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,6 +3,7 @@ plugins { id("kotlin-android") id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") alias(libs.plugins.compose.compiler) + alias(libs.plugins.screenshot) } android { @@ -46,6 +47,8 @@ android { jvmTarget = "1.8" freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn" } + + experimentalProperties["android.experimental.enableScreenshotTest"] = true } dependencies { @@ -68,6 +71,8 @@ dependencies { androidTestImplementation(libs.androidx.test.compose.ui) androidTestImplementation(libs.kotlinx.coroutines.test) + screenshotTestImplementation(libs.androidx.compose.ui.tooling) + // Instead of the lines below, regular apps would load these libraries from Maven according to // the README installation instructions implementation(project(":maps-compose")) diff --git a/app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewScaleBar_da39a3ee_da39a3ee_0.png b/app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewScaleBar_da39a3ee_da39a3ee_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ffaf22e747052fac57b2367334dc5ec56f482c54 GIT binary patch literal 2839 zcmbW3cR1Y38pjb)kHqRB#OhHGL6jhpRaTTJ(FGeli$qwxZm_Hty>1Q>y=0XYL2&%^ zAWCFqk)tPAvbwOGJ@?+{{&DX=_uM~b=6RoazBA9fGxPbr3HOclSeSU3sHmt|p!yIq z%7~*hBm*6#7t~werJ`b*heEV1f*ul!$mSe+y#2d@bH#xmYd}O7fYh%CLF*)~6Rcty zye@u3M;(K$I4}FrSpCeP(+0;jV>*{(EP+h9b_UC-bne)T*)6eb_ieuZJjla)`;L9s z8kL1-V|=Z`hXPjfFwf5&>&kCu3ijWv&%woA^Z-Udt!QCY}wP(TWP=09=Bakpi?-u#!geU-@CYz zB~^l1Z5#oaRkt=vEAvOSi(73ZT?7zdPzUVD-&d4ZUQJDMQL?%Ul4R>BEzz;Cf1e3B zbQi6e#pUJYp%9hW@hH5k%katemBo+W;%Duucb@;w?Uz|KfF&8=+S@tIdy0a%VV)da2}wyQ@6gA_t)Hb9D+80cr0(`0KKsr(-SnAvYVP;a z;TLTSY}~^5AgbF4Z!1cjH6pmv(_G*Ce@{ofMq9NZ$Cyw=g*ZLk=PG*D)sGU%t~#-( zm$`-hh3@7ZR;B3v>}f9D-mRGC(=NgVPXxje*imUiRNaQ>ker_UsKqOd0s_0K2~9f5 zjmY(mu$6`iq~on2?wTE)>aaLLZ0+JyxHUD_q0cM9o7-1s&9xD~;}LIf)v6#Vv^_Sc z3C0Z{IRM76w{kDYAXb9wFDxvg(#k9N1QZ>%JO75VvKXKmw*16mkU@2gg$~J>fa8T# zKgCjVjFcUCtD-n8o9_awg}!Gch3&8bbe{BcMx`@hB9}&*&|+6e-37s4_QZR|gm?kE z>(0L4AA&Ex=0>ECH<=0q{_#;8TxvcpsI1ReK32%Jb0qt)DXV7b_luywt<&R*JGwmy zct7LI*l6L?2(4lKo9;Amxk&YbmoIOwjAWvHzrOGVT;Q`#x1#ur20TW4RA6>c9ulsa`J+YN9EIig|J6r1eqW55)!3kN}S&RvrKLmax zj}>B}gxWI+hoEh8dq zBb{aCk39~G!jut0-2Dcd9`pkyMOxUx*%1)&_;`KHw8a!^0RI_pMp|A*(FG~5@eHS> zmuiVH#{1+P9v(JEt6$K)BwL;{s4ugP29m^I7q9qdAMJ0|Zypc{n+vbvb=xy;^i`p1 z1&FMnKtx1KeAhQLFvh*4FKq@JI=&bRiI=m79(aEc&W?w#mb;^Av%C1Clmh-t6c?!rY2wID`mqxGB}@#r_~c|y z%Ctpe?KL0HubdsW?+!K|)wI-)adcv$@v=^$9I$}>{jzQ73gqquW{t~vILFkQL_BEQ zY^=L&YBIS|MrQG3@E|B@jlTZB3Az-rCpkyC%n-BOAyOni_qjafIn20|Ix`r!otGBllZ-Yf6>!sO!S3ZE6cl%E`VW`5LFsW@@% z{aldss_)sc5v0!KwE0aG`EWvXGGdV$_V|PSuM#5HWu!P^1V+1tHV81O((;L#HF?ZH zlYIxH`AqDN8Rt7x_^&DhJ^_L8TJ8nY!;0kcK~r@GRIU6JyPxVmA$w`R?pB14kE~Y> zr#;-*^r`%=!ycCME9i(?r%r_|M`KAQ`5Rr0o!Nc zdfw4^-Wyj(JzIH1jHR)iH5IHR_Kb{_UAWDr$=N|A>6y!^P?lr-xP;MGwhU+jhk2~j z3)=r0E)J{sj8mVafK(~Yc>m5OuRARDxF7PRq;Cd{4%eFP8B*1_77kuNCtF&_WRp}> z4;Fgjh05TLdDiZqBd$=+P%VmcXit<@PL3EbGv_Z%Vde+HcEK1jJuXsEYkd*CL_ zFb+n4E160hf!8ZaX(Jg1pXnvnjdE{rs*?GaAV7Nn;oB25@Fk}UEGl+Viady*c@OoRwXd8j{hYzpyE9sF?UDTL%+ zH(ILolF@pb)=w2!39$n)!y>{>56IZ{^rb?eYNLi?cKr#`8;t)i9RH(=JiF{?9<@)C TxSCHXc&VT|#*n%@PBDK1;N5AD literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt b/app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt index 172632b6..ba7d72b5 100644 --- a/app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt +++ b/app/src/main/java/com/google/maps/android/compose/ScaleBarActivity.kt @@ -31,13 +31,18 @@ import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.MaterialTheme +import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import com.google.android.gms.maps.model.CameraPosition +import com.google.android.gms.maps.model.LatLng +import com.google.maps.android.compose.theme.MapsComposeSampleTheme import com.google.maps.android.compose.widgets.DarkGray import com.google.maps.android.compose.widgets.DisappearingScaleBar import com.google.maps.android.compose.widgets.ScaleBar @@ -126,4 +131,26 @@ class ScaleBarActivity : ComponentActivity() { } } } +} + +@Preview +@Composable +fun PreviewScaleBar() { + val cameraPositionState = remember { + CameraPositionState( + position = CameraPosition( + LatLng(48.137154, 11.576124), // Example coordinates: Munich, Germany + 12f, + 0f, + 0f + ) + ) + } + + MapsComposeSampleTheme { + ScaleBar( + modifier = Modifier.padding(end = 4.dp), + cameraPositionState = cameraPositionState + ) + } } \ No newline at end of file diff --git a/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt b/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt index 77ff5cce..0ae0037d 100644 --- a/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt +++ b/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt @@ -42,6 +42,7 @@ import com.google.android.gms.maps.model.CameraPosition import com.google.android.gms.maps.model.LatLng import com.google.maps.android.clustering.ClusterItem import com.google.maps.android.clustering.algo.NonHierarchicalViewBasedAlgorithm +import com.google.maps.android.clustering.view.DefaultClusterRenderer import com.google.maps.android.compose.GoogleMap import com.google.maps.android.compose.MapsComposeExperimentalApi import com.google.maps.android.compose.MarkerInfoWindow @@ -79,7 +80,8 @@ fun GoogleMapClustering() { } } Box( - modifier = Modifier.fillMaxSize() + modifier = Modifier + .fillMaxSize() .systemBarsPadding() ) { GoogleMapClustering(items = items) @@ -158,6 +160,7 @@ private fun DefaultClustering(items: List) { @OptIn(MapsComposeExperimentalApi::class) @Composable private fun CustomUiClustering(items: List) { + Log.i("","Clusteringggg") Clustering( items = items, // Optional: Handle clicks on clusters, cluster items, and cluster item info windows @@ -181,7 +184,9 @@ private fun CustomUiClustering(items: List) { ) }, // Optional: Custom rendering for non-clustered items - clusterItemContent = null + clusterItemContent = null, + // Optional: Customization hook for clusterManager and renderer when they're ready + ) } @@ -218,6 +223,7 @@ fun CustomRendererClustering(items: List) { }, clusterManager = clusterManager, ) + SideEffect { clusterManager ?: return@SideEffect clusterManager.setOnClusterClickListener { diff --git a/app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt b/app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt new file mode 100644 index 00000000..3fe7a18b --- /dev/null +++ b/app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt @@ -0,0 +1,37 @@ +package com.google.maps.android.compose + +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.google.android.gms.maps.model.CameraPosition +import com.google.android.gms.maps.model.LatLng +import com.google.maps.android.compose.theme.MapsComposeSampleTheme +import com.google.maps.android.compose.widgets.ScaleBar + + +class ScaleBarTest() { + @Preview + @Composable + fun PreviewScaleBar() { + val cameraPositionState = remember { + CameraPositionState( + position = CameraPosition( + LatLng(48.137154, 11.576124), // Example coordinates: Munich, Germany + 12f, + 0f, + 0f + ) + ) + } + + MapsComposeSampleTheme { + ScaleBar( + modifier = Modifier.padding(end = 4.dp), + cameraPositionState = cameraPositionState + ) + } + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 96145c06..0ed08c6d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,4 +31,6 @@ sonatypeToken= sonatypeTokenPassword= android.nonTransitiveRClass=false -android.nonFinalResIds=false \ No newline at end of file +android.nonFinalResIds=false + +android.experimental.enableScreenshotTest=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fb4daa73..3aa85fef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,9 @@ [versions] activitycompose = "1.9.3" agp = "8.7.2" -androidxtest = "1.6.1" -compose-bom = "2024.10.01" +androidxtest = "1.6.2" +androidCore = "1.6.1" +compose-bom = "2024.11.00" dokka = "1.9.20" espresso = "3.6.1" jacoco-plugin = "0.2.1" @@ -14,6 +15,7 @@ mapsktx = "5.1.1" mapsecrets = "2.0.1" org-jacoco-core = "0.8.11" androidx-core = "1.15.0" +screenshot = "0.0.1-alpha07" [libraries] 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 androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } androidx-core = { module = "androidx.core:core-ktx", version.ref = "androidx-core" } androidx-test-compose-ui = { module = "androidx.compose.ui:ui-test-junit4" } -androidx-test-core = { module = "androidx.test:core", version.ref = "androidxtest" } +androidx-test-core = { module = "androidx.test:core", version.ref = "androidCore" } androidx-test-espresso = { module = "androidx.test.espresso:espresso-core", version.ref = "espresso" } androidx-test-junit-ktx = { module = "androidx.test.ext:junit-ktx", version.ref = "junitktx" } -androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidxtest" } +androidx-test-rules = { module = "androidx.test:rules", version.ref = "androidCore" } androidx-test-runner = { module = "androidx.test:runner", version.ref = "androidxtest" } dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" } 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" } [plugins] dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } -compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } \ No newline at end of file +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +screenshot = { id = "com.android.compose.screenshot", version.ref = "screenshot"} \ No newline at end of file diff --git a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt index 4f3ae4fb..eaf9a2e8 100644 --- a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt +++ b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt @@ -126,6 +126,46 @@ public fun Clustering( onClusterItemInfoWindowLongClick: (T) -> Unit = { }, clusterContent: @[UiComposable Composable] ((Cluster) -> Unit)? = null, clusterItemContent: @[UiComposable Composable] ((T) -> Unit)? = null, +) { + Clustering( + items = items, + onClusterClick = onClusterClick, + onClusterItemClick = onClusterItemClick, + onClusterItemInfoWindowClick = onClusterItemInfoWindowClick, + onClusterItemInfoWindowLongClick = onClusterItemInfoWindowLongClick, + clusterContent = clusterContent, + clusterItemContent = clusterItemContent, + onClusterManager = null, + ) +} + +/** + * Groups many items on a map based on zoom level. + * + * @param items all items to show + * @param onClusterClick a lambda invoked when the user clicks a cluster of items + * @param onClusterItemClick a lambda invoked when the user clicks a non-clustered item + * @param onClusterItemInfoWindowClick a lambda invoked when the user clicks the info window of a + * non-clustered item + * @param onClusterItemInfoWindowLongClick a lambda invoked when the user long-clicks the info + * window of a non-clustered item + * @param clusterContent an optional Composable that is rendered for each [Cluster]. + * @param clusterItemContent an optional Composable that is rendered for each non-clustered item. + * @param onClusterManager an optional lambda invoked with the clusterManager as a param when both + * the clusterManager and renderer are set up, allowing callers a customization hook. + */ +@Composable +@GoogleMapComposable +@MapsComposeExperimentalApi +public fun Clustering( + items: Collection, + onClusterClick: (Cluster) -> Boolean = { false }, + onClusterItemClick: (T) -> Boolean = { false }, + onClusterItemInfoWindowClick: (T) -> Unit = { }, + onClusterItemInfoWindowLongClick: (T) -> Unit = { }, + clusterContent: @[UiComposable Composable] ((Cluster) -> Unit)? = null, + clusterItemContent: @[UiComposable Composable] ((T) -> Unit)? = null, + onClusterManager: ((ClusterManager) -> Unit)? = null, ) { val clusterManager = rememberClusterManager() val renderer = rememberClusterRenderer(clusterContent, clusterItemContent, clusterManager) @@ -142,6 +182,7 @@ public fun Clustering( clusterManager.setOnClusterItemClickListener(onClusterItemClick) clusterManager.setOnClusterItemInfoWindowClickListener(onClusterItemInfoWindowClick) clusterManager.setOnClusterItemInfoWindowLongClickListener(onClusterItemInfoWindowLongClick) + onClusterManager?.invoke(clusterManager) } if (clusterManager != null && renderer != null) { From 100a8cf9ce2234df4841371fd1818bd7e499856a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 17:55:57 +0100 Subject: [PATCH 02/16] chore: added GitHub flow integration --- .github/workflows/test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index aadcc5fc..cad06295 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -# Copyright 2020 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -45,3 +45,6 @@ jobs: - name: Build modules run: ./gradlew build jacocoTestReport --stacktrace + + - name: Run Screenshot Tests + run: ./gradlew validateDebugScreenshotTest From 137121c8a7676800b8a7a51a802dafb7e64aa5d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 17:58:02 +0100 Subject: [PATCH 03/16] chore: upload build report --- .github/workflows/test.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cad06295..f70a466e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,3 +48,10 @@ jobs: - name: Run Screenshot Tests run: ./gradlew validateDebugScreenshotTest + + - name: Upload build reports + uses: actions/upload-artifact@v4 + if: always() + with: + name: my-artifact + path: app/build/reports From 69940602f5151cb7ce5d25f7f6afd1bcd9793743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 17:59:27 +0100 Subject: [PATCH 04/16] chore: reset cluster --- .../android/compose/clustering/Clustering.kt | 41 ------------------- 1 file changed, 41 deletions(-) diff --git a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt index eaf9a2e8..4f3ae4fb 100644 --- a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt +++ b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/Clustering.kt @@ -126,46 +126,6 @@ public fun Clustering( onClusterItemInfoWindowLongClick: (T) -> Unit = { }, clusterContent: @[UiComposable Composable] ((Cluster) -> Unit)? = null, clusterItemContent: @[UiComposable Composable] ((T) -> Unit)? = null, -) { - Clustering( - items = items, - onClusterClick = onClusterClick, - onClusterItemClick = onClusterItemClick, - onClusterItemInfoWindowClick = onClusterItemInfoWindowClick, - onClusterItemInfoWindowLongClick = onClusterItemInfoWindowLongClick, - clusterContent = clusterContent, - clusterItemContent = clusterItemContent, - onClusterManager = null, - ) -} - -/** - * Groups many items on a map based on zoom level. - * - * @param items all items to show - * @param onClusterClick a lambda invoked when the user clicks a cluster of items - * @param onClusterItemClick a lambda invoked when the user clicks a non-clustered item - * @param onClusterItemInfoWindowClick a lambda invoked when the user clicks the info window of a - * non-clustered item - * @param onClusterItemInfoWindowLongClick a lambda invoked when the user long-clicks the info - * window of a non-clustered item - * @param clusterContent an optional Composable that is rendered for each [Cluster]. - * @param clusterItemContent an optional Composable that is rendered for each non-clustered item. - * @param onClusterManager an optional lambda invoked with the clusterManager as a param when both - * the clusterManager and renderer are set up, allowing callers a customization hook. - */ -@Composable -@GoogleMapComposable -@MapsComposeExperimentalApi -public fun Clustering( - items: Collection, - onClusterClick: (Cluster) -> Boolean = { false }, - onClusterItemClick: (T) -> Boolean = { false }, - onClusterItemInfoWindowClick: (T) -> Unit = { }, - onClusterItemInfoWindowLongClick: (T) -> Unit = { }, - clusterContent: @[UiComposable Composable] ((Cluster) -> Unit)? = null, - clusterItemContent: @[UiComposable Composable] ((T) -> Unit)? = null, - onClusterManager: ((ClusterManager) -> Unit)? = null, ) { val clusterManager = rememberClusterManager() val renderer = rememberClusterRenderer(clusterContent, clusterItemContent, clusterManager) @@ -182,7 +142,6 @@ public fun Clustering( clusterManager.setOnClusterItemClickListener(onClusterItemClick) clusterManager.setOnClusterItemInfoWindowClickListener(onClusterItemInfoWindowClick) clusterManager.setOnClusterItemInfoWindowLongClickListener(onClusterItemInfoWindowLongClick) - onClusterManager?.invoke(clusterManager) } if (clusterManager != null && renderer != null) { From 3f1806a944f892fee8872f030fb6ae78715ceae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 18:00:40 +0100 Subject: [PATCH 05/16] chore: reset cluster --- .../compose/markerexamples/MarkerClusteringActivity.kt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt b/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt index 0ae0037d..c9f7f303 100644 --- a/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt +++ b/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt @@ -80,9 +80,7 @@ fun GoogleMapClustering() { } } Box( - modifier = Modifier - .fillMaxSize() - .systemBarsPadding() + modifier = Modifier.fillMaxSize() ) { GoogleMapClustering(items = items) } @@ -160,7 +158,6 @@ private fun DefaultClustering(items: List) { @OptIn(MapsComposeExperimentalApi::class) @Composable private fun CustomUiClustering(items: List) { - Log.i("","Clusteringggg") Clustering( items = items, // Optional: Handle clicks on clusters, cluster items, and cluster item info windows @@ -184,8 +181,7 @@ private fun CustomUiClustering(items: List) { ) }, // Optional: Custom rendering for non-clustered items - clusterItemContent = null, - // Optional: Customization hook for clusterManager and renderer when they're ready + clusterItemContent = null ) } From 5992dbc5fb8fa76dbd9d706c505576c12bf07abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 18:01:32 +0100 Subject: [PATCH 06/16] chore: reset cluster --- .../android/compose/markerexamples/MarkerClusteringActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt b/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt index c9f7f303..56857f01 100644 --- a/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt +++ b/app/src/main/java/com/google/maps/android/compose/markerexamples/MarkerClusteringActivity.kt @@ -81,6 +81,7 @@ fun GoogleMapClustering() { } Box( modifier = Modifier.fillMaxSize() + .systemBarsPadding() ) { GoogleMapClustering(items = items) } @@ -182,7 +183,6 @@ private fun CustomUiClustering(items: List) { }, // Optional: Custom rendering for non-clustered items clusterItemContent = null - ) } From 973c397957a6a9fa7846df2e7bce1dee7b07ccec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 18:14:08 +0100 Subject: [PATCH 07/16] chore: added threshold --- app/build.gradle.kts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9fe42fe5..a030c707 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -49,6 +49,12 @@ android { } experimentalProperties["android.experimental.enableScreenshotTest"] = true + + testOptions { + screenshotTests { + imageDifferenceThreshold = 0.0001f // 0.01% + } + } } dependencies { From 04469027230b6f35386673a6a5dc2d4e7ff6de6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Fri, 6 Dec 2024 19:39:48 +0100 Subject: [PATCH 08/16] chore: changed threshold --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a030c707..a5e99dec 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { testOptions { screenshotTests { - imageDifferenceThreshold = 0.0001f // 0.01% + imageDifferenceThreshold = 0.01f // 1% } } } From fe8f007c0bf37694364afa029525234f3bdafe60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Sun, 8 Dec 2024 14:46:27 +0100 Subject: [PATCH 09/16] chore: changed threshold to 5% --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a5e99dec..69db5589 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { testOptions { screenshotTests { - imageDifferenceThreshold = 0.01f // 1% + imageDifferenceThreshold = 0.05f // 1% } } } From 6763992069abed5205af803ef12f3692b9ba23fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Sun, 8 Dec 2024 15:43:26 +0100 Subject: [PATCH 10/16] chore: increased version --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3aa85fef..027597b8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,7 +15,7 @@ mapsktx = "5.1.1" mapsecrets = "2.0.1" org-jacoco-core = "0.8.11" androidx-core = "1.15.0" -screenshot = "0.0.1-alpha07" +screenshot = "0.0.1-alpha08" [libraries] android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } From e8cac1c8fbdb71ac928a4809773d7cb7392f0561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Tue, 10 Dec 2024 06:35:21 +0100 Subject: [PATCH 11/16] chore: new reference version --- ...a39a3ee_da39a3ee_0.png => PreviewScaleBar_0.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/{PreviewScaleBar_da39a3ee_da39a3ee_0.png => PreviewScaleBar_0.png} (100%) diff --git a/app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewScaleBar_da39a3ee_da39a3ee_0.png b/app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewScaleBar_0.png similarity index 100% rename from app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewScaleBar_da39a3ee_da39a3ee_0.png rename to app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewScaleBar_0.png From 7afa7c4c552a591bd740af078548e1e4698511b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Tue, 10 Dec 2024 08:54:14 +0100 Subject: [PATCH 12/16] chore: changed threshold --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 69db5589..47e03588 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { testOptions { screenshotTests { - imageDifferenceThreshold = 0.05f // 1% + imageDifferenceThreshold = 0.02f // 2% } } } From a10594d70a511bdfba11e6c4bea7184f67c6e5bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Tue, 10 Dec 2024 09:02:44 +0100 Subject: [PATCH 13/16] chore: changed threshold --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 47e03588..12fbb8a0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { testOptions { screenshotTests { - imageDifferenceThreshold = 0.02f // 2% + imageDifferenceThreshold = 0.04f // 2% } } } From b5ca3bf1d462724d5abd4c8b02ccac4ef7f01fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Tue, 10 Dec 2024 09:35:05 +0100 Subject: [PATCH 14/16] chore: changed threshold --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 12fbb8a0..ce5051f7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { testOptions { screenshotTests { - imageDifferenceThreshold = 0.04f // 2% + imageDifferenceThreshold = 0.03f // 2% } } } From dfd11bafd75d1ffad769033ffaccf925573c6cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Tue, 10 Dec 2024 10:00:46 +0100 Subject: [PATCH 15/16] chore: changed threshold --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ce5051f7..030af4ca 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -52,7 +52,7 @@ android { testOptions { screenshotTests { - imageDifferenceThreshold = 0.03f // 2% + imageDifferenceThreshold = 0.035f // 3.5% } } } From 451fac79a8f28eb2fe3178eb6c81b0024e5ef2b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Tue, 10 Dec 2024 10:35:26 +0100 Subject: [PATCH 16/16] chore: added test for DisappearingScaleBar --- .../PreviewDisappearingScaleBar_0.png | Bin 0 -> 2839 bytes .../maps/android/compose/ScaleBarTest.kt | 23 ++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewDisappearingScaleBar_0.png diff --git a/app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewDisappearingScaleBar_0.png b/app/src/debug/screenshotTest/reference/com/google/maps/android/compose/ScaleBarTest/PreviewDisappearingScaleBar_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ffaf22e747052fac57b2367334dc5ec56f482c54 GIT binary patch literal 2839 zcmbW3cR1Y38pjb)kHqRB#OhHGL6jhpRaTTJ(FGeli$qwxZm_Hty>1Q>y=0XYL2&%^ zAWCFqk)tPAvbwOGJ@?+{{&DX=_uM~b=6RoazBA9fGxPbr3HOclSeSU3sHmt|p!yIq z%7~*hBm*6#7t~werJ`b*heEV1f*ul!$mSe+y#2d@bH#xmYd}O7fYh%CLF*)~6Rcty zye@u3M;(K$I4}FrSpCeP(+0;jV>*{(EP+h9b_UC-bne)T*)6eb_ieuZJjla)`;L9s z8kL1-V|=Z`hXPjfFwf5&>&kCu3ijWv&%woA^Z-Udt!QCY}wP(TWP=09=Bakpi?-u#!geU-@CYz zB~^l1Z5#oaRkt=vEAvOSi(73ZT?7zdPzUVD-&d4ZUQJDMQL?%Ul4R>BEzz;Cf1e3B zbQi6e#pUJYp%9hW@hH5k%katemBo+W;%Duucb@;w?Uz|KfF&8=+S@tIdy0a%VV)da2}wyQ@6gA_t)Hb9D+80cr0(`0KKsr(-SnAvYVP;a z;TLTSY}~^5AgbF4Z!1cjH6pmv(_G*Ce@{ofMq9NZ$Cyw=g*ZLk=PG*D)sGU%t~#-( zm$`-hh3@7ZR;B3v>}f9D-mRGC(=NgVPXxje*imUiRNaQ>ker_UsKqOd0s_0K2~9f5 zjmY(mu$6`iq~on2?wTE)>aaLLZ0+JyxHUD_q0cM9o7-1s&9xD~;}LIf)v6#Vv^_Sc z3C0Z{IRM76w{kDYAXb9wFDxvg(#k9N1QZ>%JO75VvKXKmw*16mkU@2gg$~J>fa8T# zKgCjVjFcUCtD-n8o9_awg}!Gch3&8bbe{BcMx`@hB9}&*&|+6e-37s4_QZR|gm?kE z>(0L4AA&Ex=0>ECH<=0q{_#;8TxvcpsI1ReK32%Jb0qt)DXV7b_luywt<&R*JGwmy zct7LI*l6L?2(4lKo9;Amxk&YbmoIOwjAWvHzrOGVT;Q`#x1#ur20TW4RA6>c9ulsa`J+YN9EIig|J6r1eqW55)!3kN}S&RvrKLmax zj}>B}gxWI+hoEh8dq zBb{aCk39~G!jut0-2Dcd9`pkyMOxUx*%1)&_;`KHw8a!^0RI_pMp|A*(FG~5@eHS> zmuiVH#{1+P9v(JEt6$K)BwL;{s4ugP29m^I7q9qdAMJ0|Zypc{n+vbvb=xy;^i`p1 z1&FMnKtx1KeAhQLFvh*4FKq@JI=&bRiI=m79(aEc&W?w#mb;^Av%C1Clmh-t6c?!rY2wID`mqxGB}@#r_~c|y z%Ctpe?KL0HubdsW?+!K|)wI-)adcv$@v=^$9I$}>{jzQ73gqquW{t~vILFkQL_BEQ zY^=L&YBIS|MrQG3@E|B@jlTZB3Az-rCpkyC%n-BOAyOni_qjafIn20|Ix`r!otGBllZ-Yf6>!sO!S3ZE6cl%E`VW`5LFsW@@% z{aldss_)sc5v0!KwE0aG`EWvXGGdV$_V|PSuM#5HWu!P^1V+1tHV81O((;L#HF?ZH zlYIxH`AqDN8Rt7x_^&DhJ^_L8TJ8nY!;0kcK~r@GRIU6JyPxVmA$w`R?pB14kE~Y> zr#;-*^r`%=!ycCME9i(?r%r_|M`KAQ`5Rr0o!Nc zdfw4^-Wyj(JzIH1jHR)iH5IHR_Kb{_UAWDr$=N|A>6y!^P?lr-xP;MGwhU+jhk2~j z3)=r0E)J{sj8mVafK(~Yc>m5OuRARDxF7PRq;Cd{4%eFP8B*1_77kuNCtF&_WRp}> z4;Fgjh05TLdDiZqBd$=+P%VmcXit<@PL3EbGv_Z%Vde+HcEK1jJuXsEYkd*CL_ zFb+n4E160hf!8ZaX(Jg1pXnvnjdE{rs*?GaAV7Nn;oB25@Fk}UEGl+Viady*c@OoRwXd8j{hYzpyE9sF?UDTL%+ zH(ILolF@pb)=w2!39$n)!y>{>56IZ{^rb?eYNLi?cKr#`8;t)i9RH(=JiF{?9<@)C TxSCHXc&VT|#*n%@PBDK1;N5AD literal 0 HcmV?d00001 diff --git a/app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt b/app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt index 3fe7a18b..c27c439b 100644 --- a/app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt +++ b/app/src/screenshotTest/java/com/google/maps/android/compose/ScaleBarTest.kt @@ -9,6 +9,7 @@ import androidx.compose.ui.unit.dp import com.google.android.gms.maps.model.CameraPosition import com.google.android.gms.maps.model.LatLng import com.google.maps.android.compose.theme.MapsComposeSampleTheme +import com.google.maps.android.compose.widgets.DisappearingScaleBar import com.google.maps.android.compose.widgets.ScaleBar @@ -34,4 +35,26 @@ class ScaleBarTest() { ) } } + + @Preview + @Composable + fun PreviewDisappearingScaleBar() { + val cameraPositionState = remember { + CameraPositionState( + position = CameraPosition( + LatLng(48.137154, 11.576124), // Example coordinates: Munich, Germany + 12f, + 0f, + 0f + ) + ) + } + + MapsComposeSampleTheme { + DisappearingScaleBar( + modifier = Modifier.padding(end = 4.dp), + cameraPositionState = cameraPositionState + ) + } + } } \ No newline at end of file