Madhava
07/15/2020, 10:58 PMfun updateMap(map: GoogleMap?, markers: ArrayList<Marker>, selectedLocation: Int) {
if (map != null) {
Log.i("MapView", "setting new zoom location")
if (selectedLocation < markers.size) {
val marker = markers[selectedLocation]
marker.showInfoWindow()
map.animateCamera(CameraUpdateFactory.newLatLngZoom(marker.position, 14.0f))
}
}
}
@Composable
fun MapPageView(
locations: ArrayList<Location>,
selectedLocation: Int,
children: @Composable() () -> Unit = emptyContent()
) {
val ctx = ContextAmbient.current
var mapState: MutableState<GoogleMap?> = state { null }
var markerState: MutableState<ArrayList<Marker>> = state { ArrayList<Marker>() }
if (selectedLocation < locations.size) {
updateMap(mapState.value, markerState.value, selectedLocation)
}
Box(modifier = Modifier.fillMaxSize(),
gravity = Alignment.TopCenter) {
Stack {
Box(gravity = Alignment.TopCenter, modifier = Modifier.fillMaxWidth().height(240.dp)) {
AndroidView(resId = R.layout.map_fragment ) { view ->
val fragment = (view.context as AppCompatActivity).supportFragmentManager.findFragmentById(R.id.map)
(fragment as SupportMapFragment).getMapAsync {
// reference
mapState.value = it
it.setOnMarkerClickListener { marker ->
Log.i("MapView", "got a marker tapped ${marker}")
if (marker.isInfoWindowShown) {
marker.hideInfoWindow()
} else {
marker.showInfoWindow()
}
true
}
Log.i("MapView", "Setup Map")
// markers
var index = 0
for (location in locations) {
val options = location.annotation()
val marker = it.addMarker(options)
if (selectedLocation == index) {
it.moveCamera(CameraUpdateFactory.newLatLngZoom(marker.position, 14.0f))
marker.showInfoWindow()
}
markerState.value.add(marker)
index += 1
}
// settings
it.uiSettings.isMyLocationButtonEnabled = true
it.mapType = MAP_TYPE_NORMAL
if (ActivityCompat.checkSelfPermission(
ctx,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(
ctx,
Manifest.permission.ACCESS_COARSE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {
}
}
}
}
Box(
paddingTop = 200.dp
) {
Box(shape = RoundedCornerShape(
topLeft = Styles.cornerRadius.dp,
topRight = Styles.cornerRadius.dp
),
modifier = Modifier.fillMaxSize(),
gravity = Alignment.Center,
backgroundColor = ivoryColor,
paddingTop = 20.dp,
paddingBottom = 20.dp,
paddingStart = 20.dp,
paddingEnd = 20.dp) {
children()
}
}
}
}
}