Use sticky broadcast for sending status changes, so apps can find
out the current state of things without waiting for a state change.
b/3116574
Change-Id: Icaff13959d931068898ae0ee132ee94d43bcb048
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ec43a3f..90e0c5b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -25,6 +25,7 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.BROADCAST_STICKY" />
<application android:icon="@drawable/app_music"
android:label="@string/musicbrowserlabel"
diff --git a/src/com/android/music/MediaAppWidgetProvider.java b/src/com/android/music/MediaAppWidgetProvider.java
index 159aace..543f60d 100644
--- a/src/com/android/music/MediaAppWidgetProvider.java
+++ b/src/com/android/music/MediaAppWidgetProvider.java
@@ -99,8 +99,7 @@
*/
void notifyChange(MediaPlaybackService service, String what) {
if (hasInstances(service)) {
- if (MediaPlaybackService.PLAYBACK_COMPLETE.equals(what) ||
- MediaPlaybackService.META_CHANGED.equals(what) ||
+ if (MediaPlaybackService.META_CHANGED.equals(what) ||
MediaPlaybackService.PLAYSTATE_CHANGED.equals(what)) {
performUpdate(service, null);
}
diff --git a/src/com/android/music/MediaPlaybackActivity.java b/src/com/android/music/MediaPlaybackActivity.java
index 8e1d6a0..1367c5a 100644
--- a/src/com/android/music/MediaPlaybackActivity.java
+++ b/src/com/android/music/MediaPlaybackActivity.java
@@ -482,7 +482,6 @@
IntentFilter f = new IntentFilter();
f.addAction(MediaPlaybackService.PLAYSTATE_CHANGED);
f.addAction(MediaPlaybackService.META_CHANGED);
- f.addAction(MediaPlaybackService.PLAYBACK_COMPLETE);
registerReceiver(mStatusListener, new IntentFilter(f));
updateTrackInfo();
long next = refreshNow();
@@ -1243,8 +1242,7 @@
updateTrackInfo();
setPauseButtonImage();
queueNextRefresh(1);
- } else if (action.equals(MediaPlaybackService.PLAYBACK_COMPLETE) ||
- action.equals(MediaPlaybackService.PLAYSTATE_CHANGED)) {
+ } else if (action.equals(MediaPlaybackService.PLAYSTATE_CHANGED)) {
setPauseButtonImage();
}
}
diff --git a/src/com/android/music/MediaPlaybackService.java b/src/com/android/music/MediaPlaybackService.java
index e4432be..7c0bbed 100644
--- a/src/com/android/music/MediaPlaybackService.java
+++ b/src/com/android/music/MediaPlaybackService.java
@@ -80,7 +80,6 @@
public static final String PLAYSTATE_CHANGED = "com.android.music.playstatechanged";
public static final String META_CHANGED = "com.android.music.metachanged";
public static final String QUEUE_CHANGED = "com.android.music.queuechanged";
- public static final String PLAYBACK_COMPLETE = "com.android.music.playbackcomplete";
public static final String SERVICECMD = "com.android.music.musicservicecommand";
public static final String CMDNAME = "command";
@@ -738,7 +737,8 @@
i.putExtra("artist", getArtistName());
i.putExtra("album",getAlbumName());
i.putExtra("track", getTrackName());
- sendBroadcast(i);
+ i.putExtra("playing", isPlaying());
+ sendStickyBroadcast(i);
if (what.equals(QUEUE_CHANGED)) {
saveQueue(true);
@@ -1268,8 +1268,8 @@
if (mRepeatMode == REPEAT_NONE && !force) {
// all done
gotoIdleState();
- notifyChange(PLAYBACK_COMPLETE);
mIsSupposedToBePlaying = false;
+ notifyChange(PLAYSTATE_CHANGED);
return;
} else if (mRepeatMode == REPEAT_ALL || force) {
mPlayPos = 0;