Android last.fm WAIL Beta scrobbler is now Open Source

    Hey. About six months ago, I washed down the Android app for scrobbling being played in different music players in last.fm .

    For several months now I don’t have time to develop this project, so I decided to open its sources ( repository on github ).

    I am writing this post on Habr with little hope that there are people here who would be interested in developing WAIL further, adding new features, fixing bugs and just participating in the open source project of the Android application :)

    Briefly about last.fm: this is a service for fans to listen to music, the main feature of which is that you can transmit information about the tracks that you listen to, and last.fm based on this will offer you other artists, friends, concerts of the artists you listen to (by the way awesome, the first time I went to a concert precisely on the recommendation of last.fm).

    Screenshots to maintain interest




    Briefly about WAIL features :
    • Interception of events (Broadcast of intents) about playing music from various players and scrobbling this information in last.fm
    • #Nowplaying update on last.fm
    • Offline work (when access to the network appears - WAIL will send information to last.fm)
    • Minimalistic UI in Holo style (although it looks good on Android L too)
    • The ability to sound notifications about scrobbling a track or skipping a track (if under various conditions the track is ignored by the application)
    • List of processed tracks
    • And the little things :)


    Some more screenshots:





    Now about the application architecture for those who are interested in digging inside



    • WAIL - What am I listening
    • 1) The main part of WAIL - BroadCastReceviers, which catch intents from music applications
    • 2) The second main part of WAIL - WAILService , to which information about the tracks is transmitted, it already decides what to do with them - scribble, update #nowplaying, etc.
    • 3) Internal SQLite database, in particular TracksDBHelper , here WAIL records processed tracks, accordingly, this database allows you to work offline. WAILService periodically scans this information and sends it to last.fm
    • 4) Well, actually UI: Everything is built on fragments, there is support for typesetting for tablets


    What's the priority by features



    • RemoteControllerClient support is an API for media players, much better than processing intents since there is at least some standard on it. By the way, your lock screen uses this particular API to display and control the music being played. I have some developments in this area, but everything is complicated by the almost complete lack of documentation from Google on this topic. The essence of RemoteControllerClient support is that WAIL will automatically be able to process ALL music players that use this API
    • Displaying the current track being processed on the main screen - many users do not understand whether WAIL is currently processing a track or not ... In general, the feature is necessary and useful
    • Displaying notifications about scrobbling, updating #nowplaying in the status bar
    • Settings for disabling scrobbling depending on the type of network connection (mobile networks / wifi)
    • Feel free to submit your wishes in issues on github


    Who might be interested in digging into WAIL


    • Experienced Android developers who want to show their skills in an Open Source project :)
    • Novice Android developers, whom I suggest making small fixes / features and slowly master Android development in real practice with access to real users on Google Play
    • Those WAIL users who are also Android or Java developers and want to change something in the application :)


    If you decide to help WAIL


    1) Firstly, many thanks, both from me and from users :)

    2) Secondly, I wrote a small wiki on the topic of style guides on commits, on git flow and style guides on the source and resources of the project , please read it , it's short.

    3) Thirdly - yes, successfully generated pull requests from you will go to Google Play!

    4) I will be the project maintainer, periodically checking the pull requests, I will help the project as a developer, when there is time. Releases on Google Play will be done as the project develops, I would like to make frequent releases in order to quickly receive feedback from users and build plans for the next releases

    5) If you want to start with an easy one, come up with a small issue, for example, fixing an icon or translating into a language you understand, get an issue on the github, then do a pull request with a fix / features and that’s all :)

    Thank you all for your attention, I hope WAIL will develop and live on :)

    Link to WAIL Beta github - Android last.fm scrobbler

    PS
    If you look at github, you will see that there are very few commits. This is due to the fact that in the private repository there were keys with passwords with which I sign applications (file, I agree), I decided not to trust git filter-branch and bfg and just created a new repository by transferring the sources and removing private data, about ~ 250 commits lost.
    In addition, the keys to last.fm api are published in the app, but on the github. But damn, decompiling the Android application and getting all this data is not at all difficult, and complicating the development of other people by the fact that they will have to register at last.fm in the developers section, I would not want to receive keys, please do not use them for bad intentions :) The

    post is not in “I PR” due to the fact that: 1) The project is open-sorts 2) It is absolutely non-commercial, made with a soul for those who benefit from the application 3) If the Habra moderators consider that the post should be moved to “I PR "- approx

    PPS
    Of course, the code is not perfect ... Now I would re Isale half, but in general, the architecture is flexible and extensible :)

    Ready to answer questions in the comments to this article.

    Also popular now: