IRC nick: amCap1712
I am a former Google Code-In participant. I was selected as a finalist by MetaBrainz in Google Code-In 2017.
Background and Overview
MusicBrainz for Android was first created in 2010-11 as a part of GSoC. Since 2015, no updates have been made to the project. The app is currently broken as the it does not adhere to android ecosystem. I feel a mobile app is a necessity for an organization like MusicBrainz. A mobile app will help increase user engagement and open up MusicBrainz to a plethora of new users.
Here is tentative list of tasks, I intend to undertake. I have also mentioned an estimate of the time required to do each of them.
Step 1: Migrating the existing codebase
The existing MusicBrainz app provides the facility to search for an artist/release in the database, to view collections if a user is authenticated and donate money to MetaBrainz foundation via PayPal. Sadly, many of these features are broken as the app is outdated.The first task will be to re-work the app so that the all features currently offered work again.
- Currently, the project uses Maven as build automation tool. But Android has long moved to Gradle. All dev tools are only compatible with Gradle. So the first task is to port the project to Gradle. Android support libraries have now now migrated to AndroidX, our app will also do so.
The external dependencies of the app are Novoda ImageLoader, ViewPagerIndicator, Apache HttpComponents & Paypal. All of these need to be replaced due to one-another reason.
- Novoda ImageLoader is no longer in development. It will replace with Glide.
- Apache HttpComponents is obsolete and all its functionalities are offered by native OS APIs. The current networking API will be modified to use native OS support instead of this library.
- Same goes for ViewPagerIndicator, a GUI library which be replace by Android Arch Components.
- Paypal Android SDK (infact all Paypal libraries) are now deprecated. The recommended replacement is BrainTree but it requires to configure a custom server in conjunction with the app. For the time being, existing Paypal integration will be removed(currently it is not in working state) and the Donate page will redirect to MetaBrainz Website.
By this time, I believe I will have used up one and a half week.
- With Android 23, the permissions API underwent a major change. To become compatible with newer Android versions (Marshallow and ahead), the way the app handles permissions needs to be changed.
- Coming to the Login feature, I intend to add OAuth2 functionality. The exact implementation and service providers are yet to be discussed with MusicBrainz developers.
Another week will be required to finish the above two tasks.
With this Step 1 is over, we now have an app which on the outside resembles the existing version but possesses a remarkable different and cleaner core.
Step 2: Adding new features (Backend)
Now that our app is working, we will add new features to it except Tagging facility. This will be done in 2 steps. In the first one, we will add backend code for them and in the second one, the necessary GUI will be added.
The app uses a custom java api to access MusicBrainz database. Currently, the app only searches for artists/releases and not other entities available in the website search dialog. So the api needs to be extended to access the entire database. Also the parser will be migrated from XML to JSON. The current API is not optimal for mobile usage. I will attempt to reduce bandwidth usage and number of request.
Background tasks and Network request are currently handled with Async Tasks and Loaders but Loaders were deprecated the last year. To become, future-proof I will attempt to replace Loaders with Android Architecture Components. Therefore, the entire way concurrency is handled by the app will be modified. This will improve performance and stability.
With this, I will exhaust another two weeks of GSoC.
- I will add support for international languages in the app. As suggested I will use Transifex for translations. I intend to provide support for all languages currently supported by MusicBrainz.
This will require a week or so.
Step 3: Add new features (Frontend)
We improved the framework of the back. Now, its time to repaint the app. The GUI of the app will be reworked to match the current MusicBrainz theme. Extra buttons and screens where ever needed will be added. I will prepare GUI mock ups beforehand for getting feedback from the community.
GUI mockups to be added soon.
We thus come to end of another week.
Step 4: Adding the tagging facility
Till now, we have done some minor upgrades to the app’s usability and brought substantial changes to its interface. Now its time do a major upgrade. Finally, we implement a basic Picard for our app. (Yay!! I’m really excited.)
Details of implementation to be added
I believe this is a time intensive feature and will require around a month to be finished.
Step 5: Wrapping Up
Its time to wind up the work of 2 months. The app will be tested intensively by the community and bug fixes will be made. I will be documenting the code side by side but the main documentation process will be during this period. A couple of other small tasks will be completed.
I estimate another one and half week to pass by.
Step 6: Stretch Goals (Optional)
Until now, all the listed tasks were a necessity, now we come to those ones which will be completed only if time permits.
- I intend to create an Google assistant action for the app. With this, we can directly access the app’s features using Google Assistant.
This is a draft only. Mock Ups of the UI and flowcharts will be included soon. Also the list of tasks will be modified as needed.
Tentative Weekly Schedule
An estimated schedule is provided alongside the detailed description of the tasks to be undertaken. Here I provide, a summary of it.
- Week 1-2: Migrate to Gradle build system and AndroidX. Replace dependencies with native OS libraries.
- Week 2-3: Update Permissions API and add OAuth 2.0 .
- Week 3-5: Extend Network API and handle concurrency.
- Week 5-6: Add additional languages support.
- Week 7: Implement new GUI.
- Week 8-12: Add tagging facility.
- Week 13: Bug fixes and minor improvements.
I intend to begin coding right from start of community bonding period.
Detailed information about yourself
Tell us about the computer(s) you have available for working on your SoC project!
I have a HP laptop with 8GB RAM, 1TB Hard disk and 2GB graphics card. The main tool required for the task is Android Studio which runs smoothly on this system.
When did you first start programming?
I started programming when I was in Grade VI as a part of school curriculum.
What aspects of the project you’re applying for (e.g., MusicBrainz, AcousticBrainz, etc.) interest you the most?
The prospects of cleaning up my entire music library on my mobile automatically sounds just great. Also I prefer mobile apps to websites, so I am making work easier for me with project.
Have you ever used MusicBrainz to tag your files?
Yes, I use it regularly say on a weekly basis or so.
Have you contributed to other Open Source projects? If so, which projects and can we see some of your code?
I have contributed to a couple of other open source projects which can be seen at my Github Profile. I have been the co-moderator of an app built to raise awareness on women safety.
What sorts of programming projects have you done on your own time?
I have done many programming projects. Many of them are personal ones. I usually do Android projects but I have worked on a few python projects as well. The apps I have built include a news app, a notice delivery app for my school and some fun personal projects.
How much time do you have available, and how would you plan to use it?
I will be working full time on this project in GSoC.
Do you plan to have a job or study during the summer in conjunction with Summer of Code?
No except for the last fortnight, I don’t have any such plans. In the last fortnight, I will attend orientation classes at my college.
I have begun preliminary work on the app. The test version of the app is accessible at https://play.google.com/apps/testing/org.metabrainz.android . A changelog for the same is available at MusicBrainz for Android Changelog .