-
Integrated Bluetooth media metadata, playback controls, phone volume, and
direct AVRCP cover-art retrieval into
ivi-homescreenon AGL.
Status#
- Status: Completed
- Timeline: August 10, 2026 to August 16, 2026
Progress#
1. Reviewed Gerrit Feedback for the Bluetooth Settings UI#
Review feedback on
flutter-ics-homescreen change 31887
identified broad ref.watch(bluetoothProvider) calls that rebuild widgets when
unrelated Bluetooth state changes, and I will start work on it.
I also revisited the earlier native crash during pairing and disconnection
errors. It was caused by a compiler toolchain and ABI mismatch, so
bluez_native needs to be built with Clang to match the Flutter application.
The phone still disconnects automatically immediately after its first pairing.
I reproduced the same behavior with bluetoothctl, without the Flutter UI or
native library, which indicates that it is not caused by the application. I
will compare a direct connection with a manual pair, trust, and connect sequence
to isolate the BlueZ behavior.
I also observed that the first pair-and-connect attempt does not establish AVRCP. After disconnecting and reconnecting the phone, AVRCP and the media features work correctly. I will test the connection sequence to determine whether trust, timing, or profile initialization causes the first connection to miss AVRCP.
2. Integrated the Bluetooth Media Player into AGL#
- Displayed the current track's cover art, title, artist, album, elapsed time, and duration in the AGL media screen.
- Connected the previous, pause/play, and next buttons to the remote Bluetooth player.
- Displayed the current shuffle and repeat states.
- Added the phone's media volume to the bottom horizontal volume control. This value represents the volume reported by and controlled from the connected phone; it is separate from the vertical vehicle audio controls on the left.

3. Documented the Runtime Requirements#
Direct cover-art retrieval without mpris-proxy.service still requires:
bluetoothdfor pairing, connection, AVRCP, andMediaPlayer1.obexdwith BlueZ's experimental Image/BIP API enabled.- BlueZ experimental features enabled with
-Eor--experimental. -
A remote phone that publishes both
MediaPlayer1.ObexPortandTrack.ImgHandle.
Without mpris-proxy, the system does not expose an
org.mpris.MediaPlayer2 desktop proxy or mpris:artUrl. The Flutter
application does not require either one because CoverArtService downloads the
image directly.
Next Week Plan#
-
Continue working on
flutter-ics-homescreenchange 31887. -
Compare BlueZ's direct
Connectoperation with manually handling thePair→Trust→Connectsequence, then determine which approach handles the initial connection and AVRCP setup more reliably.
Links#
-
Gerrit review:
flutter-ics-homescreenchange 31887 -
Source code:
bluez_media_native