Added support for musixmatch synced lyrics.

This commit is contained in:
Karim Abou Zeid 2016-03-28 14:59:19 +02:00
commit c168dc1e25

View file

@ -133,6 +133,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
private HandlerThread musicPlayerHandlerThread; private HandlerThread musicPlayerHandlerThread;
private HandlerThread queueSaveHandlerThread; private HandlerThread queueSaveHandlerThread;
private SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper(); private SongPlayCountHelper songPlayCountHelper = new SongPlayCountHelper();
private ThrottledPublicPlayStateChangedNotifier throttledPublicPlayStateChangedNotifier;
private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() { private final BroadcastReceiver becomingNoisyReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, @NonNull Intent intent) { public void onReceive(Context context, @NonNull Intent intent) {
@ -161,8 +162,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName()); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getName());
wakeLock.setReferenceCounted(false); wakeLock.setReferenceCounted(false);
String playbackHandlerName = "PlaybackHandler"; musicPlayerHandlerThread = new HandlerThread("PlaybackHandler");
musicPlayerHandlerThread = new HandlerThread(playbackHandlerName);
musicPlayerHandlerThread.start(); musicPlayerHandlerThread.start();
playerHandler = new PlaybackHandler(this, musicPlayerHandlerThread.getLooper()); playerHandler = new PlaybackHandler(this, musicPlayerHandlerThread.getLooper());
@ -179,6 +179,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
registerReceiversAndRemoteControlClient(); registerReceiversAndRemoteControlClient();
mediaStoreObserver = new MediaStoreObserver(playerHandler); mediaStoreObserver = new MediaStoreObserver(playerHandler);
throttledPublicPlayStateChangedNotifier = new ThrottledPublicPlayStateChangedNotifier(playerHandler);
getContentResolver().registerContentObserver( getContentResolver().registerContentObserver(
MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver); MediaStore.Audio.Media.INTERNAL_CONTENT_URI, true, mediaStoreObserver);
getContentResolver().registerContentObserver( getContentResolver().registerContentObserver(
@ -833,6 +834,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
public int seek(int millis) { public int seek(int millis) {
int newPosition = playback.seek(millis); int newPosition = playback.seek(millis);
savePositionInTrack(); savePositionInTrack();
throttledPublicPlayStateChangedNotifier.scheduleIntent();
return newPosition; return newPosition;
} }
@ -903,16 +905,21 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
private void sendPublicIntent(@NonNull final String what) { private void sendPublicIntent(@NonNull final String what) {
final Intent intent = new Intent(what.replace(PHONOGRAPH_PACKAGE_NAME, MUSIC_PACKAGE_NAME)); final Intent intent = new Intent(what.replace(PHONOGRAPH_PACKAGE_NAME, MUSIC_PACKAGE_NAME));
final Song currentSong = getCurrentSong(); final Song song = getCurrentSong();
if (currentSong.id != -1) {
intent.putExtra("id", currentSong.id); intent.putExtra("id", song.id);
intent.putExtra("artist", currentSong.artistName);
intent.putExtra("album", currentSong.albumName); intent.putExtra("artist", song.artistName);
intent.putExtra("track", currentSong.title); intent.putExtra("album", song.albumName);
intent.putExtra("duration", currentSong.duration); intent.putExtra("track", song.title);
}
intent.putExtra("duration", song.duration);
intent.putExtra("position", (long) getSongProgressMillis());
intent.putExtra("playing", isPlaying()); intent.putExtra("playing", isPlaying());
intent.putExtra("scrobbling_source", PHONOGRAPH_PACKAGE_NAME);
sendStickyBroadcast(intent); sendStickyBroadcast(intent);
} }
@ -1155,6 +1162,26 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
} }
} }
private class ThrottledPublicPlayStateChangedNotifier implements Runnable {
// milliseconds to delay before calling refresh to aggregate events
private static final long REFRESH_DELAY = 500;
private Handler mHandler;
public ThrottledPublicPlayStateChangedNotifier(Handler handler) {
mHandler = handler;
}
public void scheduleIntent() {
mHandler.removeCallbacks(this);
mHandler.postDelayed(this, REFRESH_DELAY);
}
@Override
public void run() {
sendPublicIntent(PLAY_STATE_CHANGED);
}
}
private static class SongPlayCountHelper { private static class SongPlayCountHelper {
public static final String TAG = SongPlayCountHelper.class.getSimpleName(); public static final String TAG = SongPlayCountHelper.class.getSimpleName();