diff --git a/build.gradle.kts b/build.gradle.kts index eed79355..160c0773 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -37,7 +37,3 @@ allprojects { version = "6.12.1" val projectArtifactId by extra { project.name } } - -tasks.register("clean", Delete::class) { - delete(rootProject.layout.buildDirectory) -} diff --git a/gradle.properties b/gradle.properties index d3384b97..a8269669 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,9 +4,8 @@ # any settings specified in this file. # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# Gradle JVM arguments +org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ceba2360..0412fcdd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,8 +4,8 @@ agp = "8.13.0" androidCore = "1.7.0" androidx-core = "1.17.0" androidxtest = "1.7.0" -compose-bom = "2025.09.01" -dokka = "2.0.0" +compose-bom = "2025.10.00" +dokka = "2.1.0" espresso = "3.7.0" gradleMavenPublishPlugin = "0.34.0" jacoco-plugin = "0.2.1" @@ -15,12 +15,12 @@ kotlin = "2.2.20" kotlinxCoroutines = "1.10.2" leakcanaryAndroid = "2.14" mapsecrets = "2.0.1" -mapsktx = "5.2.0" +mapsktx = "5.2.1" material3 = "1.4.0" materialIconsExtendedAndroid = "1.7.8" -mockk = "1.14.5" -mockkAndroid = "1.14.5" -org-jacoco-core = "0.8.13" +mockk = "1.14.6" +mockkAndroid = "1.14.6" +org-jacoco-core = "0.8.14" screenshot = "0.0.1-alpha11" constraintlayout = "2.2.1" material = "1.13.0" diff --git a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt index b96cf469..2fab7699 100644 --- a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt +++ b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt @@ -9,6 +9,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.ui.platform.AbstractComposeView import androidx.core.graphics.applyCanvas +import androidx.core.graphics.createBitmap import androidx.core.view.doOnAttach import androidx.core.view.doOnDetach import com.google.android.gms.maps.GoogleMap @@ -18,7 +19,6 @@ import com.google.android.gms.maps.model.MarkerOptions import com.google.maps.android.clustering.Cluster import com.google.maps.android.clustering.ClusterItem import com.google.maps.android.clustering.ClusterManager -import com.google.maps.android.clustering.view.ClusterRenderer import com.google.maps.android.clustering.view.DefaultClusterRenderer import com.google.maps.android.compose.ComposeUiViewRenderer import kotlinx.coroutines.CoroutineScope @@ -29,7 +29,7 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch /** - * Implementation of [ClusterRenderer] that renders marker bitmaps from Compose UI content. + * Implementation of [com.google.maps.android.clustering.view.ClusterRenderer] that renders marker bitmaps from Compose UI content. * [clusterContentState] renders clusters, and [clusterItemContentState] renders non-clustered * items. */ @@ -54,15 +54,16 @@ internal class ComposeUiClusterRenderer( super.onClustersChanged(clusters) val keys = clusters.flatMap { it.computeViewKeys() } - with(keysToViews.iterator()) { - forEach { (key, viewInfo) -> - if (key !in keys) { - remove() - viewInfo.onRemove() - } + val iterator = keysToViews.iterator() + while (iterator.hasNext()) { + val (key, viewInfo) = iterator.next() + if (key !in keys) { + iterator.remove() + viewInfo.onRemove() } } - keys.forEach { key -> + + for (key in keys) { if (key !in keysToViews.keys) { createAndAddView(key) } @@ -173,14 +174,14 @@ internal class ComposeUiClusterRenderer( so trigger a draw to an empty canvas to force that */ view.draw(fakeCanvas) val viewParent = - view.parent as? ViewGroup ?: return Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_8888) + view.parent as? ViewGroup ?: return createBitmap(20, 20, Bitmap.Config.ARGB_8888) .let(BitmapDescriptorFactory::fromBitmap) view.measure( View.MeasureSpec.makeMeasureSpec(viewParent.width, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(viewParent.height, View.MeasureSpec.AT_MOST), ) view.layout(0, 0, view.measuredWidth, view.measuredHeight) - val bitmap = Bitmap.createBitmap( + val bitmap = createBitmap( view.measuredWidth.takeIf { it > 0 } ?: 1, view.measuredHeight.takeIf { it > 0 } ?: 1, Bitmap.Config.ARGB_8888 @@ -227,4 +228,4 @@ internal class ComposeUiClusterRenderer( } } -} +} \ 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 01968f23..20ce3fc7 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 @@ -13,13 +13,11 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.UiComposable import androidx.compose.ui.platform.LocalContext -import com.google.android.gms.maps.GoogleMap import com.google.maps.android.clustering.Cluster import com.google.maps.android.clustering.ClusterItem import com.google.maps.android.clustering.ClusterManager import com.google.maps.android.clustering.view.ClusterRenderer import com.google.maps.android.clustering.view.DefaultClusterRenderer -import com.google.maps.android.collections.MarkerManager import com.google.maps.android.compose.GoogleMapComposable import com.google.maps.android.compose.InputHandler import com.google.maps.android.compose.MapEffect @@ -355,12 +353,12 @@ private fun rememberClusterManager( /** * This is a hack. - * [ClusterManager] instantiates a [MarkerManager], which posts a runnable to the UI thread that - * overwrites a bunch of [GoogleMap]'s listeners. Many Maps composables rely on those listeners + * [ClusterManager] instantiates a [com.google.maps.android.collections.MarkerManager], which posts a runnable to the UI thread that + * overwrites a bunch of [com.google.android.gms.maps.GoogleMap]'s listeners. Many Maps composables rely on those listeners * being set by [com.google.maps.android.compose.MapApplier]. * This posts _another_ runnable which effectively undoes that, signaling MapApplier to set the * listeners again. - * This is heavily coupled to implementation details of [MarkerManager]. + * This is heavily coupled to implementation details of [com.google.maps.android.collections.MarkerManager]. */ @Composable private fun ResetMapListeners( @@ -372,4 +370,4 @@ private fun ResetMapListeners( reattach() } } -} +} \ No newline at end of file diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/CameraPositionState.kt b/maps-compose/src/main/java/com/google/maps/android/compose/CameraPositionState.kt index e6e9096c..77ee9b2a 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/CameraPositionState.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/CameraPositionState.kt @@ -33,7 +33,6 @@ import com.google.android.gms.maps.model.LatLng import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Job -import kotlinx.coroutines.cancel import kotlinx.coroutines.currentCoroutineContext import kotlinx.coroutines.suspendCancellableCoroutine import java.lang.Integer.MAX_VALUE @@ -353,4 +352,4 @@ internal val LocalCameraPositionState = staticCompositionLocalOf { CameraPositio /** The current [CameraPositionState] used by the map. */ public val currentCameraPositionState: CameraPositionState @[GoogleMapComposable ReadOnlyComposable Composable] - get() = LocalCameraPositionState.current + get() = LocalCameraPositionState.current \ No newline at end of file diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/streetview/StreetView.kt b/maps-compose/src/main/java/com/google/maps/android/compose/streetview/StreetView.kt index c9d398a6..55fa2011 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/streetview/StreetView.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/streetview/StreetView.kt @@ -14,7 +14,6 @@ package com.google.maps.android.compose.streetview -import android.content.ComponentCallbacks import android.content.ComponentCallbacks2 import android.content.res.Configuration import android.os.Bundle @@ -190,4 +189,4 @@ private fun StreetViewPanoramaView.componentCallbacks2(): ComponentCallbacks2 = override fun onTrimMemory(level: Int) { this@componentCallbacks2.onLowMemory() } - } \ No newline at end of file + }