[Android] Limit excessive publishstate calls
Geoffrey Métais
git at videolan.org
Fri Apr 13 15:11:05 CEST 2018
vlc-android | branch: master | Geoffrey Métais <geoffrey.metais at gmail.com> | Fri Apr 13 15:10:23 2018 +0200| [61ad7bd04a1302bd9cbee6677054847d286b862a] | committer: Geoffrey Métais
Limit excessive publishstate calls
> https://code.videolan.org/videolan/vlc-android/commit/61ad7bd04a1302bd9cbee6677054847d286b862a
---
.../src/org/videolan/vlc/PlaybackService.java | 23 +++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/vlc-android/src/org/videolan/vlc/PlaybackService.java b/vlc-android/src/org/videolan/vlc/PlaybackService.java
index fccf62e45..157e5ed8c 100644
--- a/vlc-android/src/org/videolan/vlc/PlaybackService.java
+++ b/vlc-android/src/org/videolan/vlc/PlaybackService.java
@@ -116,6 +116,7 @@ public class PlaybackService extends MediaBrowserServiceCompat{
private static final int SHOW_PROGRESS = 0;
private static final int SHOW_TOAST = 1;
private static final int END_MEDIASESSION = 2;
+ private static final int PUBLISH_STATE = 3;
private static final long DELAY_DOUBLE_CLICK = 800L;
private static final long DELAY_LONG_CLICK = 1000L;
@@ -529,7 +530,7 @@ public class PlaybackService extends MediaBrowserServiceCompat{
break;
case MediaPlayer.Event.PositionChanged:
updateWidgetPosition(event.getPositionChanged());
- publishState();
+ mHandler.sendEmptyMessage(PUBLISH_STATE);
break;
case MediaPlayer.Event.Vout:
break;
@@ -590,6 +591,8 @@ public class PlaybackService extends MediaBrowserServiceCompat{
private final Handler mHandler = new PlaybackServiceHandler(this);
private static class PlaybackServiceHandler extends WeakHandler<PlaybackService> {
+ private long lastPublicationDate = 0L;
+
PlaybackServiceHandler(PlaybackService fragment) {
super(fragment);
}
@@ -617,6 +620,13 @@ public class PlaybackService extends MediaBrowserServiceCompat{
case END_MEDIASESSION:
if (service.mMediaSession != null) service.mMediaSession.setActive(false);
break;
+ case PUBLISH_STATE:
+ final long time = System.currentTimeMillis();
+ if (time - lastPublicationDate > 1000L) {
+ service.publishState();
+ lastPublicationDate = time;
+ }
+ break;
}
}
}
@@ -1053,15 +1063,18 @@ public class PlaybackService extends MediaBrowserServiceCompat{
pscb.addCustomAction("repeat", getString(R.string.repeat_title), repeatResId);
boolean mediaIsActive = state != PlaybackStateCompat.STATE_STOPPED;
+ boolean update = mMediaSession.isActive() != mediaIsActive;
mMediaSession.setPlaybackState(pscb.build());
mMediaSession.setActive(mediaIsActive);
mMediaSession.setQueueTitle(getString(R.string.music_now_playing));
- if (mediaIsActive)
- sendStartSessionIdIntent();
- else
- sendStopSessionIdIntent();
+ if (update) {
+ if (mediaIsActive)
+ sendStartSessionIdIntent();
+ else
+ sendStopSessionIdIntent();
+ }
}
private void notifyTrackChanged() {
More information about the Android
mailing list