Sunday, February 18, 2018

3.0 Work in Progress 15: Playlists View

Here is a look at the new playlists UI.  Like most of the other views it has some sort options (playlist list only so far.. not when editing the actual playlist) and the ability to be a regular list or a card list.  Also notice in the screen shot below how I threw all the views together as tabs.  The default UI will only contain the library type views as tabs but I designed things in a way where its only a single line of code to just throw whatever view in as a tab.  Also note in these screenshots and the video the album art in the mini player is a bit messed up.  I'll work that out before the first alpha release. 

The context menu right how has the standard play, play next, and enqueue.  At some point I will add an edit option as well (which would allow an option to play the playlist on item selection instead of having to use the context menu)

When selecting a playlist it will open up the edit view which supports the drag and drop like the queue.  Right now its still press and hold to drag items around but there will also be an option to add a handle instead (similar to 2.x).

The playlist will auto save when backing out of the edit view, but I would like to make this optional down the line.  With auto save off there would be a manual save and revert menu option.  One of the reasons I have been hesitant on adding sorting options when viewing the playlist contents is specifically because of the auto save.  I felt that users would be annoyed if they went to sort their playlist to help look for a song, only to find they completely lost their song order.

One minute addition I made is the ability to save wpl playlists.  In 2.x when a user would edit a wpl playlist, it would be replaced with an m3u.  Now it will just modify the original wpl file.

Finally here is a video of the playlist ui.

The playlist UI only took a day or 2 to finish, so I've already started on the next task of implementing all the remaining context menus and list item press actions (I had previously only done a few for demo purposes).  I have also been leveraging RxJava2 to move almost all the actual work for the UI (like grabbing all the songs of an album from the database before playing) off of the UI thread (which would help with responsiveness and prevent freezes).