Bug Report
Plugin(s)
@capacitor/google-maps: 8.0.1
@capacitor/core: 8.1.0
@capacitor/android: 8.1.0
@capacitor/app: 8.0.1
@ionic/angular: 8.x
@angular/core: 20.x
Capacitor Version
💊 Capacitor Doctor 💊
Latest Dependencies:
@capacitor/cli: 8.2.0
@capacitor/core: 8.2.0
@capacitor/android: 8.2.0
@capacitor/ios: 8.2.0
Installed Dependencies:
@capacitor/cli: 8.1.0
@capacitor/ios: 8.1.0
@capacitor/android: 8.1.0
@capacitor/core: 8.1.0
[success] Android looking great! 👌
[error] Xcode is not installed
Platform(s)
Android
Samsung Galaxy S24 Ultra
Android 16
Current Behavior
On Android, repeated use of multiple scrollable Ionic pages that embed native @capacitor/google-maps views can leave the app in a state where manual drag scrolling stops working application-wide until the Android process is fully restarted.
The failure happens after moving quickly through several map-heavy screens, scrolling them, and sometimes presenting/dismissing an Ionic alert during the same session.
Once the bug appears:
touchstart, touchmove, and pointerdown still reach the WebView.
ion-content is still present, visible, and configured with overflowY: auto.
- Programmatic scroll still works.
- Only manual drag-to-scroll is broken.
- Navigating to a different page does not fix it.
- Backgrounding/foregrounding the app does not fix it.
- Resetting Angular/Ionic shell state does not fix it.
- Destroying all currently tracked native maps does not fix it.
- Remounting the affected
ion-content does not fix it.
- Toggling
scrollY on ion-content does not fix it.
- Killing the app process from Android recents and relaunching clears the issue immediately.
Expected Behavior
Repeated use of embedded native Google Maps inside ion-content should not break manual drag scrolling for the current app process.
Code Reproduction
I do not yet have a minimal public reproduction repo, but the issue is reproducible in a real Capacitor Android app with these conditions:
- Create at least 2-3 Ionic pages using
ion-content.
- Embed native
@capacitor/google-maps views in those pages.
- Navigate quickly between those pages multiple times.
- On each page:
- interact with the native map
- scroll the page down and back up
- Optionally present and dismiss an Ionic alert during the same session.
- Continue repeating until manual drag scrolling stops working.
The issue becomes easier to reproduce when:
- there are multiple map-bearing screens in the same flow
- pages are repeatedly created/destroyed in quick succession
- the user alternates between page scrolling and native map interaction
Other Technical Details
Framework stack:
- Angular 20
- Ionic 8
- Capacitor 8
Android runtime:
- native Capacitor Android build
- physical device testing
- Samsung Galaxy S24 Ultra
- Android 16
Observed package versions:
- @capacitor/google-maps: 8.0.1
- @capacitor/core: 8.1.0
- @capacitor/android: 8.1.0
- @ionic/angular: ^8.0.0
- @angular/core: ^20.0.0
Additional Context
Important findings from our diagnostic session:
- This does not look like a leftover HTML overlay:
activeOverlayCount = 0
backdropCount = 0
- DOM hit-testing still returned normal HTML elements
- This does not look like a simple native-map transparency refcount leak:
- transparency bookkeeping returned to zero correctly
- There was a real late-lifecycle race where map setup could continue after component destroy, but fixing that race did not remove the bug.
- When the bug is active:
- touch events still enter the WebView
- the blocked page still has a valid
ion-content
scrollHeight > clientHeight
overflowY = auto
scrollTop can still be changed programmatically
- This narrows the remaining symptom:
- the
drag gesture -> scroll pipeline is broken
- the page is still alive
- the scroll container is still alive
- only gesture-driven scrolling is lost
- With all embedded native maps temporarily disabled in the same test flow, the bug stopped reproducing.
- Re-enabling only one embedded native map screen was enough for the bug to return.
Representative log snippets from the session:
[native-map] gis-draw-map-bl2c4kfca1b ngOnDestroy
[native-map] gis-draw-map-bl2c4kfca1b destroy-start {"hasMap":true,"transparencyHeld":true}
[native-map] gis-draw-map-bl2c4kfca1b destroy-success
[native-map] gis-draw-map-bl2c4kfca1b late-setup-cleanup {"stage":"setup-after-initialFocus","destroyed":true,"attemptToken":1,"currentToken":2,"hasMap":false}
The race above was real, but after adding defensive cleanup for it, the scroll freeze still reproduced.
[native-map] registry destroy-all-start {"reason":"home-dashboard-test-button","activeMaps":0}
[native-map] registry destroy-all-finished {"reason":"home-dashboard-test-button","activeMaps":0}
The logs above show that, when the app was already frozen, the global native-map registry no longer knew about any active map instances.
[data-entry-input-debug] {"hasContent":true,"scrollTop":0,"scrollHeight":1849,"clientHeight":716,"overflowY":"auto"}
[input-debug] snapshot {"reason":"data-entry-page-dump","nativeMapActive":false,"ionContent":{"label":"visible:ion-content.md.content-ltr.hydrated","rect":{"top":85,"left":0,"width":384,"height":631},"scrollTop":0,"scrollHeight":1849,"clientHeight":716,"overflowY":"auto"},"recentEvents":[{"type":"touchmove"},{"type":"touchmove"},{"type":"touchmove"}]}
The logs above show that:
- touch input was still reaching the WebView
- the blocked page still had a normal scroll container
- manual drag scrolling was broken anyway
Current working hypothesis after elimination:
- something in Android runtime gesture arbitration between WebView scrolling and the native map surface remains corrupted after repeated embedded-map usage
- the problem appears lower than normal Angular/Ionic page lifecycle and lower than ordinary DOM overlays
A screen recording is available here: https://www.youtube.com/shorts/_kagfuN7VYk
Bug Report
Plugin(s)
@capacitor/google-maps: 8.0.1
@capacitor/core: 8.1.0
@capacitor/android: 8.1.0
@capacitor/app: 8.0.1
@ionic/angular: 8.x
@angular/core: 20.x
Capacitor Version
Platform(s)
Android
Samsung Galaxy S24 Ultra
Android 16
Current Behavior
On Android, repeated use of multiple scrollable Ionic pages that embed native
@capacitor/google-mapsviews can leave the app in a state where manual drag scrolling stops working application-wide until the Android process is fully restarted.The failure happens after moving quickly through several map-heavy screens, scrolling them, and sometimes presenting/dismissing an Ionic alert during the same session.
Once the bug appears:
touchstart,touchmove, andpointerdownstill reach the WebView.ion-contentis still present, visible, and configured withoverflowY: auto.ion-contentdoes not fix it.scrollYonion-contentdoes not fix it.Expected Behavior
Repeated use of embedded native Google Maps inside
ion-contentshould not break manual drag scrolling for the current app process.Code Reproduction
I do not yet have a minimal public reproduction repo, but the issue is reproducible in a real Capacitor Android app with these conditions:
ion-content.@capacitor/google-mapsviews in those pages.The issue becomes easier to reproduce when:
Other Technical Details
Framework stack:
Android runtime:
Observed package versions:
Additional Context
Important findings from our diagnostic session:
activeOverlayCount = 0backdropCount = 0ion-contentscrollHeight > clientHeightoverflowY = autoscrollTopcan still be changed programmaticallydrag gesture -> scrollpipeline is brokenRepresentative log snippets from the session:
The race above was real, but after adding defensive cleanup for it, the scroll freeze still reproduced.
The logs above show that, when the app was already frozen, the global native-map registry no longer knew about any active map instances.
The logs above show that:
Current working hypothesis after elimination:
A screen recording is available here: https://www.youtube.com/shorts/_kagfuN7VYk