diff options
author | daneren2005 <daneren2005@gmail.com> | 2013-11-26 13:53:35 -0800 |
---|---|---|
committer | daneren2005 <daneren2005@gmail.com> | 2013-11-26 13:53:35 -0800 |
commit | a4f873173a05745abf14b9ccdb4c2d44ab9410eb (patch) | |
tree | 7141b958580a4825faed414aafb8197b3ca09818 /src/github/daneren2005 | |
parent | 03537e766afd676c6e4a2846bc6a640cb734cfde (diff) | |
download | dsub-a4f873173a05745abf14b9ccdb4c2d44ab9410eb.tar.gz dsub-a4f873173a05745abf14b9ccdb4c2d44ab9410eb.tar.bz2 dsub-a4f873173a05745abf14b9ccdb4c2d44ab9410eb.zip |
#176 Added KitKat RCC for star editing
Diffstat (limited to 'src/github/daneren2005')
-rw-r--r-- | src/github/daneren2005/dsub/util/compat/RemoteControlClientKK.java | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/github/daneren2005/dsub/util/compat/RemoteControlClientKK.java b/src/github/daneren2005/dsub/util/compat/RemoteControlClientKK.java new file mode 100644 index 00000000..06329c15 --- /dev/null +++ b/src/github/daneren2005/dsub/util/compat/RemoteControlClientKK.java @@ -0,0 +1,73 @@ +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.Rating; +import android.media.RemoteControlClient; +import github.daneren2005.dsub.activity.SubsonicActivity; +import github.daneren2005.dsub.service.DownloadService; +import github.daneren2005.dsub.service.MusicService; +import github.daneren2005.dsub.service.MusicServiceFactory; +import github.daneren2005.dsub.util.SilentBackgroundTask; +import github.daneren2005.dsub.util.Util; +import java.io.File; + +@TargetApi(19) +public class RemoteControlClientKK extends RemoteControlClientJB { + @Override + public void register(final Context context, final ComponentName mediaButtonReceiverComponent) { + super.register(context, mediaButtonReceiverComponent); + + mRemoteControl.setMetadataUpdateListener(new RemoteControlClient.onMetadataUpdateListener() { + @Override + public void onMetadataUpdate(int key, Object newValue) { + if(key == MediaMetadataEditor.RATING_KEY_BY_USER) { + Rating rating = (Rating) newValue; + setStarred(currentSong, rating.hasHeart()); + } + } + }); + } + + @Override + protected void updateMetadata(final MusicDirectory.Entry currentSong, final RemoteControlClient.MetadataEditor editor) { + super.updateMetadata(currentSong, editor); + editor.putObject(MediaMetadataEditor.RATING_KEY_BY_USER, Rating.newHeartRating(currentSong.isStarred())); + editor.addEditableKey(MediaMetadataEditor.RATING_KEY_BY_USER); + } + + @Override + protected int getTransportFlags() { + return super.getTransportFlags() | RemoteControlClient.FLAG_KEY_MEDIA_RATING; + } + + private void setStarred(final MusicDirectory.Entry entry, final boolean starred) { + entry.setStarred(starred); + + new SilentBackgroundTask<Void>(context) { + @Override + protected Void doInBackground() throws Throwable { + MusicService musicService = MusicServiceFactory.getMusicService(context); + musicService.setStarred(entry.getId(), starred, context, null); + + // Make sure to clear parent cache + String s = Util.getRestUrl(context, null) + entry.getParent(); + String parentCache = "directory-" + s.hashCode() + ".ser"; + File file = new File(context.getCacheDir(), parentCache); + file.delete(); + } + + @Override + protected void done(Void result) { + + } + }.execute(); + } +} |