Coder Social home page Coder Social logo

tomahawk-android's Introduction

tomahawk-android

Music is everywhere, now you don’t have to be!

Tomahawk, the critically acclaimed multi-source music player, is now available on Android. Given the name of an artist, album or song Tomahawk will find the best available source and play it - whether that be from Spotify, Deezer, GMusic, Soundcloud, Tidal, Official.fm, Jamendo, Beets, Ampache, Subsonic or your phone’s local storage. Tomahawk for Android also syncs your history, your loved tracks, artists, albums and your playlists to/from the desktop version of Tomahawk via our new music community, Hatchet. On Hatchet you can hear your friends' favorite tracks and see what they're currently listening to.

Tomahawk Screenshot1 Tomahawk Screenshot2 Tomahawk Screenshot3

Beta and Nightly

Get the Beta version on Google Play: https://play.google.com/store/apps/details?id=org.tomahawk.tomahawk_android

Nightly builds are available here: http://download.tomahawk-player.org/nightly/android/?C=M;O=D

Development Setup

First of all you have to properly setup your Android SDK/NDK:

  • Download and install the Android SDK http://developer.android.com/sdk/index.html
    • Make sure you have updated and installed the following in your Android SDK Manager:
      • "/Tools"
      • the latest Android SDK Platform folder (e.g. "/Android 6.0 (API 23)")
      • "/Extras/Android Support Repository" and "/Extras/Android Support Library"
      • "/Extras/Google Play Services" and "/Extras/Google Repository"

Build it on the commandline with gradle:

  • Simply run "./gradlew assembleDebug" for the debug build or "./gradlew assembleRelease" for the release build in your tomahawk-android checkout directory. The built apk will be put into "tomahawk-android/build/outputs/apk"

Setup using Android Studio and gradle (highly recommended):

  • Open Android Studio and go to "File"->"Import Project"
  • Browse to your tomahawk-android checkout and click "OK".
  • Make sure that the radio-button "Use default gradle wrapper (recommended)" is selected.
  • Click "next" and that's it :) tomahawk-android should compile right away

Setup using other IDEs without gradle:

  • Import tomahawk-android into the IDE of your choice
  • tomahawk-android depends on several 3rd party libraries. You can look up a list of all dependencies in ./app/build.gradle under dependencies{...}
  • Make sure you setup the support libraries correctly (http://developer.android.com/tools/support-library/setup.html)
  • Add all dependencies to your tomahawk-android project
  • tomahawk-android should now compile successfully.

If you have any further problems, feel free to join the #tomahawk.mobile irc channel on irc.freenode.org

Ready to contribute?

Drop us an e-mail at [email protected] or join our IRC Channel #tomahawk.mobile on irc.freenode.org

Code Style Guidelines for Contributors

In order to keep everything clean and cozy, please use the official Android code style format preset:

For a larger overview you should read the official Android "Code Style Guidelines for Contributors":

Plugin Apps Source Code

Spotify Plugin App
Deezer Plugin App

tomahawk-android's People

Contributors

avinash-bhat avatar creichert avatar dschmidt avatar hugolm84 avatar jherskowitz avatar kageiit avatar lalitmaganti avatar mrmaffen avatar muesli avatar safaalfulaij avatar theli-ua avatar wisdomwolf avatar zopieux avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tomahawk-android's Issues

Queue keeps reloading

I play a long list (Favorites). It plays a few songs, then reloads the queue and restarts from the beginning. This may be the same issue I saw with albums. Maybe related to network connectivity?

Support prev/next track through sys API

When using a connected Bluetooth device like a car entertainment system I cannot control previous/next track in tomahawk. This also applies for screen gestures on my OnePlus 2.
Albeit play/pause works as expected in both scenarios.

Repeating tracks when playing a Collected Album

When I play an album I collected, it (sometimes?) plays a couple of songs and then starts the album from the beginning again. So it repeats the first couple of songs but then seems to recover.

Cannot add Google Play Music Family

Hi,

I have a Google Play Music All Access through Family account, but when I try to enable it, the menu that pops to choose an account is empty.
screenshot_20160326-012142

Here's my account type.
screenshot_20160326-012243

Previously, I had my normal All Access account connected but now it doesn't work. I tried deleting app data and reinstalling, but still nothing.

Can't return to favorites station

open favorites, start favorites station, let track start playing from station, tap one of the favorites track, let it start playing, press station button again to try and start favorites station again .... nothing happens

Tomahawk not playing files opened with filebrowser

Using ES File Explorer (pro) to open an mp3 file and choosing Tomahawk for playback will start (or maximize) Tomahawk, but not actually load or play the file.
Choosing one of the other players (Play Music for example) works fine (not a permission issue).

Playing the file from within Tomawak works (not a file issue) :/

HTC one M8
Android 6.0 (H11)

Ampache Collection not displayed

I use the ownCloud (8.2.2) music app (lastest) with ampache support activated along with a tomahawk nightly build (0.951_armv7a). The connection is https with a letsencrypt certificate.
I can log in just fine and also it seems as if the query for the collection xml is returned from ampache.
In my owncloud logs i see two call which both return as 200. One for the action 'handshake' and another for action 'songs'. I replayed the later request in browser and it showed me an xml holding all the music information expected.
But in the app nothing shows. The circle right beside the ampache menu point does rotate forever.

adb logcat | grep ampache shows the following:

D/ScriptInterface(19950): log: ampache: registerPlugin: resolver id: 0
D/ScriptInterface(19950): log: ampache: New auth token: odfjeg98vjremovedc865dd9
D/ScriptInterface(19950): log: ampache: Ampache Resolver properly initialised!
D/CollectionDb(19950): Constructed CollectionDb 'ampache_collection.db' with version 5, objectId: 504854388
D/ScriptResolver(19950): ScriptResolver ampache initialized successfully.
D/ScriptInterface(19950): log: ampache: Collection database has been changed. Wiping and re-fetching...
D/ScriptInterface(19950): log: ampache: Checking if collection needs to be updated
D/ScriptInterface(19950): log: ampache: registerPlugin: collection id: 1
D/ScriptInterface(19950): log: ampache: Collection needs to be updated
D/DbCollection(19950): ampache - Fuzzy index initialized. Resolving all waiting queries.

logcat without grep shows an exception. Though i do not know if this is related:

D/ScriptInterface(20689): log: ampache: Collection needs to be updated
W/System.err(20689): com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Invalid double: ""
W/System.err(20689):    at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:249)
W/System.err(20689):    at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:239)
W/System.err(20689):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:117)
W/System.err(20689):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:217)
W/System.err(20689):    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
W/System.err(20689):    at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
W/System.err(20689):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:117)
W/System.err(20689):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:217)
W/System.err(20689):    at com.google.gson.Gson.fromJson(Gson.java:861)
W/System.err(20689):    at com.google.gson.Gson.fromJson(Gson.java:826)
W/System.err(20689):    at com.google.gson.Gson.fromJson(Gson.java:775)
W/System.err(20689):    at com.google.gson.Gson.fromJson(Gson.java:747)
W/System.err(20689):    at org.tomahawk.libtomahawk.resolver.ScriptInterface.invokeNativeScriptJob(ScriptInterface.java:284)
W/System.err(20689):    at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
W/System.err(20689):    at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53)
W/System.err(20689):    at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(20689):    at android.os.Looper.loop(Looper.java:135)
W/System.err(20689):    at android.os.HandlerThread.run(HandlerThread.java:61)
W/System.err(20689): Caused by: java.lang.NumberFormatException: Invalid double: ""
W/System.err(20689):    at java.lang.StringToReal.invalidReal(StringToReal.java:63)
W/System.err(20689):    at java.lang.StringToReal.parseDouble(StringToReal.java:267)
W/System.err(20689):    at java.lang.Double.parseDouble(Double.java:301)
W/System.err(20689):    at com.google.gson.stream.JsonReader.nextInt(JsonReader.java:1205)
W/System.err(20689):    at com.google.gson.internal.bind.TypeAdapters$7.read(TypeAdapters.java:247)
W/System.err(20689):    ... 17 more
D/FuzzyIndex(20689): create - recreate:true
D/FuzzyIndex(20689): beginIndexing - recreate: true
D/FuzzyIndex(20689): endIndexing
D/TomahawkWebChromeClient(20689): Ampache - Uncaught error:{} -- From line 52 of file:///android_asset/js/tomahawk.js
D/FuzzyIndex(20689): Adding tracks to index - count: 0
D/FuzzyIndex(20689): endIndexing
D/FuzzyIndex(20689): updateSearcherManager

Make it possible to prioritize resolvers

my thinking was to have a list of all resolvers that you can edit
where you can switch around items by dragging them
and the order would then be the priority for each resolver

Incorrect grouping of songs in albums

When viewing an album, it incorrectly includes songs from multiple artists because there are multiple artists with different albums which happen to have the same album name.

This is occurring using local music on my Android device.

The specific example is the Album 'No Control' by Bad Religion, the tags for the files in the album are:
Artist: "Bad Religion"
Album artist: (empty)
Album: "No Control"
Year: 1989
Genre: "Alternative & Punk"

However, I have a single song from another artist with album name of 'No Control' which is also getting inserted into this album in the Android app:
Artist: "Pinboys"
Album artist: "Peter Criss"
Album: "No Control"
Year: 2000
Genre: "Miscellaneous"

I suspect that the album artist tag is not being treated correctly - I would expect that if the album artist is not specified, then only songs with the same artist and empty album artist are grouped together eg.

Eg.
All songs with the same album name / album artist / year form an album.
If album artist is empty, then all songs with the same album name / artist / year form an album.

Cache Remote Music

Hey,

does tomahawk-android support caching of a remote music collection (e.g. when i play the music => save it to local collection or in a cache file)?
Im using it with ampache.

If not, would you like that feature to be added?

Use initial query when passing to resolvers

eg Query starts with "Vildhjarta - Traces", gets resolved by YT to "Vildhjarta Traces [HQ/HD]" and is passed like that to following resolver which cant resolve because of that

Doesn't seem to work with ownCloud/Ampache

Well, I know this is for a beta client connecting to a beta service, but here goes anyway. I've got ownCloud running with its Ampache support, and the Android Tomahawk app doesn't seem to work correctly with it. It seems to log in correctly, all albums/songs are displayed correctly, but trying to play any song just shows the animated line on the top for a few seconds, then goes to the next song, until there aren't any songs left. I've successfully used this server with the "Just Player" Android app and Tomahawk on Windows. Is there some way to collect additional data to see if I can figure out where the problem lies?

BlurTransformation getting failed because of missing library files

Running the code on Moto E crashes the application when BlurTransformation is used to set blurred image to the ImageView.

E/RenderScript_jni﹕ Error loading RS jni library: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.tomahawk.tomahawk_android-2/base.apk"],nativeLibraryDirectories=[/data/app/org.tomahawk.tomahawk_android-2/lib/arm, /vendor/lib, /system/lib]]] couldn't find "librsjni.so"

Queue restarts

When I play my favorites (~450 tracks) and enable shuffle
It plays several (~5) tracks .... and then just starts over

No way to play all music from an artist

I have had no luck playing music from tomahawk beyond tapping a track from top hits.

Just reinstalled app, and here is me documenting my journey trying to play all music from a specific artist:

  1. I go through login flow, and link Spotify. This flow is clean and clear.
  2. Just before leaving for work I decide I want to listen to some random 'blessthefall' for the trip.
  3. Finding no way to browse my spotify collection I go search for 'blessthefall'
  4. One result under artists, I tap it.
  5. No play button to be found, but I see a "+" and tap it.
  6. Popup menu still has no Play option but I find I can add it to collection, so I do that.
  7. I then go to my collection and see blessthefall under recently added, so I tap that.
  8. I am now back at the same artist screen with no way to play anything
  9. I finally settle on tapping an album 'Witness'
  10. I see another "+" so I tap that.
  11. I see "add to queue" which sounds like something in the direction of playing music, so i tap that.
  12. Tomahawk crashes
  13. I reopen, and go back to local collection, see blessthefall under artists, and tap it.
  14. I again try to add 'Witness' to queue and app crashes
  15. I conclude adding to queue is broken
  16. I repopen app, go to local collection, go to blessthefall, then add each of the 5 albums to collection
  17. I navigate back to local collection, and go to albums.
  18. Still finding no way to play music, I try adding an album to queue this time from local collection albums view. This works.
  19. I manually find/add all 5 albums to queue. (this is easy as I only have 5 albums but how would this work if I had 200? Do I have to hunt for them all manually?)
  20. Ok so the albums of the artist i want to listen to are supposedly in a queue. I still can not find any play button, or even a way to see the queue.
  21. I remember from past experience I know if I play a song from top hits (the only way I know how to play anything) I get a play status bar at the bottom.
  22. I go back to artist view and tap a track from top hits. Sure enough it starts playing and I now have a control bar at the bottom of the app.
  23. I tap the bar and now have access to repeat and shuffle buttons which i tap
  24. I now want to listen to the next track but can not find any "next" button
  25. After tapping around I discover I can drag right and do in fact get a different track.
  26. Some more random dragging around and I discover if i drag down twice I get to the well hidden queue menu which does seem to have all my tracks (and the duplicate I had to tap from top hits to get here)
  27. I then see a couple tracks I want to listen to for starters, so I tap one.
  28. I notice the entire list shuffles in front of me.
  29. I finally find the new location of second track and tap it.
  30. Queue length suddenly jumps from 49 tracks to 8.
  31. I tap another track from queue, and suddenly I am at only 3 tracks.
  32. I open and close the queue a couple of times and I now seem to have 49 tracks again... but wait, 49? Sure enough some expected tracks are missing. I now realize I am looking at a queue made from the top hits view, and not the queue i created by manually adding each album. I realize tapping the song from top hits cleared the queue I spent many steps creating, and replaced it with the top hits.
  33. I notice at least I now have a bottom bar, and a way to access the queue so perhaps I can actually control it.
  34. I am unable to find any way to clear the queue, so I click a track and attempt to remove it from the queue.
  35. The only related option I get is "add to queue"... but it is already in the queue?
  36. I guess that since playing a song from top hits blew away my queue that perhaps I can blow away top hits by again trying to add an album.
  37. I try this and discover it just adds the songs from the album to the top of the queue only with 3 read horizontal lines where the number should be then the tracks 1-49 below it.
  38. I conclude the queue is add-only so I force close the app in an attempt to clear it
  39. I re-open hoping to still have the bottom bar so I can have access to an empty queue but no such luck, and I am right back where I started.
  40. I give up on my goal of listening to all of blessthefall on shuffle, go tap a song from top-hits, and go to work.
  41. On my way home I decide I want to listen to something other than blessthefall, so I force-close the app again to purge the queue, and go search for another artist and hit top hits.

Seriously I love the idea of the platform, and something to give me a master app for all my music needs... but in spite of dedicated efforts I still I really have no idea what the intended user flow.

Am I missing something here? How do others typically use the app?

[build-system] read the version from tags

the apk version name could be easily loaded from git repository itself this is an added advantage for sending out releases as there will not be any need for commits for just changing the version.

As for the apk version code, the same could again be loaded from the git repository itself the build-script for this is available from https://gist.github.com/Avinash-Bhat/12fc59b3d96cb427e5e9 (this may require some tweaking)

I will send a PR so that you can look at this.

Add a 'Play next' option in addition to the existing 'Add to Queue'

The current 'Add to Queue' option seems to act like the standard 'Play next' found in most music players. I would expect that selecting 'Add to Queue' would add the song/album to the end of the current queue, but instead it just adds them to the top of the queue. This is fairly counterintuitive to me, and is especially problematic during car trips where someone else is responsible for adding songs to the queue and expects them not to play immediately.

Car mode play view

I mostly use tomahawk in landscape mode in my car. But its pretty hard to see what is playing, etc as everything is so small.

It would be nice to either adjust sizes/fonts or to have a separate car mode for the player.

Beets without Authentication

Beets wont add an instance without authentication. it works on the desktop version, but android gives an error: Beets: unable to authenticate. Please check your connection.

running Android 6.0.1 on Nexus 5x

Add ability to view / edit tags for local collection

I have a lot of local music on my Android device, sync'd with my desktop.

Some of the sorting / grouping sometimes looks very odd in the Android player, and it would be much easier to debug what is going on if I could view (and even better, edit to fix!) the tags on my android device, rather than trying to remember the issue to investigate when I get home onto my PC, or using another media player / app on Android to view/edit the tags.

Hatchet does not sync

I registered hatched account but my playlist does not sync between my PC and android.

Keep previously played songs in the queue

I read a response to another issue that gave the rational for deleting played songs from the queue to be that it would be nigh impossible to find the current song in a queue of thousands. IMO a better solution is to just scroll to the current song when the queue is opened, but still maintain all the previous songs so that the user can go back to a previous point in the queue and play it from there. It would also mean that an option can be added to create a playlist from the queue.

Tomahawk wants permission to sj

No, that isn't a typo in the title. When activating Google Play Music capability it asks for a permission to "sj". That's all it says. It has a Google "g" logo and "sj". Playback works fine, though.

Nexus 9, Android 6.0, Tomahawk latest (downloaded five minutes ago)

Playlists not sync'd

I've downloaded the desktop client to create a playlist, since I can't figure out how to select multiple items on the android client and adding 100+ tracks individually is painful.

I've connected both clients to hatchet, but I can't figure out how to get the playlist to sync from my desktop client to the android client. I've also exported the playlist from the desktop client (seems to be an xml file), but can't find a way to manually import it in the android client.

Is this feature not implemented yet?

Not loading entire Ampache collection / Different on 2 devices.

I'm using Tomahawk /w Ampache on my Linux rig as well as two Android devices.
On the Linux rig ALMOST all of the music shows up with the right albums and songs.
However on my Android phone many artists are missing, and probably songs as well.
On my Android tablet only songs beginning with a number or the letter A are being displayed,
it seems to not be able to resolve past that.
Is there anything I can try to correct this?

Can't sign up for Hatchet//No music shows up

Whenever I try to sign up with Hatchet either through the app or the browser, it always says that the username has been taken or that there has been a connection error, even though my connection is perfectly fine. // I'm assuming you don't have to sign into Hatchet to use the app, but when I go to the collection page, there's absolutely no music even though I'm signed into Spotify and Soundcloud

CollectionDB is wiped every time device is searched for songs

The collection DB is wiped every time the device folders are processed for tracks. Is there a specific reason for this? Is it possible to update the table instead of wiping and recreating every time?

The wipe is happening in the function "processMediaWrappers" in the file org.tomahawk.libtomahawk.collection.UserCollection.

This function calls the wipe() function and processes tracks to create UserCollection data.

The function processMediaWrappers is called in run() function in the class GetMediaItemsRunnable.

So it seems like, while tracks are added and removed on every search, the UserCollection is wiped and recreated every time.

Add option for standard playback controls

The existing playback controls, while certainly minimalist, are somewhat unintuitive with regards to track seeking. An option that allows for a more traditional seek bar would be very welcome for users coming from most other music players. This could also be extended to include standard next/prev buttons as well.

Amazon Music Internal Error

trying to add an account to Amazon Music plugin gives the error: Amazon Music: Internal error.
all other plugins i have access to besides Beets work just fine
running on Android 6.0.1 on Nexus 5x

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.