From bf881345b09f475662820be09116c8e3a4e3ccb3 Mon Sep 17 00:00:00 2001 From: Steven Schoen Date: Wed, 8 Feb 2023 18:28:46 -0500 Subject: [PATCH] feat: Add public currentCameraPositionState property (#262) * feat: Add CompositionLocal for camera state * Change to a GoogleMapComposable-annotated property * Add kdoc --- .../google/maps/android/compose/CameraPositionState.kt | 10 ++++++++++ .../java/com/google/maps/android/compose/GoogleMap.kt | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) 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 ed63b7370..776833d24 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 @@ -16,11 +16,13 @@ package com.google.maps.android.compose import androidx.annotation.UiThread import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.Saver import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import androidx.compose.runtime.staticCompositionLocalOf import com.google.android.gms.maps.CameraUpdate import com.google.android.gms.maps.CameraUpdateFactory import com.google.android.gms.maps.GoogleMap @@ -309,3 +311,11 @@ public class CameraPositionState( ) } } + +/** Provides the [CameraPositionState] used by the map. */ +internal val LocalCameraPositionState = staticCompositionLocalOf { CameraPositionState() } + +/** The current [CameraPositionState] used by the map. */ +public val currentCameraPositionState: CameraPositionState + @[GoogleMapComposable ReadOnlyComposable Composable] + get() = LocalCameraPositionState.current 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 f23495115..661dec61b 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 @@ -23,6 +23,7 @@ import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable import androidx.compose.runtime.Composition import androidx.compose.runtime.CompositionContext +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState @@ -132,7 +133,11 @@ public fun GoogleMap( mapProperties = currentMapProperties, mapUiSettings = currentUiSettings, ) - currentContent?.invoke() + CompositionLocalProvider( + LocalCameraPositionState provides cameraPositionState, + ) { + currentContent?.invoke() + } } } }