From 09acd2888065964c7c1cfeff4ef8556cc10fabca Mon Sep 17 00:00:00 2001 From: Chris Arriola Date: Thu, 26 May 2022 19:10:07 -0700 Subject: [PATCH 1/3] chore: Add GoogleMapComposable annotation. --- app/build.gradle | 2 +- .../maps/android/compose/MapSampleActivity.kt | 2 +- .../com/google/maps/android/compose/Circle.kt | 1 + .../google/maps/android/compose/GoogleMap.kt | 2 +- .../android/compose/GoogleMapComposable.kt | 18 ++++++++++++++++++ .../maps/android/compose/GroundOverlay.kt | 1 + .../com/google/maps/android/compose/Marker.kt | 4 ++++ .../com/google/maps/android/compose/Polygon.kt | 1 + .../google/maps/android/compose/Polyline.kt | 1 + .../google/maps/android/compose/TileOverlay.kt | 1 + 10 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt diff --git a/app/build.gradle b/app/build.gradle index 8a18b2eb..6ae0c4b5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,7 +62,7 @@ dependencies { // the maven declaration of Maps Compose can be used as a snippet. // implementation project(':maps-compose') // [END_EXCLUDE] - implementation "com.google.maps.android:maps-compose:2.1.1" + implementation "com.google.maps.android:maps-compose:2.2.0" implementation 'com.google.android.gms:play-services-maps:18.0.2' } // [END maps_android_compose_dependency] diff --git a/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt b/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt index 75fd7a54..93455a66 100644 --- a/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt +++ b/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt @@ -108,7 +108,7 @@ fun GoogleMapView( modifier: Modifier, cameraPositionState: CameraPositionState, onMapLoaded: () -> Unit, - content: @Composable () -> Unit = {} + content: @Composable @GoogleMapComposable () -> Unit = {} ) { val singaporeState = rememberMarkerState(position = singapore) val singapore2State = rememberMarkerState(position = singapore2) diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/Circle.kt b/maps-compose/src/main/java/com/google/maps/android/compose/Circle.kt index 722fa815..237af045 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/Circle.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/Circle.kt @@ -50,6 +50,7 @@ internal class CircleNode( * @param onClick a lambda invoked when the circle is clicked */ @Composable +@GoogleMapComposable public fun Circle( center: LatLng, clickable: Boolean = false, diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMap.kt b/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMap.kt index 51637f2c..e3d84367 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMap.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMap.kt @@ -87,7 +87,7 @@ public fun GoogleMap( onMyLocationClick: (Location) -> Unit = {}, onPOIClick: (PointOfInterest) -> Unit = {}, contentPadding: PaddingValues = NoPadding, - content: (@Composable () -> Unit)? = null, + content: (@Composable @GoogleMapComposable () -> Unit)? = null, ) { val context = LocalContext.current val mapView = remember { MapView(context, googleMapOptionsFactory()) } diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt b/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt new file mode 100644 index 00000000..f2a30780 --- /dev/null +++ b/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt @@ -0,0 +1,18 @@ +package com.google.maps.android.compose + +import androidx.compose.runtime.ComposableTargetMarker + +/** + * An annotation that can be used to mark a composable function as being expected to be use in a + * composable function that is also marked or inferred to be marked as a [GoogleMapComposable]. + */ +@Retention(AnnotationRetention.BINARY) +@ComposableTargetMarker(description = "Google Map Composable") +@Target( + AnnotationTarget.FILE, + AnnotationTarget.FUNCTION, + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.TYPE, + AnnotationTarget.TYPE_PARAMETER, +) +public annotation class GoogleMapComposable \ No newline at end of file diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/GroundOverlay.kt b/maps-compose/src/main/java/com/google/maps/android/compose/GroundOverlay.kt index 654ee355..89828218 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/GroundOverlay.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/GroundOverlay.kt @@ -76,6 +76,7 @@ public class GroundOverlayPosition private constructor( * @param onClick a lambda invoked when the ground overlay is clicked */ @Composable +@GoogleMapComposable public fun GroundOverlay( position: GroundOverlayPosition, image: BitmapDescriptor, diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/Marker.kt b/maps-compose/src/main/java/com/google/maps/android/compose/Marker.kt index 06d6a268..e61c88fa 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/Marker.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/Marker.kt @@ -146,6 +146,7 @@ public fun rememberMarkerState( * @param onInfoWindowLongClick a lambda invoked when the marker's info window is long clicked */ @Composable +@GoogleMapComposable public fun Marker( state: MarkerState = rememberMarkerState(), alpha: Float = 1.0f, @@ -213,6 +214,7 @@ public fun Marker( * info window's content */ @Composable +@GoogleMapComposable public fun MarkerInfoWindow( state: MarkerState = rememberMarkerState(), alpha: Float = 1.0f, @@ -282,6 +284,7 @@ public fun MarkerInfoWindow( * info window's content */ @Composable +@GoogleMapComposable public fun MarkerInfoWindowContent( state: MarkerState = rememberMarkerState(), alpha: Float = 1.0f, @@ -352,6 +355,7 @@ public fun MarkerInfoWindowContent( * the info window's content. If this value is non-null, [infoWindow] must be null. */ @Composable +@GoogleMapComposable private fun MarkerImpl( state: MarkerState = rememberMarkerState(), alpha: Float = 1.0f, diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/Polygon.kt b/maps-compose/src/main/java/com/google/maps/android/compose/Polygon.kt index 983362e6..368cd5e0 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/Polygon.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/Polygon.kt @@ -52,6 +52,7 @@ internal class PolygonNode( * @param onClick a lambda invoked when the polygon is clicked */ @Composable +@GoogleMapComposable public fun Polygon( points: List, clickable: Boolean = false, diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/Polyline.kt b/maps-compose/src/main/java/com/google/maps/android/compose/Polyline.kt index bd042cb3..242f0862 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/Polyline.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/Polyline.kt @@ -54,6 +54,7 @@ internal class PolylineNode( * @param onClick a lambda invoked when the polyline is clicked */ @Composable +@GoogleMapComposable public fun Polyline( points: List, clickable: Boolean = false, diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/TileOverlay.kt b/maps-compose/src/main/java/com/google/maps/android/compose/TileOverlay.kt index 4c113f94..46201892 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/TileOverlay.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/TileOverlay.kt @@ -41,6 +41,7 @@ private class TileOverlayNode( * @param onClick a lambda invoked when the tile overlay is clicked */ @Composable +@GoogleMapComposable public fun TileOverlay( tileProvider: TileProvider, fadeIn: Boolean = true, From 2f27a84f79cffb6f5ced95d5a227f599a294f479 Mon Sep 17 00:00:00 2001 From: Chris Arriola Date: Wed, 1 Jun 2022 21:11:40 -0700 Subject: [PATCH 2/3] Address PR feedback. Change-Id: I2819da87f7b3c3f1505402ff718b2139b6b1d114 --- .../com/google/maps/android/compose/GoogleMapComposable.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt b/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt index f2a30780..56f3f04c 100644 --- a/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt +++ b/maps-compose/src/main/java/com/google/maps/android/compose/GoogleMapComposable.kt @@ -5,6 +5,9 @@ import androidx.compose.runtime.ComposableTargetMarker /** * An annotation that can be used to mark a composable function as being expected to be use in a * composable function that is also marked or inferred to be marked as a [GoogleMapComposable]. + * + * This will produce build warnings when [GoogleMapComposable] composable functions are used outside + * of a [GoogleMapComposable] content lambda, and vice versa. */ @Retention(AnnotationRetention.BINARY) @ComposableTargetMarker(description = "Google Map Composable") From 82d753fb33d8e5e367cba767e18545221d713ce3 Mon Sep 17 00:00:00 2001 From: Chris Arriola Date: Thu, 2 Jun 2022 13:29:15 -0700 Subject: [PATCH 3/3] Remove GoogleMapComposable annotation from sample. Change-Id: Ide6c50f04e62ed4f4fae1d50f4500d677d41bd76 --- .../java/com/google/maps/android/compose/MapSampleActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt b/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt index 93455a66..75fd7a54 100644 --- a/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt +++ b/app/src/main/java/com/google/maps/android/compose/MapSampleActivity.kt @@ -108,7 +108,7 @@ fun GoogleMapView( modifier: Modifier, cameraPositionState: CameraPositionState, onMapLoaded: () -> Unit, - content: @Composable @GoogleMapComposable () -> Unit = {} + content: @Composable () -> Unit = {} ) { val singaporeState = rememberMarkerState(position = singapore) val singapore2State = rememberMarkerState(position = singapore2)