blob: 52361fd4c3a959d5a818f3aa9bd56b99e8b833c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
package github.daneren2005.dsub.util.compat;
import github.daneren2005.dsub.domain.MusicDirectory;
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.media.AudioManager;
import android.media.MediaMetadataRetriever;
import android.media.RemoteControlClient;
import github.daneren2005.dsub.activity.SubsonicTabActivity;
@TargetApi(14)
public class RemoteControlClientICS extends RemoteControlClientHelper {
private RemoteControlClient mRemoteControl;
private ImageLoader imageLoader;
public void register(final Context context, final ComponentName mediaButtonReceiverComponent) {
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(
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);
imageLoader = SubsonicTabActivity.getStaticImageLoader(context);
}
public void unregister(final Context context) {
if (mRemoteControl != null) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.unregisterRemoteControlClient(mRemoteControl);
}
}
public void setPlaybackState(final int state) {
mRemoteControl.setPlaybackState(state);
}
public void updateMetadata(final Context context, final MusicDirectory.Entry currentSong) {
if(imageLoader == null) {
imageLoader = SubsonicTabActivity.getStaticImageLoader(context);
}
// Update the remote controls
mRemoteControl.editMetadata(true)
.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, (currentSong == null) ? null : currentSong.getArtist())
.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, (currentSong == null) ? null : currentSong.getArtist())
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, (currentSong) == null ? null : currentSong.getTitle())
.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, (currentSong == null) ?
0 : ((currentSong.getDuration() == null) ? 0 : currentSong.getDuration()))
.apply();
if (currentSong == null || imageLoader == null) {
mRemoteControl.editMetadata(true)
.putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, null)
.apply();
} else {
imageLoader.loadImage(context, mRemoteControl, currentSong);
}
}
}
|