Skip to content

Clustering: ComposeUiClusterRenderer.renderViewToBitmapDescriptor fatal crash #325

Description

@andreas-umbricht

Hello everyone

Library version: maps-compose 2.11.4 and maps-compose-utils 2.11.4
Crashes happen on every Android version (minimum Android version of my app is 8) and across all types of devices.

I am not able to reproduce the error myself, but I can see the crashes in Crashlytics and they make up about 80% of all crashes in the app.

Code example

GoogleMap(
    uiSettings = MapUiSettings(zoomControlsEnabled = false, rotationGesturesEnabled = false),
    cameraPositionState = cameraPositionState,
    properties = MapProperties(
        mapStyleOptions = MapStyleOptions.loadRawResourceStyle(context, if (isSystemInDarkTheme()) R.raw.map_style_dark else R.raw.map_style_light),
        isMyLocationEnabled = false
    )
) {
    Clustering(
        items = favoriteItems,
        clusterContent = { cluster ->
            val averageTemperature = cluster
                .items
                .mapNotNull { it.weatherData?.observation?.getTemp() }
                .average()
                .toInt()
                .toString()

            val tempUnit = cluster
                .items
                .firstOrNull()
                ?.weatherData
                ?.observation
                ?.getTempUnit()

            TodayMarker(averageTemperature + tempUnit)
        },
        onClusterClick = {
            true
        },
        clusterItemContent = {
            TodayMarker(it.weatherData?.observation?.getFullTemperature())
        },
        onClusterItemClick = {
            true
        }
     )
}

@Composable
private fun TodayMarker(temperature: String?) {
    Text(
        text = temperature ?: "",
        fontWeight = FontWeight.SemiBold,
        fontSize = 20.dp,
        color = Color.White,
        modifier = Modifier
            .background(
                colorResource(id = R.color.dark_green),
                RoundedCornerShape(10.dp)
            )
            .border(
                BorderStroke(1.dp, colorResource(id = R.color.green)),
                RoundedCornerShape(10.dp)
            )
            .clip(RoundedCornerShape(10.dp))
            .padding(vertical = 1.dp, horizontal = 3.dp)
            .widthIn(min = 35.dp),
        textAlign = TextAlign.Center
    )
}

Stack trace

Fatal Exception: java.lang.IllegalArgumentException
width and height must be > 0
android.graphics.Bitmap.createBitmap (Bitmap.java:1118)
android.graphics.Bitmap.createBitmap (Bitmap.java:1085)
android.graphics.Bitmap.createBitmap (Bitmap.java:1035)
android.graphics.Bitmap.createBitmap (Bitmap.java:996)
com.google.maps.android.compose.clustering.ComposeUiClusterRenderer.renderViewToBitmapDescriptor (ClusterRenderer.kt:171)
com.google.maps.android.compose.clustering.ComposeUiClusterRenderer.onBeforeClusterItemRendered (ClusterRenderer.kt:157)
com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.perform (DefaultClusterRenderer.java:1022)
com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.access$2300 (DefaultClusterRenderer.java:992)
com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.performNextTask (DefaultClusterRenderer.java:707)
com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.handleMessage (DefaultClusterRenderer.java:678)
android.os.Handler.dispatchMessage (Handler.java:106)
android.os.Looper.loopOnce (Looper.java:226)
android.os.Looper.loop (Looper.java:313)
android.app.ActivityThread.main (ActivityThread.java:8757)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1067)

Is there currently some way to avoid this error?

Kind regards

Metadata

Metadata

Assignees

No one assigned

    Labels

    duplicateThis issue or pull request already exists

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions