From e98d4589e64f9a254f5db5e4224404e789664400 Mon Sep 17 00:00:00 2001 From: polivmi1 Date: Sun, 26 Jun 2022 17:35:41 +0200 Subject: [PATCH] https://github.com/googlemaps/android-maps-compose/issues/138 sample project --- app/build.gradle | 2 + .../maps/android/compose/BasicMapActivity.kt | 92 +++++++++++++------ 2 files changed, 67 insertions(+), 27 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 68f34789..37004aff 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,6 +45,8 @@ dependencies { implementation 'com.google.maps.android:maps-ktx:3.3.0' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.google.maps.android:android-maps-utils:2.3.0' + def nav_version = "2.4.2" + implementation "androidx.navigation:navigation-compose:$nav_version" androidTestImplementation "androidx.test:core:$androidx_test_version" androidTestImplementation "androidx.test:rules:$androidx_test_version" diff --git a/app/src/main/java/com/google/maps/android/compose/BasicMapActivity.kt b/app/src/main/java/com/google/maps/android/compose/BasicMapActivity.kt index d8871816..96c75b04 100644 --- a/app/src/main/java/com/google/maps/android/compose/BasicMapActivity.kt +++ b/app/src/main/java/com/google/maps/android/compose/BasicMapActivity.kt @@ -15,7 +15,10 @@ package com.google.maps.android.compose import android.os.Bundle +import android.provider.ContactsContract +import android.telecom.Call import android.util.Log +import android.widget.ZoomControls import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.animation.AnimatedVisibility @@ -31,6 +34,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp +import androidx.navigation.NavHostController +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController import com.google.android.gms.maps.CameraUpdateFactory import com.google.android.gms.maps.model.BitmapDescriptorFactory import com.google.android.gms.maps.model.CameraPosition @@ -50,35 +57,64 @@ class BasicMapActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - var isMapLoaded by remember { mutableStateOf(false) } - // Observing and controlling the camera's state can be done with a CameraPositionState - val cameraPositionState = rememberCameraPositionState { - position = defaultCameraPosition + val navController = rememberNavController() + NavHost(navController = navController, startDestination = "map") { + composable("map") { + MapView( + navController = navController + ) + } + composable("details") { + DetailsView( + navController = navController + ) + } } + } + } +} + +@Composable +fun DetailsView( + navController: NavHostController +) { + Button(onClick = { navController.popBackStack() }) { + Text("BACK") + } +} - Box(Modifier.fillMaxSize()) { - GoogleMapView( - modifier = Modifier.matchParentSize(), - cameraPositionState = cameraPositionState, - onMapLoaded = { - isMapLoaded = true - }, +@Composable +fun MapView( + navController: NavHostController +) { + var isMapLoaded by remember { mutableStateOf(false) } + // Observing and controlling the camera's state can be done with a CameraPositionState + val cameraPositionState = rememberCameraPositionState { + position = defaultCameraPosition + } + + Box(Modifier.fillMaxSize()) { + GoogleMapView( + modifier = Modifier.matchParentSize(), + cameraPositionState = cameraPositionState, + onMapLoaded = { + isMapLoaded = true + }, + navController = navController + ) + if (!isMapLoaded) { + AnimatedVisibility( + modifier = Modifier + .matchParentSize(), + visible = !isMapLoaded, + enter = EnterTransition.None, + exit = fadeOut() + ) { + CircularProgressIndicator( + modifier = Modifier + .background(MaterialTheme.colors.background) + .wrapContentSize() ) - if (!isMapLoaded) { - AnimatedVisibility( - modifier = Modifier - .matchParentSize(), - visible = !isMapLoaded, - enter = EnterTransition.None, - exit = fadeOut() - ) { - CircularProgressIndicator( - modifier = Modifier - .background(MaterialTheme.colors.background) - .wrapContentSize() - ) - } - } } } } @@ -89,7 +125,8 @@ fun GoogleMapView( modifier: Modifier, cameraPositionState: CameraPositionState, onMapLoaded: () -> Unit, - content: @Composable () -> Unit = {} + content: @Composable () -> Unit = {}, + navController: NavHostController ) { val singaporeState = rememberMarkerState(position = singapore) val singapore2State = rememberMarkerState(position = singapore2) @@ -124,6 +161,7 @@ fun GoogleMapView( cameraPositionState.projection?.let { projection -> Log.d(TAG, "The current projection is: $projection") } + navController.navigate("details") false } MarkerInfoWindowContent(