Skip to content

fix: keep ComposeView attached while info window is shown for compose-ui 1.10+ compat - #931

Merged
dkhawk merged 2 commits into
mainfrom
fix/info-window-content-newer-compose-bom
Jul 10, 2026
Merged

fix: keep ComposeView attached while info window is shown for compose-ui 1.10+ compat#931
dkhawk merged 2 commits into
mainfrom
fix/info-window-content-newer-compose-bom

Conversation

@kikoso

@kikoso kikoso commented Jun 11, 2026

Copy link
Copy Markdown
Collaborator

Fixes #913

Summary

  • compose-ui 1.10.0 (shipped in compose-bom 2026.04.01) added an isShown guard to AbstractComposeView.draw(), causing detached views to draw nothing.
  • The previous implementation called renderComposeViewOnce, which attaches the ComposeView and then immediately detaches it. By the time the Maps SDK internally calls draw() to render the info window bitmap, the view is detached and isShown == false, so the content is never drawn.

Changes

  • ComposeInfoWindowAdapter: Replace renderComposeViewOnce with startRenderingComposeView so the view stays attached to the MapView's NoDrawContainerView while the info window is visible. A RenderHandle is stored per marker so we can clean up later.
  • MapApplier: Store a reference to ComposeInfoWindowAdapter and call disposeForMarker(marker) from the existing onInfoWindowClose listener, so the view is removed from the container as soon as the info window is dismissed.

Test plan

  • Add a MarkerInfoWindowContent with custom Compose content
  • Tap the marker to open the info window
  • Confirm the custom content is drawn correctly with compose-bom 2026.04.01+
  • Close the info window and confirm no view leak (the view is removed from the MapView hierarchy)
  • Open the same info window again — confirm it re-renders correctly

@googlemaps-bot

googlemaps-bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Code Coverage

Overall Project 27.56% 🍏

There is no coverage information present for the Files changed

…-ui 1.10+ compat

Addresses issue #913: MarkerInfoWindowContent renders empty with
compose-bom 2026.04.01+ (compose-ui 1.10.0+).

compose-ui 1.10.0 added an isShown guard to AbstractComposeView.draw(),
which makes detached views draw nothing. The previous implementation
immediately detached the ComposeView via renderComposeViewOnce, so
by the time the Maps SDK called draw() the view was detached and
isShown == false.

Fix: use startRenderingComposeView (keeps view attached) instead of
renderComposeViewOnce, storing the RenderHandle per marker. The view
stays attached to the MapView's NoDrawContainerView while the info
window is visible, so isShown == true when the Maps SDK renders it.
The RenderHandle is disposed when the info window closes via a new
disposeForMarker() call wired into the existing onInfoWindowClose
listener in MapApplier.
@kikoso
kikoso force-pushed the fix/info-window-content-newer-compose-bom branch from 7a3797d to 738204d Compare July 1, 2026 14:34
@kikoso
kikoso marked this pull request as ready for review July 1, 2026 14:34
@dkhawk
dkhawk merged commit 995ff38 into main Jul 10, 2026
13 checks passed
@dkhawk
dkhawk deleted the fix/info-window-content-newer-compose-bom branch July 10, 2026 21:28
kikoso added a commit that referenced this pull request Aug 6, 2026
…indowComposable

Fixes #950

PR #931 fixed #913 (empty info window content on compose-ui 1.10+) by
keeping the ComposeView permanently attached to the library's own
container while the info window is shown. That works around
compose-ui's attachment requirement for drawing, but it means the view
handed back from getInfoContents()/getInfoWindow() already has a
parent. The Maps SDK internally re-parents that view into its own
default info window frame, so calling addView() on an already-parented
view throws:

java.lang.IllegalStateException: The specified child already has a
parent. You must call removeView() on the child's parent first.

This change renders the Compose content into a plain Bitmap up front
(attach, measure, layout, draw, detach, the same technique already
used for MarkerComposable icon bitmaps) and hands the Maps SDK a
fresh, unattached ImageView wrapping that bitmap instead of the live
ComposeView. This keeps the compose-ui 1.10+ fix from #931 (content is
fully rendered before we let go of it) while avoiding the double
parent crash, since the returned view was never attached anywhere.

Verified on a physical device: reproduced the #950 crash on the
previous build, confirmed it is gone after this change, and confirmed
MarkerInfoWindowContent and MarkerInfoWindowComposable content still
render correctly under compose-bom 2026.06.01 (compose-ui 1.10+),
covering the original #913 scenario as well.
kikoso added a commit that referenced this pull request Aug 6, 2026
…indowComposable (#953)

Fixes #950

PR #931 fixed #913 (empty info window content on compose-ui 1.10+) by
keeping the ComposeView permanently attached to the library's own
container while the info window is shown. That works around
compose-ui's attachment requirement for drawing, but it means the view
handed back from getInfoContents()/getInfoWindow() already has a
parent. The Maps SDK internally re-parents that view into its own
default info window frame, so calling addView() on an already-parented
view throws:

java.lang.IllegalStateException: The specified child already has a
parent. You must call removeView() on the child's parent first.

This change renders the Compose content into a plain Bitmap up front
(attach, measure, layout, draw, detach, the same technique already
used for MarkerComposable icon bitmaps) and hands the Maps SDK a
fresh, unattached ImageView wrapping that bitmap instead of the live
ComposeView. This keeps the compose-ui 1.10+ fix from #931 (content is
fully rendered before we let go of it) while avoiding the double
parent crash, since the returned view was never attached anywhere.

Verified on a physical device: reproduced the #950 crash on the
previous build, confirmed it is gone after this change, and confirmed
MarkerInfoWindowContent and MarkerInfoWindowComposable content still
render correctly under compose-bom 2026.06.01 (compose-ui 1.10+),
covering the original #913 scenario as well.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MarkerInfoWindowContent not drawing content with androidx.compose:compose-bom:2026.04.01 and newer

3 participants