Sunday, February 25, 2018

3.0 Work in Progress 16: Navigation Menu

For this WIP update I am going to show off the side navigation menu.  I set it up similarly to GMMP 2.x, but behind the scenes it will be customizable.  The only fixed menu options will be library, settings, and exit.  The rest will be able to be customized.  The same goes with the library view.  The tabs shown there will be able to be chosen.  All this customization wont come until a later alpha build but it is planned.

I am not exactly sure what I am going to put up in the top yellow region yet, so i left it blank for now.  To control navigation in general, I am using this nice library called simple-stack.  It handles the backstack instead of the build in android one (which has a lot of issues that I will not go into).  The backstack is basically the list of views you have navigated to, so you can backtrack to the previous view when you hit the back button.  Below is a video of the navigation menu and the other navigation actions (like viewing an artist/genre/album details).  Animations were disabled for the video.  I need to do a bit of restructuring since this allows me to jump to any view at any time.

Also in the past week I implemented context menu actions and the multi select actions (images below).  Right now those actions are just play, play next, and enqueue, but I will bring back all the actions from 2.x.  One nice additional will be the ability to multi select and delete or add to playlist from the folder browser.  All the rework I have done will allow you to multi select files, folders, playlists, and cue files all together.

I changed the play next and enqueue icons.  Not sure if these will stay or if i will return to the old icons.

Next on the TODO list is updating the UI for landscape support.  The majority of the UIs will look the same but some of them like Now Playing will have its own layout.  The plan is to have most of the customizable metadata to be orientation specific meaning that the metadata shown on now playing and the other lists can be changed depending on whether you are in landscape or portrait mode. 

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). 

Wednesday, February 7, 2018

3.0 Work in Progress 14: Equalizer and Effects UI

Before I get into the new UIs, I want to mention some of the behind the scenes work that has been done since the WIP update.  I mentioned in the last blog post that I completely rewrote the DSP / Effects backend (everything besides whats in the audioengine).  Since then I also ended up replacing the theme engine with a library called Aesthetic.  It was pretty similar to the custom theme engine I had written before, but I felt it was better written and had other users maintaining it which is always a plus.  It also was backed by RxJava2 which is something I've been using throughout the 3.0 rewrite and it makes changing theme colors on the fly much easier than my custom theme engine.  I did a massive cleanup and restructuring of the gmmp project.  I removed all the legacy code that has been rewritten and have split up the project into 4 main modules (this is done for much faster compile times): common, data, playback, ui/main.

When I look at the breakdown of languages used on my gitlab we see these numbers

Java 67.93 %
Kotlin 31.72 %
RenderScript 0.35 %

So despite all the stuff I have rewritten, about 2/3rd of the non audioengine code has still not been touched (all the 3.0 work was done in kotlin).  I dont have any plans to rewrite everything but it just shows how large the project has become over the last 7 years

I decided to split the equalizer into its own view and have the other effects on a separate tab.  I did get a lot of complaints about having to go through a lot of steps just to get to the equalizer.  It is much more accessible now.  Also on the effects UI, I added switches for each effect and sliders for anything that can be adjusted.  Previously some things like bass boost strength, and limiter attack/release were hidden away in the preferences.

I still have a bit of testing to do to make sure all the effects actually are being applied correctly, but from the UI standpoint things are pretty much where i want them to be.

Next up will be the playlist file UI which should be pretty straight forward