Android Auto: Menu Structure Update and Playback Enhancement Proposal
Introduction
This is a proposal to redesign the Android Auto User interface for VLC. The primary motivation for this effort is to make navigation easier for motorists, add often requested features, and align the Android Auto interface with the App and TV GUIs to the greatest extent possible. With the unexpected and sudden announcement that Google Play Music is being withdrawn and replaced by YouTube Music, it is an opportune moment to invest in VLC in order to support the open-source community.
This proposal is grouped into two major areas, with a small list of known issues:
New Features and Enhancements
- Added display elements to show current playlist position, total queue size, artist, and album name. This is visible during playback, within top overlay notifications, and in the bottom bar when using Maps and changing songs. Navigation by track number is possible when the current track and total number of tracks in the playlist are known to the driver. The value would only be displayed for playlists longer than a single track (e.g. 1/1 is not shown)
-
Sliding window to keep the current track visible within the queue. This allows a user to display the queue on-screen and navigate through the entries with their steering wheel rocker switch without “falling off the end of the queue”. Android auto disables viewing more than the first 20 elements in the queue when the vehicle is “in motion”, which is quite inconvenient for a typical playlist greater than one album in size. (Note: this limitation be enabled in the desktop-head-unit by issuing the command 'restrict all' and disabled by issuing 'restrict none' on the CLI)
- The API documentation for MediaSessionCompat.setQueue states the following: “The queue should be of reasonable size. If the play queue is unbounded within your app, it is better to send a reasonable amount in a sliding window instead.” This turns out to be a very useful suggestion to resolve the playlist limitation issue. After constructing the queue, we can set a small sub list of the overall queue during updateState(). As the user advances forward and backward in the playlist, 15 elements will always be visible in the queue.
- For automatic transmissions “motion” is defined as moving the gear shift lever out of Park. For manual transmission vehicles, this appears to be defined as un-setting the parking brake.
- Bluetooth headunits which report track number use the current position in the queue instead of the media metadata (when current queue position is defined). This results in inconsistent information when the sliding window is used. We can selectively enable the sliding window only if Android Auto is active in order to enhance compatibility with users that use VLC with a Bluetooth head unit directly.
- The API documentation for MediaSessionCompat.setQueue states the following: “The queue should be of reasonable size. If the play queue is unbounded within your app, it is better to send a reasonable amount in a sliding window instead.” This turns out to be a very useful suggestion to resolve the playlist limitation issue. After constructing the queue, we can set a small sub list of the overall queue during updateState(). As the user advances forward and backward in the playlist, 15 elements will always be visible in the queue.
-
Add Playlist thumbnails which appear the same as in-app, with four cover art images composed together.
- Thumbnails are currently being processed on the worker thread and passed back as a Bitmap. While this works, it does introduce a slight navigation delay on the first visit. The images are added into a cache, so any subsequent navigation is quick. The preferred approach is to process the images, write them to a file, and pass an IconUri in the API. This facility appears to exist for video thumbnails at present, but not for audio playlist thumbnails.
- Use of both List and Grid layouts, driven by the same parameters used in the app. For example, if the user chooses to view Artists as a grid in the app, it will show as a grid in Android Auto. This applies to Artists, Albums, Tracks, and Playlists. Genres and Streams are always shown as a list.
-
Subtitles are used to show additional metadata, and are fully internationalized based on locale settings.
- Artists show number of tracks
- Albums show Artist name
- Tracks show “Artist – Album”
- Genres shows the number of albums per genre
- Playlists show the number of tracks
- Streams show the URL
-
Selection of an Artist constructs a queue from all the tracks from that artist. It no longer advances from artist to album selection.
-
Addition of an error handler in PlaybackService, with fully internationalized messages, to avoid the infinite loading spinner.
-
Potential elimination of "Last Added" menu item. Unclear value given the other navigation options.
Menu Structure Alternatives
-
Assume a design objective to limit the number of menu items to no greater than 4. This eliminates the need for the user to scroll through menus. This aligns VLC with other popular media players.
-
Proposed Root Menu (3-4 items. See Known Issue 1. Relocates "Shuffle All" to Playlists)
- Audio
- Artist
- Album
- Tracks
- Genres
- Playlists
- Shuffle All is added as a “Special” Playlist
- Streams
- History (if enabled)
See Shuffle All playlist screenshot in Playlist Thumbnails section above.
- Alternative 1 (4-5 items – Exceeds design objective. Retains Shuffle All on root menu.)
- Audio
- Artist
- Album
- Tracks
- Genres
- Playlists
- Streams
- History (if enabled)
- Shuffle All
- Alternative 2 – Root menu contains 4-6 items. Add a “More” page if History is enabled
History Disabled (4 items total)
- Audio
- Artist
- Album
- Tracks
- Genres
- Playlists
- Streams
- Shuffle All
History Enabled (4+2 items total, with “More” inserted into root. )
- Audio
- Artist
- Album
- Tracks
- Genres
- Playlists
- Streams
- More...
- History
- Shuffle All
Known Issues
- (Android Auto Layout Issue) Rendering PLAYABLE and BROWSABLE elements in the same menu results in icons and row heights of differing sizes. This can be addressed with carefully sized icons and row placement. Another potential solution is to avoid mixing the two types of items together on the same menu entirely (See Proposed Root Menu).
- (Android Auto Defect) There is a navigation bug where the root level menu is scrolled to the 2nd page of the view, even if there are only 2 media items. To recreate this bug, select a song for playback. Go to the playback controls and open the queue. Scroll the queue up or down a page. Repeatedly click the back arrow until the top-level menu is reached. You will observe the top-level menu is scrolled to the 2nd page.
- (VLC Bug) Selecting “Shuffle All” when the currently loaded playlist is non-shuffleable will result in all the tracks being loaded into the queue, but the shuffle feature will not be enabled. If you select “Shuffle All” while playing a shuffleable playlist, it will properly enable the shuffle feature.