Added support for musixmatch synced lyrics.
This commit is contained in:
parent
15fe7947cb
commit
c168dc1e25
1 changed files with 37 additions and 10 deletions
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue