Mobile Media Diagnostic

Isolate the AppBuild Android photo/camera crash boundary

Native Bridge Surface

isAppBuildWebView:false
platform:<none>
window.AppBuild:false
window.mobileApp:false
window.Capacitor:false
pushBuffer:false
User-Agent:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/128.0.0.0 Safari/537.36

Interpretation: If isAppBuildWebView is true but there is no window.AppBuild.camera or mobileApp.takePhoto method, the app relies entirely on the WebView's <input type="file"> →WebChromeClient.onShowFileChooser(). No native camera plugin exists.

Test A — Gallery Single Photo

Plain <input type="file" accept="image/*"> — no multiple, no preview, no compression, no R2. If this crashes, the WebView file chooser itself is broken.

Test B — Gallery Multiple

Plain <input type="file" accept="image/*" multiple> — if A passes but this crashes, multiple is the trigger.

Test C — Camera

Plain <input type="file" accept="image/*" capture="environment"> — no multiple. If A passes but this crashes, capture is the trigger (camera intent incompatibility with the AppBuild WebView).

Test D — Photo Import Crash Log

Persisted checkpoints from Bulk Photo Import. If the app crashed, the last checkpoint shows the crash boundary. Re-open this page after a crash to read it.

No diagnostic log yet. Run Bulk Photo Import to populate.

Crash Boundary Interpretation

Test A crashes → The AppBuild WebView's onShowFileChooser / ActivityResult is broken. Fix requires an AppBuild binary update or a native camera plugin.

A passes, B crashes → multiple attribute triggers the crash. Remove multiple and use single-shot selection.

A passes, C crashes → capture="environment" triggers the crash (camera intent incompatible). Remove capture and let users pick from gallery.

A+B+C pass, Photo Import crashes → Read Test D. The last checkpoint shows whether the crash is in preview, compression, R2 upload, or entity save.