So after having put together a simple react/material-ui app for my kid (a music-playing tooth-brushing timer!), I opted to stage together a brand new Progressive Web App player in the same framework.
It is currently in a very rough preview mode. I'm aware of how much of a pain it is to enter the login details.
Load it up in Chrome for Android and then "Add To Home Page" for an icon that launches it full-screen. No service worker yet (haven't found a need for one). It won't look terribly good in landscape mode and I'm not likely to do much about that, because SubFire 2 will be optimized for landscape TVs, Tablets, and desktop browsers.
Currently it only plays playlists, and for the "radio" page, it uses the cached playlist generated at SubFire Radio - it doesn't yet regenerate on the fly. The Player page needs a bit of work in layout and color (it doesn't do the background-changing I like in SubFire 1), but functionally works. Play/Pause, next/prev, shuffle.
After it is stable and complete, I may explore other packagings like electron, a chrome extension launcher (no more new Chrome apps), or using phonegap to make an apk. But in my experience, just having it be a PWA in Chrome is more than functional enough for a typical Android phone.
It mostly will work the way I want in Samsung's browser for Android 6. Firefox won't get the right icon (not yet sure why), nor will it support the fullscreen manifest setting (and I've no idea when they'll support it - even Aurora still isn't there yet).
Features to come:
- Radio on-the-fly generation
- Album query grid with "infinite scrolling"
- Artist/Album ID3 browsing
- General folder browsing
- Player layout and color
- A "night mode" that reduces the brightness of the colors and album cover
- Play skip to next album
- Loading spinners and error dialogs
- Continue saved play queue
- Subsonic 6.1 improved bookmarks
- https hosting (it will, like SubFire 1, have difficulties in handling self-signed certs - I am constrained by the browser).
- Chromecast serving
- The new Media Session API