Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: GoogleMap breaking preview mode. #179

Merged
merged 1 commit into from Jul 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/build.gradle
Expand Up @@ -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'
implementation 'androidx.compose.ui:ui-tooling-preview:1.1.1'
debugImplementation 'androidx.compose.ui:ui-tooling:1.1.1'

androidTestImplementation "androidx.test:core:$androidx_test_version"
androidTestImplementation "androidx.test:rules:$androidx_test_version"
Expand Down
Expand Up @@ -24,18 +24,39 @@ import androidx.compose.animation.fadeOut
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.background
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.Button
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Switch
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.google.android.gms.maps.CameraUpdateFactory
import com.google.android.gms.maps.model.BitmapDescriptorFactory
import com.google.android.gms.maps.model.CameraPosition
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.Marker
import com.google.maps.android.compose.theme.MapsComposeSampleTheme
import kotlinx.coroutines.launch

private const val TAG = "BasicMapActivity"
Expand Down Expand Up @@ -86,9 +107,9 @@ class BasicMapActivity : ComponentActivity() {

@Composable
fun GoogleMapView(
modifier: Modifier,
cameraPositionState: CameraPositionState,
onMapLoaded: () -> Unit,
modifier: Modifier = Modifier,
cameraPositionState: CameraPositionState = rememberCameraPositionState(),
onMapLoaded: () -> Unit = {},
content: @Composable () -> Unit = {}
) {
val singaporeState = rememberMarkerState(position = singapore)
Expand Down Expand Up @@ -295,3 +316,12 @@ private fun DebugView(
Text(text = "Marker position is ${markerState.position}")
}
}


@Preview
@Composable
fun GoogleMapViewPreview() {
MapsComposeSampleTheme {
GoogleMapView(Modifier.fillMaxSize())
}
}
116 changes: 67 additions & 49 deletions app/src/main/java/com/google/maps/android/compose/MainActivity.kt
Expand Up @@ -30,6 +30,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.google.maps.android.compose.theme.MapsComposeSampleTheme

private const val TAG = "MapSampleActivity"

Expand All @@ -38,58 +39,75 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
val context = LocalContext.current
Column(
Modifier
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
MapsComposeSampleTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Spacer(modifier = Modifier.padding(10.dp))
Text(
text = getString(R.string.main_activity_title),
style = MaterialTheme.typography.h5
)
Spacer(modifier = Modifier.padding(10.dp))
Button(
onClick = {
context.startActivity(Intent(context, BasicMapActivity::class.java))
}) {
Text(getString(R.string.basic_map_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(Intent(context, MapInColumnActivity::class.java))
}) {
Text(getString(R.string.map_in_column_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(Intent(context, MapClusteringActivity::class.java))
}) {
Text(getString(R.string.map_clustering_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(Intent(context, LocationTrackingActivity::class.java))
}) {
Text(getString(R.string.location_tracking_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(Intent(context, ScaleBarActivity::class.java))
}) {
Text(getString(R.string.scale_bar_activity))
val context = LocalContext.current
Column(
Modifier
.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Spacer(modifier = Modifier.padding(10.dp))
Text(
text = getString(R.string.main_activity_title),
style = MaterialTheme.typography.h5
)
Spacer(modifier = Modifier.padding(10.dp))
Button(
onClick = {
context.startActivity(Intent(context, BasicMapActivity::class.java))
}) {
Text(getString(R.string.basic_map_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(
Intent(
context,
MapInColumnActivity::class.java
)
)
}) {
Text(getString(R.string.map_in_column_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(
Intent(
context,
MapClusteringActivity::class.java
)
)
}) {
Text(getString(R.string.map_clustering_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(
Intent(
context,
LocationTrackingActivity::class.java
)
)
}) {
Text(getString(R.string.location_tracking_activity))
}
Spacer(modifier = Modifier.padding(5.dp))
Button(
onClick = {
context.startActivity(Intent(context, ScaleBarActivity::class.java))
}) {
Text(getString(R.string.scale_bar_activity))
}
}
}
}
}
}
}
}
18 changes: 18 additions & 0 deletions app/src/main/java/com/google/maps/android/compose/theme/Theme.kt
@@ -0,0 +1,18 @@
package com.google.maps.android.compose.theme

import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.MaterialTheme
import androidx.compose.material.darkColors
import androidx.compose.material.lightColors
import androidx.compose.runtime.Composable

@Composable
fun MapsComposeSampleTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
MaterialTheme(
colors = if (darkTheme) darkColors() else lightColors(),
content = content
)
}
Expand Up @@ -32,6 +32,7 @@ import androidx.compose.runtime.rememberCompositionContext
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle
Expand Down Expand Up @@ -86,6 +87,11 @@ public fun GoogleMap(
contentPadding: PaddingValues = NoPadding,
content: (@Composable @GoogleMapComposable () -> Unit)? = null,
) {
// Early return if in preview
if (LocalInspectionMode.current) {
return
}

val context = LocalContext.current
val mapView = remember { MapView(context, googleMapOptionsFactory()) }

Expand Down