From 7c3c0e7163bc730065aeabb6832abf183f813dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20Lo=CC=81pez=20Man=CC=83as?= Date: Tue, 3 Nov 2026 10:51:09 +0100 Subject: [PATCH] build: check the public API of the library modules Add the binary compatibility validator, set up the same way as in android-maps-utils: apiBuild, apiDump and apiCheck per library module, reading the release classes jar. Commit the current API of maps-compose, maps-compose-utils and maps-compose-widgets in api/.api and run apiCheck in CI, so a public API change shows up in review and an accidental break fails the build. --- .github/workflows/test.yml | 2 +- AGENTS.md | 6 + build-logic/convention/build.gradle.kts | 1 + .../main/kotlin/PublishingConventionPlugin.kt | 71 ++++ build.gradle.kts | 17 + gradle/libs.versions.toml | 3 + maps-compose-utils/api/maps-compose-utils.api | 51 +++ .../api/maps-compose-widgets.api | 6 + maps-compose/api/maps-compose.api | 319 ++++++++++++++++++ 9 files changed, 475 insertions(+), 1 deletion(-) create mode 100644 maps-compose-utils/api/maps-compose-utils.api create mode 100644 maps-compose-widgets/api/maps-compose-widgets.api create mode 100644 maps-compose/api/maps-compose.api diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7faafb6c2..43800bad1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,7 @@ jobs: uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0 - name: Build modules - run: ./gradlew build koverXmlReportDebug -x :maps-app:generateDebugScreenshotTestConfig -x :maps-app:generateReleaseScreenshotTestConfig --stacktrace + run: ./gradlew build apiCheck koverXmlReportDebug -x :maps-app:generateDebugScreenshotTestConfig -x :maps-app:generateReleaseScreenshotTestConfig --stacktrace - name: Run Screenshot Tests run: ./gradlew :maps-app:validateDebugScreenshotTest diff --git a/AGENTS.md b/AGENTS.md index a9346413a..332ec8311 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,7 @@ Shared Gradle conventions are in `build-logic/` (included build). ./gradlew :maps-compose:testDebugUnitTest # unit tests for one module ./gradlew koverXmlReportDebug # all unit tests and coverage reports ./gradlew lint # Android Lint across all modules +./gradlew apiCheck # public API matches the committed api/*.api files ./gradlew :maps-app:validateDebugScreenshotTest # validate screenshot tests ``` @@ -111,6 +112,11 @@ reviews on pull requests, so they stay specific to that tool. - Avoid `!!`; use null-safe operators. - Public API changes must be additive and backward compatible; deprecate before removing. +- The public API of each library is committed in `/api/.api` and + checked by `apiCheck` in CI. After an intentional API change, run + `./gradlew apiDump` and commit the updated file, so the change is visible in + review. The check compares binary signatures, so also look out for renamed + parameters, which break callers using named arguments. ## Pull requests diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 7b0a0d808..414190542 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -31,6 +31,7 @@ dependencies { implementation(libs.dokka.plugin) implementation(libs.kover.gradle.plugin) implementation(libs.gradle.maven.publish.plugin) + implementation(libs.binary.compatibility.validator) } diff --git a/build-logic/convention/src/main/kotlin/PublishingConventionPlugin.kt b/build-logic/convention/src/main/kotlin/PublishingConventionPlugin.kt index ef608a085..205a04d61 100644 --- a/build-logic/convention/src/main/kotlin/PublishingConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/PublishingConventionPlugin.kt @@ -18,10 +18,14 @@ import com.vanniktech.maven.publish.AndroidSingleVariantLibrary import com.vanniktech.maven.publish.MavenPublishBaseExtension import kotlinx.kover.gradle.plugin.dsl.KoverProjectExtension +import kotlinx.validation.KotlinApiBuildTask +import kotlinx.validation.KotlinApiCompareTask import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.tasks.Copy import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.register class PublishingConventionPlugin : Plugin { override fun apply(project: Project) { @@ -29,6 +33,7 @@ class PublishingConventionPlugin : Plugin { applyPlugins() configureKover() configureVanniktechPublishing() + configureBinaryCompatibilityValidator() } } @@ -93,4 +98,70 @@ class PublishingConventionPlugin : Plugin { } } } + + /** + * Dumps the public API of the release classes to api/.api and checks it on every build, + * so a change to the public API shows up in review and an accidental break fails CI. Run + * `./gradlew apiDump` after an intentional API change and commit the updated file. + */ + private fun Project.configureBinaryCompatibilityValidator() { + val projectName = name + val apiFile = layout.projectDirectory.file("api/$projectName.api") + val buildApiFile = layout.buildDirectory.file("api/$projectName.api") + + afterEvaluate { + val bundleTask = tasks.findByName("bundleLibCompileToJarRelease") ?: return@afterEvaluate + val classesJar = layout.buildDirectory.file( + "intermediates/compile_library_classes_jar/release/bundleLibCompileToJarRelease/classes.jar", + ) + + val apiBuild = tasks.register("apiBuild") { + group = "verification" + description = "Builds public API declaration for $projectName." + inputJar.set(classesJar) + outputApiFile.set(buildApiFile) + // The generated R classes are public in bytecode but not part of the API. + val rClasses = listOf( + "com.google.maps.android.compose.R", + "com.google.maps.android.compose.utils.R", + "com.google.maps.android.compose.widgets.R", + ) + ignoredClasses.addAll(rClasses) + ignoredClasses.addAll(rClasses.flatMap { r -> R_TYPES.map { type -> "$r$$type" } }) + dependsOn(bundleTask) + } + + val apiDump = tasks.register("apiDump") { + group = "verification" + description = "Syncs public API declarations of $projectName to the project api/ directory." + from(apiBuild.flatMap { it.outputApiFile }) + into(apiFile.asFile.parentFile) + dependsOn(apiBuild) + } + + val apiCheck = tasks.register("apiCheck") { + group = "verification" + description = + "Checks public API declarations of $projectName against the committed api/$projectName.api." + projectApiFile.set(apiFile) + generatedApiFile.set(apiBuild.flatMap { it.outputApiFile }) + dependsOn(apiBuild) + } + + tasks.findByName("check")?.dependsOn(apiCheck) + + rootProject.tasks.matching { it.name == "apiDump" }.configureEach { + dependsOn(apiDump) + } + rootProject.tasks.matching { it.name == "apiCheck" }.configureEach { + dependsOn(apiCheck) + } + } + } } + +private val R_TYPES = listOf( + "anim", "animator", "array", "attr", "bool", "color", "dimen", "drawable", "font", "fraction", "id", + "integer", "interpolator", "layout", "menu", "mipmap", "plurals", "raw", "string", "style", "styleable", + "transition", "xml", +) diff --git a/build.gradle.kts b/build.gradle.kts index 2a51842d9..f72442dd8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,6 +36,7 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.spotless) + alias(libs.plugins.binary.compatibility.validator) } spotless { @@ -58,6 +59,22 @@ spotless { } } +// The public API of the library modules is checked against the committed api/.api files. +// The per-module tasks are set up in PublishingConventionPlugin. +apiValidation { + ignoredProjects += listOf("maps-app", "docs") +} + +val apiDump = tasks.register("apiDump") { + group = "verification" + description = "Dumps public API declarations for all library modules." +} + +val apiCheck = tasks.register("apiCheck") { + group = "verification" + description = "Checks that public API declarations match the committed .api files." +} + val projectArtifactId by extra { project: Project -> if (project.name in listOf("maps-compose", "maps-compose-widgets", "maps-compose-utils")) { project.name diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5a7806074..47416d71e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,6 +8,7 @@ androidMinSdk = "23" androidTargetSdk = "37" agp = "9.4.1" +binaryCompatibilityValidator = "0.18.2" dependencyAnalysis = "3.19.2" dokka = "2.2.0" gradleMavenPublishPlugin = "0.37.0" @@ -50,6 +51,7 @@ truth = "1.4.5" android-gradle-plugin = { module = "com.android.tools.build:gradle", version.ref = "agp" } dokka-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" } gradle-maven-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "gradleMavenPublishPlugin" } +binary-compatibility-validator = { module = "org.jetbrains.kotlinx.binary-compatibility-validator:org.jetbrains.kotlinx.binary-compatibility-validator.gradle.plugin", version.ref = "binaryCompatibilityValidator" } kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk7", version.ref = "kotlin" } kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } @@ -95,6 +97,7 @@ test-junit = { module = "junit:junit", version.ref = "junit" } truth = { module = "com.google.truth:truth", version.ref = "truth" } [plugins] +binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binaryCompatibilityValidator" } android-application = { id = "com.android.application", version.ref = "agp" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } dependency-analysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependencyAnalysis" } diff --git a/maps-compose-utils/api/maps-compose-utils.api b/maps-compose-utils/api/maps-compose-utils.api new file mode 100644 index 000000000..02f993182 --- /dev/null +++ b/maps-compose-utils/api/maps-compose-utils.api @@ -0,0 +1,51 @@ +public final class com/google/maps/android/compose/clustering/ClusteringKt { + public static final fun Clustering (Ljava/util/Collection;Lcom/google/maps/android/clustering/ClusterManager;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V + public static final synthetic fun Clustering (Ljava/util/Collection;Lcom/google/maps/android/clustering/ClusterManager;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V + public static final synthetic fun Clustering-1-qr28I (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;JJFFFFLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final synthetic fun Clustering-9F6RVxY (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;JJFFFFLcom/google/maps/android/clustering/view/ClusterRenderer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun Clustering-9F6RVxY (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;JJFFFFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final synthetic fun Clustering-9F6RVxY (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;JJFFFFLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V + public static final fun Clustering-wbgrcbg (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;JJFFFFLcom/google/maps/android/clustering/view/ClusterRenderer;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun Clustering-wbgrcbg (Ljava/util/Collection;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;JJFFFFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V + public static final fun ClusteringMarkerProperties-MqvHWfI (Landroidx/compose/ui/geometry/Offset;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)V + public static final synthetic fun ClusteringMarkerProperties-ueCybiQ (Landroidx/compose/ui/geometry/Offset;Ljava/lang/Float;Ljava/lang/Float;Landroidx/compose/runtime/Composer;II)V + public static final fun getLocalClusteringMarkerProperties ()Landroidx/compose/runtime/ProvidableCompositionLocal; + public static final fun rememberClusterManager (Landroidx/compose/runtime/Composer;I)Lcom/google/maps/android/clustering/ClusterManager; + public static final fun rememberClusterRenderer (Lcom/google/maps/android/clustering/ClusterManager;Landroidx/compose/runtime/Composer;I)Lcom/google/maps/android/clustering/view/ClusterRenderer; + public static final fun rememberClusterRenderer-Cq5_NK8 (Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;JJFFFFLcom/google/maps/android/clustering/ClusterManager;Landroidx/compose/runtime/Composer;II)Lcom/google/maps/android/clustering/view/ClusterRenderer; +} + +public final class com/google/maps/android/compose/clustering/ClusteringMarkerProperties { + public static final field $stable I + public fun ()V + public final fun getAnchor-_m7T9-E ()Landroidx/compose/ui/geometry/Offset; + public final fun getContentDescription ()Ljava/lang/String; + public final fun getRotation ()Ljava/lang/Float; + public final fun getZIndex ()Ljava/lang/Float; +} + +public final class com/google/maps/android/compose/clustering/ComposableSingletons$ClusteringKt { + public static final field INSTANCE Lcom/google/maps/android/compose/clustering/ComposableSingletons$ClusteringKt; + public fun ()V + public final fun getLambda$-1045318553$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$-260840354$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$-543144580$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$1030848660$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$1311340673$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$1784640720$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$1844422179$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$433743892$maps_compose_utils ()Lkotlin/jvm/functions/Function3; + public final fun getLambda$773099471$maps_compose_utils ()Lkotlin/jvm/functions/Function3; +} + +public final class com/google/maps/android/compose/wms/WmsTileOverlayKt { + public static final fun WmsTileOverlay (Lkotlin/jvm/functions/Function5;Lcom/google/maps/android/compose/TileOverlayState;ZFZFLkotlin/jvm/functions/Function1;IILandroidx/compose/runtime/Composer;II)V +} + +public final class com/google/maps/android/compose/wms/WmsUrlTileProvider : com/google/android/gms/maps/model/UrlTileProvider { + public static final field $stable I + public fun (IILkotlin/jvm/functions/Function5;)V + public synthetic fun (IILkotlin/jvm/functions/Function5;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun getTileUrl (III)Ljava/net/URL; +} + diff --git a/maps-compose-widgets/api/maps-compose-widgets.api b/maps-compose-widgets/api/maps-compose-widgets.api new file mode 100644 index 000000000..8130333a6 --- /dev/null +++ b/maps-compose-widgets/api/maps-compose-widgets.api @@ -0,0 +1,6 @@ +public final class com/google/maps/android/compose/widgets/ScaleBarKt { + public static final fun DisappearingScaleBar-JXI6SxA (Landroidx/compose/ui/Modifier;FFLcom/google/maps/android/compose/CameraPositionState;JJJILandroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/runtime/Composer;II)V + public static final fun ScaleBar-7pV8VcA (Landroidx/compose/ui/Modifier;FFLcom/google/maps/android/compose/CameraPositionState;JJJLandroidx/compose/runtime/Composer;II)V + public static final fun getDarkGray ()J +} + diff --git a/maps-compose/api/maps-compose.api b/maps-compose/api/maps-compose.api new file mode 100644 index 000000000..c6686e1ce --- /dev/null +++ b/maps-compose/api/maps-compose.api @@ -0,0 +1,319 @@ +public final class com/google/maps/android/compose/CameraMoveStartedReason : java/lang/Enum { + public static final field API_ANIMATION Lcom/google/maps/android/compose/CameraMoveStartedReason; + public static final field Companion Lcom/google/maps/android/compose/CameraMoveStartedReason$Companion; + public static final field DEVELOPER_ANIMATION Lcom/google/maps/android/compose/CameraMoveStartedReason; + public static final field GESTURE Lcom/google/maps/android/compose/CameraMoveStartedReason; + public static final field NO_MOVEMENT_YET Lcom/google/maps/android/compose/CameraMoveStartedReason; + public static final field UNKNOWN Lcom/google/maps/android/compose/CameraMoveStartedReason; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun getValue ()I + public static fun valueOf (Ljava/lang/String;)Lcom/google/maps/android/compose/CameraMoveStartedReason; + public static fun values ()[Lcom/google/maps/android/compose/CameraMoveStartedReason; +} + +public final class com/google/maps/android/compose/CameraMoveStartedReason$Companion { + public final fun fromInt (I)Lcom/google/maps/android/compose/CameraMoveStartedReason; +} + +public final class com/google/maps/android/compose/CameraPositionState { + public static final field $stable I + public static final field Companion Lcom/google/maps/android/compose/CameraPositionState$Companion; + public synthetic fun (Lcom/google/android/gms/maps/model/CameraPosition;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun animate (Lcom/google/android/gms/maps/CameraUpdate;ILkotlin/coroutines/Continuation;)Ljava/lang/Object; + public static synthetic fun animate$default (Lcom/google/maps/android/compose/CameraPositionState;Lcom/google/android/gms/maps/CameraUpdate;ILkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; + public final fun getCameraMoveStartedReason ()Lcom/google/maps/android/compose/CameraMoveStartedReason; + public final fun getMaxZoomLevel ()Ljava/lang/Float; + public final fun getMinZoomLevel ()Ljava/lang/Float; + public final fun getPosition ()Lcom/google/android/gms/maps/model/CameraPosition; + public final fun getProjection ()Lcom/google/android/gms/maps/Projection; + public final fun isMoving ()Z + public final fun move (Lcom/google/android/gms/maps/CameraUpdate;)V + public final fun setPosition (Lcom/google/android/gms/maps/model/CameraPosition;)V +} + +public final class com/google/maps/android/compose/CameraPositionState$Companion { + public final fun getSaver ()Landroidx/compose/runtime/saveable/Saver; + public final fun invoke (Lcom/google/android/gms/maps/model/CameraPosition;)Lcom/google/maps/android/compose/CameraPositionState; + public static synthetic fun invoke$default (Lcom/google/maps/android/compose/CameraPositionState$Companion;Lcom/google/android/gms/maps/model/CameraPosition;ILjava/lang/Object;)Lcom/google/maps/android/compose/CameraPositionState; +} + +public final class com/google/maps/android/compose/CameraPositionStateKt { + public static final fun getCurrentCameraPositionState (Landroidx/compose/runtime/Composer;I)Lcom/google/maps/android/compose/CameraPositionState; + public static final fun rememberCameraPositionState (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Lcom/google/maps/android/compose/CameraPositionState; + public static final fun rememberCameraPositionState (Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Lcom/google/maps/android/compose/CameraPositionState; +} + +public final class com/google/maps/android/compose/CircleKt { + public static final fun Circle-rQ_Q3OA (Lcom/google/android/gms/maps/model/LatLng;ZJDJLjava/util/List;FLjava/lang/Object;ZFLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V +} + +public final class com/google/maps/android/compose/ComposableSingletons$GoogleMapKt { + public static final field INSTANCE Lcom/google/maps/android/compose/ComposableSingletons$GoogleMapKt; + public fun ()V + public final fun getLambda$-400333435$maps_compose ()Lkotlin/jvm/functions/Function2; + public final fun getLambda$2113725804$maps_compose ()Lkotlin/jvm/functions/Function2; +} + +public final class com/google/maps/android/compose/ComposeMapColorScheme : java/lang/Enum { + public static final field DARK Lcom/google/maps/android/compose/ComposeMapColorScheme; + public static final field FOLLOW_SYSTEM Lcom/google/maps/android/compose/ComposeMapColorScheme; + public static final field LIGHT Lcom/google/maps/android/compose/ComposeMapColorScheme; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun getValue ()I + public static fun valueOf (Ljava/lang/String;)Lcom/google/maps/android/compose/ComposeMapColorScheme; + public static fun values ()[Lcom/google/maps/android/compose/ComposeMapColorScheme; +} + +public abstract interface class com/google/maps/android/compose/ComposeUiViewRenderer { + public abstract fun renderViewOnce (Landroidx/compose/ui/platform/AbstractComposeView;Lkotlin/jvm/functions/Function0;)V + public abstract fun startRenderingView (Landroidx/compose/ui/platform/AbstractComposeView;)Lcom/google/maps/android/compose/ComposeUiViewRenderer$RenderHandle; +} + +public abstract interface class com/google/maps/android/compose/ComposeUiViewRenderer$RenderHandle : java/io/Closeable { + public fun close ()V + public abstract fun dispose ()V +} + +public final class com/google/maps/android/compose/ComposeUiViewRenderer$RenderHandle$DefaultImpls { + public static fun close (Lcom/google/maps/android/compose/ComposeUiViewRenderer$RenderHandle;)V +} + +public final class com/google/maps/android/compose/DefaultIndoorStateChangeListener : com/google/maps/android/compose/IndoorStateChangeListener { + public static final field $stable I + public static final field INSTANCE Lcom/google/maps/android/compose/DefaultIndoorStateChangeListener; + public fun onIndoorBuildingFocused ()V + public fun onIndoorLevelActivated (Lcom/google/android/gms/maps/model/IndoorBuilding;)V +} + +public final class com/google/maps/android/compose/DragState : java/lang/Enum { + public static final field DRAG Lcom/google/maps/android/compose/DragState; + public static final field END Lcom/google/maps/android/compose/DragState; + public static final field START Lcom/google/maps/android/compose/DragState; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcom/google/maps/android/compose/DragState; + public static fun values ()[Lcom/google/maps/android/compose/DragState; +} + +public abstract interface annotation class com/google/maps/android/compose/GoogleMapComposable : java/lang/annotation/Annotation { +} + +public final class com/google/maps/android/compose/GoogleMapKt { + public static final fun GoogleMap (Landroidx/compose/ui/Modifier;ZZLcom/google/maps/android/compose/CameraPositionState;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lcom/google/maps/android/compose/MapProperties;Lcom/google/android/gms/maps/LocationSource;Lcom/google/maps/android/compose/MapUiSettings;Lcom/google/maps/android/compose/IndoorStateChangeListener;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/layout/PaddingValues;Lcom/google/maps/android/compose/ComposeMapColorScheme;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V + public static final fun googleMapFactory (Landroidx/compose/ui/Modifier;Lcom/google/maps/android/compose/CameraPositionState;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)Lkotlin/jvm/functions/Function2; +} + +public final class com/google/maps/android/compose/GroundOverlayKt { + public static final fun GroundOverlay-bPm4XcI (Lcom/google/maps/android/compose/GroundOverlayPosition;Lcom/google/android/gms/maps/model/BitmapDescriptor;JFZLjava/lang/Object;FZFLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V +} + +public final class com/google/maps/android/compose/GroundOverlayPosition { + public static final field $stable I + public static final field Companion Lcom/google/maps/android/compose/GroundOverlayPosition$Companion; + public fun ()V + public final fun component1 ()Lcom/google/android/gms/maps/model/LatLngBounds; + public final fun component2 ()Lcom/google/android/gms/maps/model/LatLng; + public final fun component3 ()Ljava/lang/Float; + public final fun component4 ()Ljava/lang/Float; + public fun equals (Ljava/lang/Object;)Z + public final fun getHeight ()Ljava/lang/Float; + public final fun getLatLngBounds ()Lcom/google/android/gms/maps/model/LatLngBounds; + public final fun getLocation ()Lcom/google/android/gms/maps/model/LatLng; + public final fun getWidth ()Ljava/lang/Float; + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/google/maps/android/compose/GroundOverlayPosition$Companion { + public final fun create (Lcom/google/android/gms/maps/model/LatLng;FLjava/lang/Float;)Lcom/google/maps/android/compose/GroundOverlayPosition; + public final fun create (Lcom/google/android/gms/maps/model/LatLngBounds;)Lcom/google/maps/android/compose/GroundOverlayPosition; + public static synthetic fun create$default (Lcom/google/maps/android/compose/GroundOverlayPosition$Companion;Lcom/google/android/gms/maps/model/LatLng;FLjava/lang/Float;ILjava/lang/Object;)Lcom/google/maps/android/compose/GroundOverlayPosition; +} + +public abstract interface class com/google/maps/android/compose/IndoorStateChangeListener { + public fun onIndoorBuildingFocused ()V + public fun onIndoorLevelActivated (Lcom/google/android/gms/maps/model/IndoorBuilding;)V +} + +public final class com/google/maps/android/compose/IndoorStateChangeListener$DefaultImpls { + public static fun onIndoorBuildingFocused (Lcom/google/maps/android/compose/IndoorStateChangeListener;)V + public static fun onIndoorLevelActivated (Lcom/google/maps/android/compose/IndoorStateChangeListener;Lcom/google/android/gms/maps/model/IndoorBuilding;)V +} + +public final class com/google/maps/android/compose/InputHandlerKt { + public static final fun InputHandler (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V +} + +public final class com/google/maps/android/compose/MapComposeViewRenderKt { + public static final fun rememberComposeUiViewRenderer (Landroidx/compose/runtime/Composer;I)Lcom/google/maps/android/compose/ComposeUiViewRenderer; +} + +public final class com/google/maps/android/compose/MapEffectKt { + public static final fun MapEffect (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V + public static final fun MapEffect (Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V + public static final fun MapEffect (Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V + public static final fun MapEffect ([Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +} + +public final class com/google/maps/android/compose/MapProperties { + public static final field $stable I + public fun ()V + public fun (ZZZZLcom/google/android/gms/maps/model/LatLngBounds;Lcom/google/android/gms/maps/model/MapStyleOptions;Lcom/google/maps/android/compose/MapType;FF)V + public synthetic fun (ZZZZLcom/google/android/gms/maps/model/LatLngBounds;Lcom/google/android/gms/maps/model/MapStyleOptions;Lcom/google/maps/android/compose/MapType;FFILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (ZZZZLcom/google/android/gms/maps/model/LatLngBounds;Lcom/google/android/gms/maps/model/MapStyleOptions;Lcom/google/maps/android/compose/MapType;FF)Lcom/google/maps/android/compose/MapProperties; + public static synthetic fun copy$default (Lcom/google/maps/android/compose/MapProperties;ZZZZLcom/google/android/gms/maps/model/LatLngBounds;Lcom/google/android/gms/maps/model/MapStyleOptions;Lcom/google/maps/android/compose/MapType;FFILjava/lang/Object;)Lcom/google/maps/android/compose/MapProperties; + public fun equals (Ljava/lang/Object;)Z + public final fun getLatLngBoundsForCameraTarget ()Lcom/google/android/gms/maps/model/LatLngBounds; + public final fun getMapStyleOptions ()Lcom/google/android/gms/maps/model/MapStyleOptions; + public final fun getMapType ()Lcom/google/maps/android/compose/MapType; + public final fun getMaxZoomPreference ()F + public final fun getMinZoomPreference ()F + public fun hashCode ()I + public final fun isBuildingEnabled ()Z + public final fun isIndoorEnabled ()Z + public final fun isMyLocationEnabled ()Z + public final fun isTrafficEnabled ()Z + public fun toString ()Ljava/lang/String; +} + +public final class com/google/maps/android/compose/MapPropertiesKt { + public static final fun getDefaultMapProperties ()Lcom/google/maps/android/compose/MapProperties; +} + +public final class com/google/maps/android/compose/MapType : java/lang/Enum { + public static final field HYBRID Lcom/google/maps/android/compose/MapType; + public static final field NONE Lcom/google/maps/android/compose/MapType; + public static final field NORMAL Lcom/google/maps/android/compose/MapType; + public static final field SATELLITE Lcom/google/maps/android/compose/MapType; + public static final field TERRAIN Lcom/google/maps/android/compose/MapType; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public final fun getValue ()I + public static fun valueOf (Ljava/lang/String;)Lcom/google/maps/android/compose/MapType; + public static fun values ()[Lcom/google/maps/android/compose/MapType; +} + +public final class com/google/maps/android/compose/MapUiSettings { + public static final field $stable I + public fun ()V + public fun (ZZZZZZZZZZ)V + public synthetic fun (ZZZZZZZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun copy (ZZZZZZZZZZ)Lcom/google/maps/android/compose/MapUiSettings; + public static synthetic fun copy$default (Lcom/google/maps/android/compose/MapUiSettings;ZZZZZZZZZZILjava/lang/Object;)Lcom/google/maps/android/compose/MapUiSettings; + public fun equals (Ljava/lang/Object;)Z + public final fun getCompassEnabled ()Z + public final fun getIndoorLevelPickerEnabled ()Z + public final fun getMapToolbarEnabled ()Z + public final fun getMyLocationButtonEnabled ()Z + public final fun getRotationGesturesEnabled ()Z + public final fun getScrollGesturesEnabled ()Z + public final fun getScrollGesturesEnabledDuringRotateOrZoom ()Z + public final fun getTiltGesturesEnabled ()Z + public final fun getZoomControlsEnabled ()Z + public final fun getZoomGesturesEnabled ()Z + public fun hashCode ()I + public fun toString ()Ljava/lang/String; +} + +public final class com/google/maps/android/compose/MapUiSettingsKt { + public static final fun getDefaultMapUiSettings ()Lcom/google/maps/android/compose/MapUiSettings; +} + +public final class com/google/maps/android/compose/MapUpdaterKt { + public static final fun getDefaultMapContentPadding ()Landroidx/compose/foundation/layout/PaddingValues; +} + +public abstract interface annotation class com/google/maps/android/compose/MapsComposeExperimentalApi : java/lang/annotation/Annotation { +} + +public final class com/google/maps/android/compose/MarkerKt { + public static final fun AdvancedMarker-3D-2zJA (Lcom/google/maps/android/compose/MarkerState;Ljava/lang/String;FJZZJFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lcom/google/android/gms/maps/model/BitmapDescriptor;Lcom/google/android/gms/maps/model/PinConfig;Landroid/view/View;ILandroidx/compose/runtime/Composer;IIII)V + public static final fun AdvancedMarkerInfoWindow-YTa4A8k (Lcom/google/maps/android/compose/MarkerState;Ljava/lang/String;FJZZJFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lcom/google/android/gms/maps/model/BitmapDescriptor;Lcom/google/android/gms/maps/model/PinConfig;Landroid/view/View;ILkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;IIII)V + public static final fun AdvancedMarkerInfoWindowContent-YTa4A8k (Lcom/google/maps/android/compose/MarkerState;Ljava/lang/String;FJZZJFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lcom/google/android/gms/maps/model/BitmapDescriptor;Lcom/google/android/gms/maps/model/PinConfig;Landroid/view/View;ILkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;IIII)V + public static final fun Marker-qld6geY (Lcom/google/maps/android/compose/MarkerState;Ljava/lang/String;FJZZLcom/google/android/gms/maps/model/BitmapDescriptor;JFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V + public static final fun MarkerComposable-Khg_OnI ([Ljava/lang/Object;Lcom/google/maps/android/compose/MarkerState;Ljava/lang/String;FJZZJFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V + public static final fun MarkerInfoWindow-jYtn1XM (Lcom/google/maps/android/compose/MarkerState;FJZLjava/lang/String;ZLcom/google/android/gms/maps/model/BitmapDescriptor;JFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun MarkerInfoWindowComposable-LZmgDss ([Ljava/lang/Object;Lcom/google/maps/android/compose/MarkerState;FJZZJFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V + public static final fun MarkerInfoWindowContent-dVEpkwM (Lcom/google/maps/android/compose/MarkerState;FJZZLcom/google/android/gms/maps/model/BitmapDescriptor;JFLjava/lang/String;Ljava/lang/Object;Ljava/lang/String;ZFLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun rememberMarkerState (Ljava/lang/String;Lcom/google/android/gms/maps/model/LatLng;Landroidx/compose/runtime/Composer;II)Lcom/google/maps/android/compose/MarkerState; + public static final fun rememberUpdatedMarkerState (Lcom/google/android/gms/maps/model/LatLng;Landroidx/compose/runtime/Composer;II)Lcom/google/maps/android/compose/MarkerState; +} + +public final class com/google/maps/android/compose/MarkerState { + public static final field $stable I + public static final field Companion Lcom/google/maps/android/compose/MarkerState$Companion; + public synthetic fun (Lcom/google/android/gms/maps/model/LatLng;Lkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getDragState ()Lcom/google/maps/android/compose/DragState; + public final fun getPosition ()Lcom/google/android/gms/maps/model/LatLng; + public final fun hideInfoWindow ()V + public final fun isDragging ()Z + public final fun setPosition (Lcom/google/android/gms/maps/model/LatLng;)V + public final fun showInfoWindow ()V +} + +public final class com/google/maps/android/compose/MarkerState$Companion { + public final fun getSaver ()Landroidx/compose/runtime/saveable/Saver; + public final fun invoke (Lcom/google/android/gms/maps/model/LatLng;)Lcom/google/maps/android/compose/MarkerState; + public static synthetic fun invoke$default (Lcom/google/maps/android/compose/MarkerState$Companion;Lcom/google/android/gms/maps/model/LatLng;ILjava/lang/Object;)Lcom/google/maps/android/compose/MarkerState; +} + +public final class com/google/maps/android/compose/PolygonKt { + public static final fun Polygon-qT8xWJw (Ljava/util/List;ZJZLjava/util/List;JILjava/util/List;FLjava/lang/Object;ZFLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V +} + +public final class com/google/maps/android/compose/PolylineKt { + public static final fun Polyline (Ljava/util/List;Ljava/util/List;ZLcom/google/android/gms/maps/model/Cap;ZILjava/util/List;Lcom/google/android/gms/maps/model/Cap;Ljava/lang/Object;ZFFLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V + public static final fun Polyline-Ut8lOTo (Ljava/util/List;ZJLcom/google/android/gms/maps/model/Cap;ZILjava/util/List;Lcom/google/android/gms/maps/model/Cap;Ljava/lang/Object;ZFFLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V +} + +public final class com/google/maps/android/compose/ReattachClickListenersKt { + public static final fun rememberReattachClickListenersHandle (Landroidx/compose/runtime/Composer;I)Lkotlin/jvm/functions/Function0; +} + +public final class com/google/maps/android/compose/RememberComposeBitmapDescriptorKt { + public static final fun rememberComposeBitmapDescriptor ([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)Lcom/google/android/gms/maps/model/BitmapDescriptor; +} + +public final class com/google/maps/android/compose/TileOverlayKt { + public static final fun TileOverlay (Lcom/google/android/gms/maps/model/TileProvider;Lcom/google/maps/android/compose/TileOverlayState;ZFZFLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V + public static final synthetic fun TileOverlay (Lcom/google/android/gms/maps/model/TileProvider;ZFZFLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V + public static final fun rememberTileOverlayState (Landroidx/compose/runtime/Composer;I)Lcom/google/maps/android/compose/TileOverlayState; +} + +public final class com/google/maps/android/compose/TileOverlayState { + public static final field $stable I + public static final field Companion Lcom/google/maps/android/compose/TileOverlayState$Companion; + public final fun clearTileCache ()V +} + +public final class com/google/maps/android/compose/TileOverlayState$Companion { + public final fun invoke ()Lcom/google/maps/android/compose/TileOverlayState; +} + +public final class com/google/maps/android/compose/streetview/StreetViewCameraPositionState { + public static final field $stable I + public static final field Companion Lcom/google/maps/android/compose/streetview/StreetViewCameraPositionState$Companion; + public final fun animateTo (Lcom/google/android/gms/maps/model/StreetViewPanoramaCamera;I)V + public final fun getLocation ()Lcom/google/android/gms/maps/model/StreetViewPanoramaLocation; + public final fun getPanoramaCamera ()Lcom/google/android/gms/maps/model/StreetViewPanoramaCamera; + public final fun setPosition (Lcom/google/android/gms/maps/model/LatLng;Ljava/lang/Integer;Lcom/google/android/gms/maps/model/StreetViewSource;)V + public final fun setPosition (Ljava/lang/String;)V + public static synthetic fun setPosition$default (Lcom/google/maps/android/compose/streetview/StreetViewCameraPositionState;Lcom/google/android/gms/maps/model/LatLng;Ljava/lang/Integer;Lcom/google/android/gms/maps/model/StreetViewSource;ILjava/lang/Object;)V +} + +public final class com/google/maps/android/compose/streetview/StreetViewCameraPositionState$Companion { + public final fun invoke ()Lcom/google/maps/android/compose/streetview/StreetViewCameraPositionState; +} + +public final class com/google/maps/android/compose/streetview/StreetViewCameraPositionStateKt { + public static final fun rememberStreetViewCameraPositionState (Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Lcom/google/maps/android/compose/streetview/StreetViewCameraPositionState; +} + +public final class com/google/maps/android/compose/streetview/StreetViewKt { + public static final fun StreetView (Landroidx/compose/ui/Modifier;Lcom/google/maps/android/compose/streetview/StreetViewCameraPositionState;Lkotlin/jvm/functions/Function0;ZZZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V +} + +public final class com/google/maps/android/compose/utils/meta/AttributionId { + public static final field $stable I + public static final field INSTANCE Lcom/google/maps/android/compose/utils/meta/AttributionId; + public static final field VALUE Ljava/lang/String; +} +