Friday, September 22, 2017

3.0 Work in Progress 8: Queue

Its been awhile since I've posted a new update but I spent a few weeks working on 2.2.4/2.2.5 and now I am back working on 3.0.  This next update focuses on the queue.  Its not finished but it is working enough that I can show it off.

The queue involved a bunch more work than the previous views since I had to rewrite the actual backing queue data structure.  Previously the Queue class would retain its own copy of the tracks and it was in charge of persisting all changes into the database.  This time around I made it much simpler by just keeping everything straight in the database, so the queue and db no longer have to stay in sync.

The queue features drag and drop like the previous version of gmmp, however it is done a bit differently (at least for now pending feedback).  Instead of having the "handle" on the left on each list item that you press to start dragging, dragging is now started via a long press.  The reasoning behind the behavior.. honestly.. is the drag and drop helper class that google provides works this way https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.html .  I didnt see any reason to reinvent the wheel.  Also deleting can be done via swiping left.


Due to the swipe left to delete, I have chosen to not make the Queue available to be placed as one of the library tabs.  However, the queue will be accessible straight from now playing via the FAB (this is shown in the video), and via the side navigation drawer.  I originally had the queue in as a tab and it was too unreliable trying to delete.  Half the time it would just scroll over to the next tab.

Just like all the other views, the metadata displayed in the queue will be customizable.  I also improved the metadata views quite a bit by adding the ability to define how much space each "slot/alignment" takes up (see WIP 1 for details).   This allows for something like the image above.  The song title and artist will take up 80% of the view and the track duration only takes up 20%.  Below is the code that represents the queue list item:

 var metadataLinesModel = MetadataLinesModel(GMThemeEngine.getInstance(context).currentTheme).apply {  
       addMetadataLine(arrayOf("<weight=0.8><align=left><typeface=sans-serif><size=16>%ps%. %tr%", "<weight=0.2><align=right><typeface=sans-serif><size=16>%du%" ))  
       addMetadataLine("<color=2><align=left><typeface=sans-serif><size=14>%ar%")  
     }  


Here is the video of the queue in action