From fea31924ba0148e72fcccf698fd29ed5e1d49e4a Mon Sep 17 00:00:00 2001 From: Avamander Date: Sat, 11 Feb 2017 10:49:01 +0200 Subject: [PATCH] Music data handling improvements (#550) * Fixed extracting the track length. * Added current track and total track count. * Few small changes to make sure everything gets updated properly. * Remove unnecessary includes. --- .../externalevents/MusicPlaybackReceiver.java | 28 +++++++++++-------- .../service/DeviceCommunicationService.java | 16 ++++++++--- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/MusicPlaybackReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/MusicPlaybackReceiver.java index 9d6ee214a..6a84e42c2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/MusicPlaybackReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/MusicPlaybackReceiver.java @@ -15,7 +15,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec; public class MusicPlaybackReceiver extends BroadcastReceiver { private static final Logger LOG = LoggerFactory.getLogger(MusicPlaybackReceiver.class); private static MusicSpec lastMusicSpec = new MusicSpec(); - private static MusicStateSpec lastStatecSpec = new MusicStateSpec(); + private static MusicStateSpec lastStateSpec = new MusicStateSpec(); @Override public void onReceive(Context context, Intent intent) { @@ -28,7 +28,7 @@ public class MusicPlaybackReceiver extends BroadcastReceiver { } */ MusicSpec musicSpec = new MusicSpec(lastMusicSpec); - MusicStateSpec stateSpec = new MusicStateSpec(lastStatecSpec); + MusicStateSpec stateSpec = new MusicStateSpec(lastStateSpec); Bundle incomingBundle = intent.getExtras(); for (String key : incomingBundle.keySet()) { @@ -51,6 +51,14 @@ public class MusicPlaybackReceiver extends BroadcastReceiver { stateSpec.position = ((Long) incoming).intValue() / 1000; } else if (incoming instanceof Boolean && "playing".equals(key)) { stateSpec.state = (byte) (((Boolean) incoming) ? MusicStateSpec.STATE_PLAYING : MusicStateSpec.STATE_PAUSED); + } else if (incoming instanceof String && "duration".equals(key)) { + musicSpec.duration = Integer.valueOf((String) incoming) / 1000; + } else if (incoming instanceof String && "trackno".equals(key)) { + musicSpec.trackNr = Integer.valueOf((String) incoming); + } else if (incoming instanceof String && "totaltrack".equals(key)) { + musicSpec.trackCount = Integer.valueOf((String) incoming); + } else if (incoming instanceof Integer && "pos".equals(key)) { + stateSpec.position = (Integer) incoming; } } @@ -59,17 +67,15 @@ public class MusicPlaybackReceiver extends BroadcastReceiver { LOG.info("Update Music Info: " + musicSpec.artist + " / " + musicSpec.album + " / " + musicSpec.track); GBApplication.deviceService().onSetMusicInfo(musicSpec); } else { - LOG.info("got metadata changed intent, but nothing changed, ignoring."); + LOG.info("Got metadata changed intent, but nothing changed, ignoring."); } - if (intent.hasExtra("position") && intent.hasExtra("playing")) { - if (!lastStatecSpec.equals(stateSpec)) { - LOG.info("Update Music State: state=" + stateSpec.state + ", position= " + stateSpec.position); - GBApplication.deviceService().onSetMusicState(stateSpec); - } else { - LOG.info("got state changed intent, but not enough has changed, ignoring."); - } - lastStatecSpec = stateSpec; + if (!lastStateSpec.equals(stateSpec)) { + lastStateSpec = stateSpec; + LOG.info("Update Music State: state=" + stateSpec.state + ", position= " + stateSpec.position); + GBApplication.deviceService().onSetMusicState(stateSpec); + } else { + LOG.info("Got state changed intent, but not enough has changed, ignoring."); } } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java index 5e5315c72..04206e8d1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java @@ -156,6 +156,15 @@ public class DeviceCommunicationService extends Service implements SharedPrefere private AlarmReceiver mAlarmReceiver = null; private Random mRandom = new Random(); + private final String[] mMusicActions = { + "com.android.music.metachanged", + "com.android.music.playstatechanged", + "com.android.music.queuechanged", + "com.android.music.playbackcomplete", + "net.sourceforge.subsonic.androidapp.EVENT_META_CHANGED", + "com.maxmpz.audioplayer.TPOS_SYNC", + "com.maxmpz.audioplayer.STATUS_CHANGED",}; + /** * For testing! * @@ -591,10 +600,9 @@ public class DeviceCommunicationService extends Service implements SharedPrefere if (mMusicPlaybackReceiver == null) { mMusicPlaybackReceiver = new MusicPlaybackReceiver(); IntentFilter filter = new IntentFilter(); - filter.addAction("com.android.music.metachanged"); - filter.addAction("com.android.music.playstatechanged"); - filter.addAction("com.android.music.playbackcomplete"); - filter.addAction("net.sourceforge.subsonic.androidapp.EVENT_META_CHANGED"); + for (String action : mMusicActions){ + filter.addAction(action); + } registerReceiver(mMusicPlaybackReceiver, filter); } if (mTimeChangeReceiver == null) {