diff options
Diffstat (limited to 'app')
34 files changed, 139 insertions, 32 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java index 576791b2..d33fa527 100644 --- a/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java +++ b/app/src/main/java/github/daneren2005/dsub/service/DownloadService.java @@ -103,6 +103,7 @@ public class DownloadService extends Service { public static final int REWIND = 10000; private static final double DELETE_CUTOFF = 0.84; private static final int REQUIRED_ALBUM_MATCHES = 4; + private static final int REMOTE_PLAYLIST_TOTAL = 3; private static final int SHUFFLE_MODE_NONE = 0; private static final int SHUFFLE_MODE_ALL = 1; private static final int SHUFFLE_MODE_ARTIST = 2; @@ -448,10 +449,21 @@ public class DownloadService extends Service { lifecycleSupport.serializeDownloadQueue(); } - private void updateRemotePlaylist() { + private synchronized void updateRemotePlaylist() { + List<DownloadFile> playlist = new ArrayList<>(); + if(currentPlaying != null) { + int index = downloadList.indexOf(currentPlaying); + int size = size(); + int end = index + REMOTE_PLAYLIST_TOTAL; + for(int i = index; i < size && i < end; i++) { + playlist.add(downloadList.get(i)); + } + } + if (remoteState != LOCAL && remoteController != null) { remoteController.updatePlaylist(); } + mRemoteControl.updatePlaylist(playlist); } public synchronized void restore(List<MusicDirectory.Entry> songs, List<MusicDirectory.Entry> toDelete, int currentPlayingIndex, int currentPlayingPosition) { @@ -1026,6 +1038,7 @@ public class DownloadService extends Service { proxy = null; } checkDownloads(); + updateRemotePlaylist(); } /** Plays or resumes the playback, depending on the current player state. */ @@ -1762,6 +1775,8 @@ public class DownloadService extends Service { setPlayerState(PAUSED); onSongProgress(); } + + updateRemotePlaylist(); } // Only call when starting, setPlayerState(PAUSED) already calls this @@ -2604,6 +2619,13 @@ public class DownloadService extends Service { } }); } + + handler.post(new Runnable() { + @Override + public void run() { + mRemoteControl.setPlaybackState(playerState.getRemoteControlClientPlayState()); + } + }); } private void onStateUpdate() { final long atRevision = revision; @@ -2631,6 +2653,13 @@ public class DownloadService extends Service { } }); } + + handler.post(new Runnable() { + @Override + public void run() { + mRemoteControl.metadataChanged(currentPlaying.getSong()); + } + }); } private class BufferTask extends SilentBackgroundTask<Void> { diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java index b5987270..1f7035dc 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientBase.java @@ -1,12 +1,16 @@ package github.daneren2005.dsub.util.compat; import github.daneren2005.dsub.domain.MusicDirectory; +import github.daneren2005.dsub.service.DownloadFile; + import android.content.ComponentName; import android.content.Context; import android.graphics.Bitmap; import android.support.v7.media.MediaRouter; import android.os.Build; +import java.util.List; + public abstract class RemoteControlClientBase { public static RemoteControlClientBase createInstance() { @@ -25,10 +29,11 @@ public abstract class RemoteControlClientBase { public abstract void register(final Context context, final ComponentName mediaButtonReceiverComponent); public abstract void unregister(final Context context); - public abstract void setPlaybackState(final int state); - public abstract void updateMetadata(final Context context, final MusicDirectory.Entry currentSong); + public abstract void setPlaybackState(int state); + public abstract void updateMetadata(Context context, MusicDirectory.Entry currentSong); + public abstract void metadataChanged(MusicDirectory.Entry currentSong); public abstract void updateAlbumArt(MusicDirectory.Entry currentSong, Bitmap bitmap); public abstract void registerRoute(MediaRouter router); public abstract void unregisterRoute(MediaRouter router); - + public abstract void updatePlaylist(List<DownloadFile> playlist); } diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java index 994c23a6..55002c4b 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientICS.java @@ -1,6 +1,7 @@ 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; @@ -14,6 +15,8 @@ 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) @@ -80,6 +83,11 @@ public class RemoteControlClientICS extends RemoteControlClientBase { } @Override + public void metadataChanged(MusicDirectory.Entry currentSong) { + + } + + @Override public void updateAlbumArt(MusicDirectory.Entry currentSong, Bitmap bitmap) { mRemoteControl.editMetadata(true) .putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, bitmap). @@ -104,6 +112,11 @@ public class RemoteControlClientICS extends RemoteControlClientBase { 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()) diff --git a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java index e2cbb307..b6a38199 100644 --- a/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java +++ b/app/src/main/java/github/daneren2005/dsub/util/compat/RemoteControlClientLP.java @@ -25,6 +25,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.media.AudioAttributes; +import android.media.MediaDescription; import android.media.MediaMetadata; import android.media.Rating; import android.media.RemoteControlClient; @@ -33,7 +34,9 @@ import android.media.session.PlaybackState; import android.os.Build; import android.os.Bundle; import android.support.v7.media.MediaRouter; -import android.util.Log; + +import java.util.ArrayList; +import java.util.List; import github.daneren2005.dsub.R; import github.daneren2005.dsub.activity.SubsonicActivity; @@ -43,7 +46,6 @@ import github.daneren2005.dsub.service.DownloadFile; import github.daneren2005.dsub.service.DownloadService; import github.daneren2005.dsub.util.Constants; import github.daneren2005.dsub.util.ImageLoader; -import github.daneren2005.dsub.util.UpdateHelper; @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class RemoteControlClientLP extends RemoteControlClientBase { @@ -51,10 +53,19 @@ public class RemoteControlClientLP extends RemoteControlClientBase { private static final String CUSTOM_ACTION_THUMBS_UP = "github.daneren2005.dsub.THUMBS_UP"; private static final String CUSTOM_ACTION_THUMBS_DOWN = "github.daneren2005.dsub.THUMBS_DOWN"; private static final String CUSTOM_ACTION_STAR = "github.daneren2005.dsub.STAR"; + // Copied from MediaControlConstants so I did not have to include the entire Wear SDK just for these constant + private static final String SHOW_ON_WEAR = "android.support.wearable.media.extra.CUSTOM_ACTION_SHOW_ON_WEAR"; + private static final String WEAR_RESERVE_SKIP_TO_NEXT = "android.support.wearable.media.extra.RESERVE_SLOT_SKIP_TO_NEXT"; + private static final String WEAR_RESERVE_SKIP_TO_PREVIOUS = "android.support.wearable.media.extra.RESERVE_SLOT_SKIP_TO_PREVIOUS"; + // These constants don't seem to exist anywhere in the SDK. Grabbed from Google's sample media player app + private static final String AUTO_RESERVE_SKIP_TO_NEXT = "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_NEXT"; + private static final String AUTO_RESERVE_SKIP_TO_PREVIOUS = "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_PREVIOUS"; protected MediaSession mediaSession; protected DownloadService downloadService; protected ImageLoader imageLoader; + protected List<DownloadFile> currentQueue; + protected int previousState; @Override public void register(Context context, ComponentName mediaButtonReceiverComponent) { @@ -75,16 +86,19 @@ public class RemoteControlClientLP extends RemoteControlClientBase { mediaSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS | MediaSession.FLAG_HANDLES_MEDIA_BUTTONS); mediaSession.setCallback(new EventCallback()); - if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { - mediaSession.setRatingType(Rating.RATING_THUMB_UP_DOWN); - } - AudioAttributes.Builder audioAttributesBuilder = new AudioAttributes.Builder(); audioAttributesBuilder.setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC); mediaSession.setPlaybackToLocal(audioAttributesBuilder.build()); mediaSession.setActive(true); + Bundle sessionExtras = new Bundle(); + sessionExtras.putBoolean(WEAR_RESERVE_SKIP_TO_PREVIOUS, true); + sessionExtras.putBoolean(WEAR_RESERVE_SKIP_TO_NEXT, true); + sessionExtras.putBoolean(AUTO_RESERVE_SKIP_TO_PREVIOUS, true); + sessionExtras.putBoolean(AUTO_RESERVE_SKIP_TO_NEXT, true); + mediaSession.setExtras(sessionExtras); + imageLoader = SubsonicActivity.getStaticImageLoader(context); } @@ -122,11 +136,14 @@ public class RemoteControlClientLP extends RemoteControlClientBase { DownloadFile downloadFile = downloadService.getCurrentPlaying(); if(downloadFile != null) { - addCustomActions(downloadFile.getSong(), builder); + MusicDirectory.Entry entry = downloadFile.getSong(); + addCustomActions(entry, builder); + builder.setActiveQueueItemId(entry.getId().hashCode()); } PlaybackState playbackState = builder.build(); mediaSession.setPlaybackState(playbackState); + previousState = state; } @Override @@ -138,6 +155,11 @@ public class RemoteControlClientLP extends RemoteControlClientBase { } } + @Override + public void metadataChanged(MusicDirectory.Entry currentSong) { + setPlaybackState(previousState); + } + public void setMetadata(MusicDirectory.Entry currentSong, Bitmap bitmap) { MediaMetadata.Builder builder = new MediaMetadata.Builder(); builder.putString(MediaMetadata.METADATA_KEY_ARTIST, (currentSong == null) ? null : currentSong.getArtist()) @@ -150,17 +172,6 @@ public class RemoteControlClientLP extends RemoteControlClientBase { .putLong(MediaMetadata.METADATA_KEY_DURATION, (currentSong == null) ? 0 : ((currentSong.getDuration() == null) ? 0 : (currentSong.getDuration() * 1000))); - int userRating = currentSong.getRating(); - Rating rating; - if(userRating == 1) { - rating = Rating.newThumbRating(false); - } else if(userRating == 5) { - rating = Rating.newThumbRating(true); - } else { - rating = Rating.newUnratedRating(Rating.RATING_THUMB_UP_DOWN); - } - builder.putRating(MediaMetadata.METADATA_KEY_USER_RATING, rating); - if(bitmap != null) { builder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, bitmap); } @@ -183,31 +194,68 @@ public class RemoteControlClientLP extends RemoteControlClientBase { router.setMediaSession(null); } + @Override + public void updatePlaylist(List<DownloadFile> playlist) { + List<MediaSession.QueueItem> queue = new ArrayList<>(); + + for(DownloadFile file: playlist) { + MusicDirectory.Entry entry = file.getSong(); + + MediaDescription description = new MediaDescription.Builder() + .setMediaId(entry.getId()) + .setTitle(entry.getTitle()) + .setSubtitle(entry.getAlbumDisplay()) + .build(); + MediaSession.QueueItem item = new MediaSession.QueueItem(description, entry.getId().hashCode()); + queue.add(item); + } + + mediaSession.setQueue(queue); + currentQueue = playlist; + } + public MediaSession getMediaSession() { return mediaSession; } protected long getPlaybackActions() { - return PlaybackState.ACTION_PLAY | + long actions = PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_SEEK_TO | - PlaybackState.ACTION_SKIP_TO_NEXT | - PlaybackState.ACTION_SKIP_TO_PREVIOUS; + PlaybackState.ACTION_SKIP_TO_QUEUE_ITEM; + + int currentIndex = downloadService.getCurrentPlayingIndex(); + int size = downloadService.size(); + if(currentIndex > 0) { + actions |= PlaybackState.ACTION_SKIP_TO_PREVIOUS; + } + if(currentIndex < size - 1) { + actions |= PlaybackState.ACTION_SKIP_TO_NEXT; + } + + return actions; } protected void addCustomActions(MusicDirectory.Entry currentSong, PlaybackState.Builder builder) { + Bundle showOnWearExtras = new Bundle(); + showOnWearExtras.putBoolean(SHOW_ON_WEAR, true); + + int rating = currentSong.getRating(); PlaybackState.CustomAction thumbsUp = new PlaybackState.CustomAction.Builder(CUSTOM_ACTION_THUMBS_UP, - downloadService.getString(R.string.download_thumbs_up), - R.drawable.ic_action_rating_good_selected).build(); + downloadService.getString(R.string.download_thumbs_up), + rating == 5 ? R.drawable.ic_action_rating_good_selected : R.drawable.ic_action_rating_good) + .setExtras(showOnWearExtras).build(); PlaybackState.CustomAction thumbsDown = new PlaybackState.CustomAction.Builder(CUSTOM_ACTION_THUMBS_DOWN, - downloadService.getString(R.string.download_thumbs_down), - R.drawable.ic_action_rating_bad_selected).build(); + downloadService.getString(R.string.download_thumbs_down), + rating == 1 ? R.drawable.ic_action_rating_bad_selected : R.drawable.ic_action_rating_bad) + .setExtras(showOnWearExtras).build(); PlaybackState.CustomAction star = new PlaybackState.CustomAction.Builder(CUSTOM_ACTION_STAR, - downloadService.getString(R.string.common_star), - R.drawable.ic_toggle_star).build(); + downloadService.getString(R.string.common_star), + currentSong.isStarred() ? R.drawable.ic_toggle_star : R.drawable.ic_toggle_star_outline) + .setExtras(showOnWearExtras).build(); - builder.addCustomAction(star).addCustomAction(thumbsDown).addCustomAction(thumbsUp); + builder.addCustomAction(thumbsDown).addCustomAction(star).addCustomAction(thumbsUp); } private class EventCallback extends MediaSession.Callback { @@ -241,6 +289,18 @@ public class RemoteControlClientLP extends RemoteControlClientBase { } @Override + public void onSkipToQueueItem(long queueId) { + if(currentQueue != null) { + for(DownloadFile file: currentQueue) { + if(file.getSong().getId().hashCode() == queueId) { + downloadService.play(file); + return; + } + } + } + } + + @Override public void onCustomAction(String action, Bundle extras) { if(CUSTOM_ACTION_THUMBS_UP.equals(action)) { downloadService.toggleRating(5); diff --git a/app/src/main/res/drawable-hdpi/ic_action_rating_bad.png b/app/src/main/res/drawable-hdpi/ic_action_rating_bad.png Binary files differnew file mode 100644 index 00000000..7f06020b --- /dev/null +++ b/app/src/main/res/drawable-hdpi/ic_action_rating_bad.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_rating_bad_selected.png b/app/src/main/res/drawable-hdpi/ic_action_rating_bad_selected.png Binary files differindex 911eea25..b144900f 100644 --- a/app/src/main/res/drawable-hdpi/ic_action_rating_bad_selected.png +++ b/app/src/main/res/drawable-hdpi/ic_action_rating_bad_selected.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_rating_good.png b/app/src/main/res/drawable-hdpi/ic_action_rating_good.png Binary files differnew file mode 100644 index 00000000..42640dbb --- /dev/null +++ b/app/src/main/res/drawable-hdpi/ic_action_rating_good.png diff --git a/app/src/main/res/drawable-hdpi/ic_action_rating_good_selected.png b/app/src/main/res/drawable-hdpi/ic_action_rating_good_selected.png Binary files differindex 09417791..7096c8c2 100644 --- a/app/src/main/res/drawable-hdpi/ic_action_rating_good_selected.png +++ b/app/src/main/res/drawable-hdpi/ic_action_rating_good_selected.png diff --git a/app/src/main/res/drawable-hdpi/ic_toggle_star.png b/app/src/main/res/drawable-hdpi/ic_toggle_star.png Binary files differindex f9ef8772..e62e5803 100644 --- a/app/src/main/res/drawable-hdpi/ic_toggle_star.png +++ b/app/src/main/res/drawable-hdpi/ic_toggle_star.png diff --git a/app/src/main/res/drawable-hdpi/ic_toggle_star_outline.png b/app/src/main/res/drawable-hdpi/ic_toggle_star_outline.png Binary files differnew file mode 100644 index 00000000..fead34b3 --- /dev/null +++ b/app/src/main/res/drawable-hdpi/ic_toggle_star_outline.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_rating_bad.png b/app/src/main/res/drawable-mdpi/ic_action_rating_bad.png Binary files differnew file mode 100644 index 00000000..6cb87ce9 --- /dev/null +++ b/app/src/main/res/drawable-mdpi/ic_action_rating_bad.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_rating_bad_selected.png b/app/src/main/res/drawable-mdpi/ic_action_rating_bad_selected.png Binary files differindex ac563748..e96fc42e 100644 --- a/app/src/main/res/drawable-mdpi/ic_action_rating_bad_selected.png +++ b/app/src/main/res/drawable-mdpi/ic_action_rating_bad_selected.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_rating_good.png b/app/src/main/res/drawable-mdpi/ic_action_rating_good.png Binary files differnew file mode 100644 index 00000000..21ca0f92 --- /dev/null +++ b/app/src/main/res/drawable-mdpi/ic_action_rating_good.png diff --git a/app/src/main/res/drawable-mdpi/ic_action_rating_good_selected.png b/app/src/main/res/drawable-mdpi/ic_action_rating_good_selected.png Binary files differindex 197aa106..9340e80f 100644 --- a/app/src/main/res/drawable-mdpi/ic_action_rating_good_selected.png +++ b/app/src/main/res/drawable-mdpi/ic_action_rating_good_selected.png diff --git a/app/src/main/res/drawable-mdpi/ic_toggle_star.png b/app/src/main/res/drawable-mdpi/ic_toggle_star.png Binary files differindex 6d949fd0..570104dc 100644 --- a/app/src/main/res/drawable-mdpi/ic_toggle_star.png +++ b/app/src/main/res/drawable-mdpi/ic_toggle_star.png diff --git a/app/src/main/res/drawable-mdpi/ic_toggle_star_outline.png b/app/src/main/res/drawable-mdpi/ic_toggle_star_outline.png Binary files differnew file mode 100644 index 00000000..656336d6 --- /dev/null +++ b/app/src/main/res/drawable-mdpi/ic_toggle_star_outline.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_rating_bad.png b/app/src/main/res/drawable-xhdpi/ic_action_rating_bad.png Binary files differnew file mode 100644 index 00000000..8d36c8e7 --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_action_rating_bad.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_rating_bad_selected.png b/app/src/main/res/drawable-xhdpi/ic_action_rating_bad_selected.png Binary files differindex 98494b1f..a88e9483 100644 --- a/app/src/main/res/drawable-xhdpi/ic_action_rating_bad_selected.png +++ b/app/src/main/res/drawable-xhdpi/ic_action_rating_bad_selected.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_rating_good.png b/app/src/main/res/drawable-xhdpi/ic_action_rating_good.png Binary files differnew file mode 100644 index 00000000..88f6a6cb --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_action_rating_good.png diff --git a/app/src/main/res/drawable-xhdpi/ic_action_rating_good_selected.png b/app/src/main/res/drawable-xhdpi/ic_action_rating_good_selected.png Binary files differindex f5065d18..5e30e89e 100644 --- a/app/src/main/res/drawable-xhdpi/ic_action_rating_good_selected.png +++ b/app/src/main/res/drawable-xhdpi/ic_action_rating_good_selected.png diff --git a/app/src/main/res/drawable-xhdpi/ic_toggle_star.png b/app/src/main/res/drawable-xhdpi/ic_toggle_star.png Binary files differindex 5c54298c..7b628888 100644 --- a/app/src/main/res/drawable-xhdpi/ic_toggle_star.png +++ b/app/src/main/res/drawable-xhdpi/ic_toggle_star.png diff --git a/app/src/main/res/drawable-xhdpi/ic_toggle_star_outline.png b/app/src/main/res/drawable-xhdpi/ic_toggle_star_outline.png Binary files differnew file mode 100644 index 00000000..55a2d40b --- /dev/null +++ b/app/src/main/res/drawable-xhdpi/ic_toggle_star_outline.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_rating_bad.png b/app/src/main/res/drawable-xxhdpi/ic_action_rating_bad.png Binary files differnew file mode 100644 index 00000000..a09751b7 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_action_rating_bad.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_rating_bad_selected.png b/app/src/main/res/drawable-xxhdpi/ic_action_rating_bad_selected.png Binary files differindex 945bb594..5adde418 100644 --- a/app/src/main/res/drawable-xxhdpi/ic_action_rating_bad_selected.png +++ b/app/src/main/res/drawable-xxhdpi/ic_action_rating_bad_selected.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_rating_good.png b/app/src/main/res/drawable-xxhdpi/ic_action_rating_good.png Binary files differnew file mode 100644 index 00000000..7adc2c24 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_action_rating_good.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_rating_good_selected.png b/app/src/main/res/drawable-xxhdpi/ic_action_rating_good_selected.png Binary files differindex 273615ea..de797727 100644 --- a/app/src/main/res/drawable-xxhdpi/ic_action_rating_good_selected.png +++ b/app/src/main/res/drawable-xxhdpi/ic_action_rating_good_selected.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_toggle_star.png b/app/src/main/res/drawable-xxhdpi/ic_toggle_star.png Binary files differindex 4db2a37c..00e7c347 100644 --- a/app/src/main/res/drawable-xxhdpi/ic_toggle_star.png +++ b/app/src/main/res/drawable-xxhdpi/ic_toggle_star.png diff --git a/app/src/main/res/drawable-xxhdpi/ic_toggle_star_outline.png b/app/src/main/res/drawable-xxhdpi/ic_toggle_star_outline.png Binary files differnew file mode 100644 index 00000000..096ebba7 --- /dev/null +++ b/app/src/main/res/drawable-xxhdpi/ic_toggle_star_outline.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_rating_bad.png b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_bad.png Binary files differnew file mode 100644 index 00000000..6c358480 --- /dev/null +++ b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_bad.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_rating_bad_selected.png b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_bad_selected.png Binary files differindex f585ba00..0088b4ef 100644 --- a/app/src/main/res/drawable-xxxhdpi/ic_action_rating_bad_selected.png +++ b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_bad_selected.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_rating_good.png b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_good.png Binary files differnew file mode 100644 index 00000000..b949b53b --- /dev/null +++ b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_good.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_rating_good_selected.png b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_good_selected.png Binary files differindex 9ee267f7..3fca95ef 100644 --- a/app/src/main/res/drawable-xxxhdpi/ic_action_rating_good_selected.png +++ b/app/src/main/res/drawable-xxxhdpi/ic_action_rating_good_selected.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_toggle_star.png b/app/src/main/res/drawable-xxxhdpi/ic_toggle_star.png Binary files differindex 6116210d..ce14f384 100644 --- a/app/src/main/res/drawable-xxxhdpi/ic_toggle_star.png +++ b/app/src/main/res/drawable-xxxhdpi/ic_toggle_star.png diff --git a/app/src/main/res/drawable-xxxhdpi/ic_toggle_star_outline.png b/app/src/main/res/drawable-xxxhdpi/ic_toggle_star_outline.png Binary files differnew file mode 100644 index 00000000..c39bbcf5 --- /dev/null +++ b/app/src/main/res/drawable-xxxhdpi/ic_toggle_star_outline.png |