From 077f0466d1138f9b59ec13a94a83df8b12548e94 Mon Sep 17 00:00:00 2001 From: "mohammad.firmansyah" Date: Mon, 2 Sep 2024 11:34:52 +0700 Subject: [PATCH 1/4] fix : view to be nullable --- .../maps/android/compose/clustering/ClusterRenderer.kt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt index 9e785976..c1e902da 100644 --- a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt +++ b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt @@ -168,11 +168,11 @@ internal class ComposeUiClusterRenderer( } } - private fun renderViewToBitmapDescriptor(view: AbstractComposeView): BitmapDescriptor { + private fun renderViewToBitmapDescriptor(view: AbstractComposeView?): BitmapDescriptor { /* AndroidComposeView triggers LayoutNode's layout phase in the View draw phase, so trigger a draw to an empty canvas to force that */ - view.draw(fakeCanvas) - val viewParent = (view.parent as ViewGroup) + view?.draw(fakeCanvas) + val viewParent = (view?.parent as ViewGroup) view.measure( View.MeasureSpec.makeMeasureSpec(viewParent.width, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(viewParent.height, View.MeasureSpec.AT_MOST), @@ -186,7 +186,6 @@ internal class ComposeUiClusterRenderer( bitmap.applyCanvas { view.draw(this) } - return BitmapDescriptorFactory.fromBitmap(bitmap) } From a4eb7dc5ba6bb2ef5daac141585d914986b010a0 Mon Sep 17 00:00:00 2001 From: "mohammad.firmansyah" Date: Mon, 2 Sep 2024 14:08:03 +0700 Subject: [PATCH 2/4] fix : put else condition when view.parent is null draw blank bitmap --- .../compose/clustering/ClusterRenderer.kt | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt index c1e902da..62253cda 100644 --- a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt +++ b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt @@ -172,21 +172,31 @@ internal class ComposeUiClusterRenderer( /* AndroidComposeView triggers LayoutNode's layout phase in the View draw phase, so trigger a draw to an empty canvas to force that */ view?.draw(fakeCanvas) - val viewParent = (view?.parent as ViewGroup) - view.measure( - View.MeasureSpec.makeMeasureSpec(viewParent.width, View.MeasureSpec.AT_MOST), - View.MeasureSpec.makeMeasureSpec(viewParent.height, View.MeasureSpec.AT_MOST), - ) - view.layout(0, 0, view.measuredWidth, view.measuredHeight) - val bitmap = Bitmap.createBitmap( - view.measuredWidth.takeIf { it > 0 } ?: 1, - view.measuredHeight.takeIf { it > 0 } ?: 1, - Bitmap.Config.ARGB_8888 - ) - bitmap.applyCanvas { - view.draw(this) + if (view?.parent != null) { + val viewParent = (view.parent as ViewGroup) + + view.measure( + View.MeasureSpec.makeMeasureSpec(viewParent.width, View.MeasureSpec.AT_MOST), + View.MeasureSpec.makeMeasureSpec(viewParent.height, View.MeasureSpec.AT_MOST), + ) + view.layout(0, 0, view.measuredWidth, view.measuredHeight) + val bitmap = Bitmap.createBitmap( + view.measuredWidth.takeIf { it > 0 } ?: 1, + view.measuredHeight.takeIf { it > 0 } ?: 1, + Bitmap.Config.ARGB_8888 + ) + bitmap.applyCanvas { + view.draw(this) + } + return BitmapDescriptorFactory.fromBitmap(bitmap) + } else { + val bitmap = Bitmap.createBitmap( + 20, + 20, + Bitmap.Config.ARGB_8888 + ) + return BitmapDescriptorFactory.fromBitmap(bitmap) } - return BitmapDescriptorFactory.fromBitmap(bitmap) } private sealed class ViewKey { From 6efea2e6415930663845b24c5f395bf77f6d84e4 Mon Sep 17 00:00:00 2001 From: firman <66255380+mohammad-firmansyah@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:40:13 +0700 Subject: [PATCH 3/4] Update maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt Co-authored-by: Zongle Wang --- .../compose/clustering/ClusterRenderer.kt | 43 ++++++++----------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt index 62253cda..37f7cb44 100644 --- a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt +++ b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt @@ -171,32 +171,25 @@ internal class ComposeUiClusterRenderer( private fun renderViewToBitmapDescriptor(view: AbstractComposeView?): BitmapDescriptor { /* AndroidComposeView triggers LayoutNode's layout phase in the View draw phase, so trigger a draw to an empty canvas to force that */ - view?.draw(fakeCanvas) - if (view?.parent != null) { - val viewParent = (view.parent as ViewGroup) - - view.measure( - View.MeasureSpec.makeMeasureSpec(viewParent.width, View.MeasureSpec.AT_MOST), - View.MeasureSpec.makeMeasureSpec(viewParent.height, View.MeasureSpec.AT_MOST), - ) - view.layout(0, 0, view.measuredWidth, view.measuredHeight) - val bitmap = Bitmap.createBitmap( - view.measuredWidth.takeIf { it > 0 } ?: 1, - view.measuredHeight.takeIf { it > 0 } ?: 1, - Bitmap.Config.ARGB_8888 - ) - bitmap.applyCanvas { - view.draw(this) - } - return BitmapDescriptorFactory.fromBitmap(bitmap) - } else { - val bitmap = Bitmap.createBitmap( - 20, - 20, - Bitmap.Config.ARGB_8888 - ) - return BitmapDescriptorFactory.fromBitmap(bitmap) + view.draw(fakeCanvas) + val viewParent = + view.parent as? ViewGroup ?: return Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_8888) + .let(BitmapDescriptorFactory::fromBitmap) + view.measure( + View.MeasureSpec.makeMeasureSpec(viewParent.width, View.MeasureSpec.AT_MOST), + View.MeasureSpec.makeMeasureSpec(viewParent.height, View.MeasureSpec.AT_MOST), + ) + view.layout(0, 0, view.measuredWidth, view.measuredHeight) + val bitmap = Bitmap.createBitmap( + view.measuredWidth.takeIf { it > 0 } ?: 1, + view.measuredHeight.takeIf { it > 0 } ?: 1, + Bitmap.Config.ARGB_8888 + ) + bitmap.applyCanvas { + view.draw(this) } + + return BitmapDescriptorFactory.fromBitmap(bitmap) } private sealed class ViewKey { From 2404b0472ef9c34de74302a1d06b0e5120188571 Mon Sep 17 00:00:00 2001 From: firman <66255380+mohammad-firmansyah@users.noreply.github.com> Date: Wed, 4 Sep 2024 10:51:44 +0700 Subject: [PATCH 4/4] Update maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt Co-authored-by: Zongle Wang --- .../google/maps/android/compose/clustering/ClusterRenderer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt index 37f7cb44..b96cf469 100644 --- a/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt +++ b/maps-compose-utils/src/main/java/com/google/maps/android/compose/clustering/ClusterRenderer.kt @@ -168,7 +168,7 @@ internal class ComposeUiClusterRenderer( } } - private fun renderViewToBitmapDescriptor(view: AbstractComposeView?): BitmapDescriptor { + private fun renderViewToBitmapDescriptor(view: AbstractComposeView): BitmapDescriptor { /* AndroidComposeView triggers LayoutNode's layout phase in the View draw phase, so trigger a draw to an empty canvas to force that */ view.draw(fakeCanvas)