Add lock screen controls.
Change-Id: Iefaa17728c3db54d29ca528613eb725625ee929d
diff --git a/src/com/android/music/MediaPlaybackService.java b/src/com/android/music/MediaPlaybackService.java
index 516a907..5c8fe42 100644
--- a/src/com/android/music/MediaPlaybackService.java
+++ b/src/com/android/music/MediaPlaybackService.java
@@ -32,10 +32,14 @@
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
+import android.graphics.Bitmap;
import android.media.audiofx.AudioEffect;
import android.media.AudioManager;
import android.media.AudioManager.OnAudioFocusChangeListener;
+import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
+import android.media.RemoteControlClient;
+import android.media.RemoteControlClient.MetadataEditor;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
@@ -152,7 +156,9 @@
// interval after which we stop the service when idle
private static final int IDLE_DELAY = 60000;
-
+
+ private RemoteControlClient mRemoteControlClient;
+
private Handler mMediaplayerHandler = new Handler() {
float mCurrentVolume = 1.0f;
@Override
@@ -294,8 +300,19 @@
super.onCreate();
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- mAudioManager.registerMediaButtonEventReceiver(new ComponentName(getPackageName(),
- MediaButtonIntentReceiver.class.getName()));
+ ComponentName rec = new ComponentName(getPackageName(),
+ MediaButtonIntentReceiver.class.getName());
+ mAudioManager.registerMediaButtonEventReceiver(rec);
+ mRemoteControlClient = new RemoteControlClient(rec);
+ mAudioManager.registerRemoteControlClient(mRemoteControlClient);
+
+ int flags = RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS
+ | RemoteControlClient.FLAG_KEY_MEDIA_NEXT
+ | RemoteControlClient.FLAG_KEY_MEDIA_PLAY
+ | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE
+ | RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE
+ | RemoteControlClient.FLAG_KEY_MEDIA_STOP;
+ mRemoteControlClient.setTransportControlFlags(flags);
mPreferences = getSharedPreferences("Music", MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE);
mCardId = MusicUtils.getCardId(this);
@@ -307,7 +324,9 @@
mPlayer.setHandler(mMediaplayerHandler);
reloadQueue();
-
+ notifyChange(QUEUE_CHANGED);
+ notifyChange(META_CHANGED);
+
IntentFilter commandFilter = new IntentFilter();
commandFilter.addAction(SERVICECMD);
commandFilter.addAction(TOGGLEPAUSE_ACTION);
@@ -341,6 +360,7 @@
mPlayer = null;
mAudioManager.abandonAudioFocus(mAudioFocusListener);
+ mAudioManager.unregisterRemoteControlClient(mRemoteControlClient);
// make sure there aren't any other messages coming
mDelayedStopHandler.removeCallbacksAndMessages(null);
@@ -750,7 +770,7 @@
* or that the play-state changed (paused/resumed).
*/
private void notifyChange(String what) {
-
+
Intent i = new Intent(what);
i.putExtra("id", Long.valueOf(getAudioId()));
i.putExtra("artist", getArtistName());
@@ -758,7 +778,23 @@
i.putExtra("track", getTrackName());
i.putExtra("playing", isPlaying());
sendStickyBroadcast(i);
-
+
+ if (what.equals(PLAYSTATE_CHANGED)) {
+ mRemoteControlClient.setPlaybackState(isPlaying() ?
+ RemoteControlClient.PLAYSTATE_PLAYING : RemoteControlClient.PLAYSTATE_PAUSED);
+ } else if (what.equals(META_CHANGED)) {
+ RemoteControlClient.MetadataEditor ed = mRemoteControlClient.editMetadata(true);
+ ed.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, getTrackName());
+ ed.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, getAlbumName());
+ ed.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, getArtistName());
+ ed.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, duration());
+ Bitmap b = MusicUtils.getArtwork(this, getAudioId(), getAlbumId(), false);
+ if (b != null) {
+ ed.putBitmap(MetadataEditor.METADATA_KEY_ARTWORK, b);
+ }
+ ed.apply();
+ }
+
if (what.equals(QUEUE_CHANGED)) {
saveQueue(true);
} else {