package com.wigwamlabs.spotify;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
class RemoteControlClient extends android.media.RemoteControlClient implements ImageProvider.Callback {
private final ImageProvider mImageProvider;
private String mTrackImageLink;
private RemoteControlClient(PendingIntent mediaButtonIntent, ImageProvider imageProvider) {
super(mediaButtonIntent);
mImageProvider = imageProvider;
setTransportControlFlags(FLAG_KEY_MEDIA_PLAY_PAUSE | FLAG_KEY_MEDIA_STOP | FLAG_KEY_MEDIA_NEXT);
}
static RemoteControlClient create(Context context, ComponentName receiver, ImageProvider imageProvider) {
final Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.setComponent(receiver);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
return new RemoteControlClient(pendingIntent, imageProvider);
}
public void updateMediaData(Track currentTrack) {
final MetadataEditor editor = editMetadata(true);
if (currentTrack != null) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST, currentTrack.getArtistsString())
.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, currentTrack.getArtistsString())
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, currentTrack.getName());
// deal with image
mTrackImageLink = currentTrack.getImageLink(ImageProvider.SIZE_NORMAL);
if (mTrackImageLink != null) {
final Bitmap image = mImageProvider.get(mTrackImageLink);
if (image != null) {
editor.putBitmap(MetadataEditor.BITMAP_KEY_ARTWORK, image);
} else {
mImageProvider.load(mTrackImageLink, this, true);
}
}
}
editor.apply();
}
@Override
public void onImageImageLoaded(String imageLink, Bitmap image) {
if (imageLink.equals(mTrackImageLink)) {
editMetadata(false)
.putBitmap(MetadataEditor.BITMAP_KEY_ARTWORK, image)
.apply();
}
}
public void onStateChanged(int state) {
final int playbackState;
switch (state) {
case Player.STATE_PLAYING:
playbackState = RemoteControlClient.PLAYSTATE_PLAYING;
break;
case Player.STATE_PAUSED_USER:
case Player.STATE_PAUSED_AUDIOFOCUS:
case Player.STATE_PAUSED_NOISY:
playbackState = RemoteControlClient.PLAYSTATE_PAUSED;
break;
default:
case Player.STATE_STARTED:
case Player.STATE_STOPPED:
playbackState = RemoteControlClient.PLAYSTATE_STOPPED;
break;
}
setPlaybackState(playbackState);
}
}