webview
"/home/yossef/notes/git/projects/inguide/modules/webview.md"
path: inguide/modules/webview.md
- **fileName**: webview
- **Created on**: 2026-06-16 00:48:42
webview
cs# webview
Purpose: WebView hosting MapLibre GL JS map, JavaScript bridge infrastructure.
MapScreen
File: app/src/main/java/com/inguide/app/ui/map/MapScreen.kt (1771 lines)
- Embed MapLibre in WebView via
WebViewAssetLoader - Supports offline PMTiles, floor switching, room search, session persistence
- WebView pooling (
MapWebViewPool) for prewarm/acquire/release - Error recovery: cache corruption detection, storage clearing
MapJsActions
File: app/src/main/java/com/inguide/app/ui/map/MapJsActions.kt
- Queue/flush pattern for JS commands before map is ready
requestOpenSearch(),requestFocusLocationByName(name)with retry (10×, 300ms)
MapBridge (@JavascriptInterface)
Registered as "AndroidBridge" on the WebView. JS calls window.AndroidBridge.*:
| Method | Triggered when |
|---|---|
onMapReady() |
Map initialized |
onMapError(msg) |
Error occurs |
clearMapStorage() |
JS requests storage clear |
onMapMetadata(payload) |
Map loaded |
onSessionSnapshot(payload) |
Map moves/zooms |
onFloorsChanged(payload) |
Floor list changes |
onFloorChanged(id, label) |
Floor changes |
onUploadReady() |
Upload UI shown |
onRouteComputed(payload) |
Route computed (→ AR) |
android-bridge.js
File: maplibra_web/src/app/android-bridge.js
hasAndroidBridge— checkswindow.AndroidBridgeexistencenotifyAndroidFloorState(uiManager)— sends floor list + current floorshouldUseNativeControls()— detects Android asset host
route.js (bridge trigger)
File: maplibra_web/src/path-renderer/route.js
After all route computations succeed, setRoute() calls:
if (route && typeof window !== 'undefined' && window.AndroidBridge?.onRouteComputed) {
window.AndroidBridge.onRouteComputed(JSON.stringify(route));
}
Sent JSON: { lineFeatures, connectorFeatures, startFeature, endFeature, outdoorFeature }
Related: ./pathfinding.md, ../flows/route-data-flow.md
continue:[[]]
before:[[]]