home-assistant / home-assistant/android
Camera image upload to file input (frontend)
- Dominant language
- Kotlin
- Stars
- 3.9k
- Forks
- 1.1k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 81
Description
**Home Assistant Android app version(s):**
2025.8.7-full
**Android version(s):**
16 / 1st of July 2025
**Device model(s):**
Samsung Galaxy S25 Ultra a.k.a. SM-S938B/DS
**Home Assistant version:**
Installation method Home Assistant Container
Core 2025.11.2
Frontend 20251105.0
**Last working Home Assistant release (if known):**
//
**Description of problem, include YAML if issue is related to notifications:**
I am working on a custom dashboard card for the [bparasite plant sensor](https://github.com/rbaron/b-parasite), which offers users to upload a photo of their plant in the config page of the card.
I could not make that work with a prompt to directly take a camera image *in the app* it did work when i accessed HA via the chrome browser on my android though. Since this feature seems to be known to be flaky on Android, I asked Gemini to create test-cases, which you can find here: https://mofef.github.io/android_camera_test.html
They **work as intended via android chrome but not if I integrate the exact same page as an iframe into my card.** It only ever shows a file picker, not offering the camera option.
The HA app does have camera permission in case that is relevant.
Since I'm not familiar with android development i asked Gemini for a hypothesis:
Currently, the Home Assistant Android app's `WebView` implementation of `onShowFileChooser` appears to only trigger the standard file picker (`ACTION_GET_CONTENT`). On modern Android versions (14+), this often defaults to the new Photo Picker or a system file picker that **omits the Camera tile**.
This makes it impossible for a user to "Take a Photo" directly from an HTML `` element within the HA app. They are forced to background the app, open the Camera app, take a photo, return to HA, and select the file from the gallery.
Here is some more of what Gemini has to say about it, but I don't have the competence to review that sadly. Please ignore unless you are interested: **trigger warning: potential AI slop**
### Testing & Diagnosis
I have tested the following HTML5 input configurations inside the Home Assistant Android App (latest version) on Android 14/15.
| HTML Input Configuration | Result in HA App | Result in Chrome (Ref) |
| :--- | :--- | :--- |
| `` | Opens Gallery (Photo Picker). No Camera option. | Gallery (Photo Picker). |
| `` | Opens Gallery. No Camera option. | **Opens Camera directly.** |
| `` | Opens System Files. No Camera option. | **Opens System Files + Camera option.** |
| `` | Opens System Files. No Camera option. | **Opens System Files + Camera option.** |
**Conclusion:** The `WebView` seems to be lacking the specific intent logic to handle `capture` attributes or to append the `MediaStore.ACTION_IMAGE_CAPTURE` intent to the chooser dialog.
### Proposed Solution
I propose updating the `WebChromeClient.onShowFileChooser` override in the Android app to explicitly add the `ACTION_IMAGE_CAPTURE` intent to the chooser options.
This is a standard pattern for Android WebViews to support HTML5 camera inputs. By creating a `takePictureIntent` and adding it to the `Intent.createChooser` extra `EXTRA_INITIAL_INTENTS`, the `WebView` will present the user with both the File Manager and the Camera.
**Companion App Logs:**
Pretty sure its irrelevant, let me know otherwise please
**Screenshot or video of problem:**
card config page before clicking a button (current state while debugging with different file inputs):
behaviour in app:
behaviour in chrome:
card (just for illustration, irrelevant to the issue):
**Additional information:**
I'm not an Android developer (last contact point 2011) but I'm in SWE since 10 years so I'm happy to take directions and prepare a PR.
Contributor guide
Assessment
This issue has not been assessed yet.