For a large portion of the time since the last post, I worked on redesigning the data access portion of GMMP which doesnt really have much to show off visually but I will briefly talk about it. In the first WIP post I talked about the complex metadata view customization 3.0 will provide. Now playing and all the metadata lists let you customize how they will look and what metadata they will display. This was working pretty well for the layouts i had set up for demo purposes, but there was a problem of being able to get all the necessary data in order to populate the metadata views. I had a bunch of hard coded database queries that were good enough to get some screenshots, but would not completely if i would add a lot of other fields to show. An example would be in the track list I believe it previously only showed the trackname and time. What if i wanted to also show the artist? Well previously i would have had to either make the track query more complex by joining with the artist table or add separate query that did the track/artist join. The problem with the first option is this would make every track query take longer regardless if the user wanted to show the artist or not. The problem with the second option is this would require thousand of custom queries to get every possibly combination of metadata for the view. Neither were acceptable to me so I decided to rework how data was being accessed.
My new solution was to design a database query builder. It basically contains a few public methods so i can specify what type of query to do (track list query, artist list query, album list, etc). I then specify what metadata fields are wanted, along with any conditions (like artist = so and so) and it will return the query to use against the database. In most cases the metadata fields are generated automatically by scanning the metadata lines and the sort order selected. So what does this all mean? If your track list metadata line is something like "%ar% - %tn%" and the sort order is by album, the generated query will retrieve only the artist, trackname, and album. This should lead to the best performance possible and the least amount of memory being used.
Add To Playlist
I readded Add To Playlist and it is mostly the same as it was in 2.x. Behind the scenes its much better but UI wise it works the same.
More Now Playing Actions
I added volume control, stop after current, sleep timer, and the share option. The sleep timer also now has an option to wait until the end of the playing song before pausing.
Drag and Drop Improvements
When I initially did the drag and drop, I couldn't find a way to use anything but the default behavior which was to long press to start the drag. After some more research I did eventually find a way to add "handle" to start the drag and drop. This is much more usable in certain situations like in the car. To turn this behavior on, I added 2 new view modes to the view mode menu. Handle and Card Handle
For whatever reason youtube would not let me upload the drag and drop video i created, so Im using the blogger video capability instead.
The preference UI is the only remaining UI task still need to be done before i can release alpha 1, the rest is basically just restoring the remaining music service capabilities that I had took out when starting with 3.0