package github.daneren2005.dsub.util.compat;
import github.daneren2005.dsub.domain.MusicDirectory;
import github.daneren2005.dsub.service.DownloadFile;
import github.daneren2005.dsub.service.DownloadService;
import github.daneren2005.dsub.util.ImageLoader;
import android.annotation.TargetApi;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaMetadataRetriever;
import android.media.RemoteControlClient;
import android.support.v7.media.MediaRouter;
import java.util.List;
import github.daneren2005.dsub.activity.SubsonicActivity;
@TargetApi(14)
public class RemoteControlClientICS extends RemoteControlClientBase {
private static String TAG = RemoteControlClientICS.class.getSimpleName();
protected RemoteControlClient mRemoteControl;
protected ImageLoader imageLoader;
protected DownloadService downloadService;
public void register(final Context context, final ComponentName mediaButtonReceiverComponent) {
downloadService = (DownloadService) context;
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
// build the PendingIntent for the remote control client
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
mediaButtonIntent.setComponent(mediaButtonReceiverComponent);
PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, mediaButtonIntent, 0);
// create and register the remote control client
mRemoteControl = new RemoteControlClient(mediaPendingIntent);
audioManager.registerRemoteControlClient(mRemoteControl);
mRemoteControl.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
mRemoteControl.setTransportControlFlags(getTransportFlags());
imageLoader = SubsonicActivity.getStaticImageLoader(context);
}
public void unregister(final Context context) {
if(mRemoteControl == null) {
return;
}
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.unregisterRemoteControlClient(mRemoteControl);
}
public void setPlaybackState(final int state, int index, int queueSize) {
if(mRemoteControl == null) {
return;
}
mRemoteControl.setPlaybackState(state);
}
public void updateMetadata(final Context context, final MusicDirectory.Entry currentSong) {
if(mRemoteControl == null) {
return;
}
if(imageLoader == null) {
imageLoader = SubsonicActivity.getStaticImageLoader(context);
}
// Update the remote controls
RemoteControlClient.MetadataEditor editor = mRemoteControl.editMetadata(true);
updateMetadata(currentSong, editor);
editor.apply();
if (currentSong == null || imageLoader == null) {
updateAlbumArt(currentSong, null);
} else {
imageLoader.loadImage(context, this, currentSong);
}
}
@Override
public void metadataChanged(MusicDirectory.Entry currentSong) {
}
@Override
public void updateAlbumArt(MusicDirectory.Entry currentSong, Bitmap bitmap) {
mRemoteControl.editMetadata(false)
.putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, bitmap).
apply();
}
@Override
public void registerRoute(MediaRouter router) {
if(mRemoteControl == null) {
return;
}
router.addRemoteControlClient(mRemoteControl);
}
@Override
public void unregisterRoute(MediaRouter router) {
if(mRemoteControl == null) {
return;
}
router.removeRemoteControlClient(mRemoteControl);
}
@Override
public void updatePlaylist(List<DownloadFile> playlist) {
}
protected void updateMetadata(final MusicDirectory.Entry currentSong, final RemoteControlClient.MetadataEditor editor) {
editor.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, (currentSong == null) ? null : currentSong.getArtist())
.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, (currentSong == null) ? null : currentSong.getAlbum())
.putString(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST, (currentSong == null) ? null : currentSong.getArtist())
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, (currentSong) == null ? null : currentSong.getTitle())
.putString(MediaMetadataRetriever.METADATA_KEY_GENRE, (currentSong) == null ? null : currentSong.getGenre())
.putLong(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER, (currentSong == null) ?
0 : ((currentSong.getTrack() == null) ? 0 : currentSong.getTrack()))
.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, (currentSong == null) ?
0 : ((currentSong.getDuration() == null) ? 0 : (currentSong.getDuration() * 1000)));
}
protected int getTransportFlags() {
return RemoteControlClient.FLAG_KEY_MEDIA_PLAY |
RemoteControlClient.FLAG_KEY_MEDIA_PAUSE |
RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE |
RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS |
RemoteControlClient.FLAG_KEY_MEDIA_NEXT |
RemoteControlClient.FLAG_KEY_MEDIA_STOP;
}
}