diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java index 2bfdfae6..2791719a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java @@ -57,7 +57,7 @@ public class AddToPlaylistDialog extends DialogFragment { CreatePlaylistDialog.create(songs).show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST"); } else { materialDialog.dismiss(); - PlaylistsUtil.addToPlaylist(getActivity(), songs, playlists.get(i - 1).id); + PlaylistsUtil.addToPlaylist(getActivity(), songs, playlists.get(i - 1).id, true); } } }) diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java index 9a413090..2faf8b32 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java @@ -57,7 +57,7 @@ public class CreatePlaylistDialog extends DialogFragment { if (playlistId != -1 && getActivity() != null) { //noinspection unchecked ArrayList songs = (ArrayList) getArguments().getSerializable("songs"); - PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId); + PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true); } } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java index 54bba598..e5eaafdf 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MusicControllerActivity.java @@ -25,6 +25,7 @@ import android.view.View; import android.view.ViewAnimationUtils; import android.view.ViewGroup; import android.view.animation.DecelerateInterpolator; +import android.view.animation.OvershootInterpolator; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; @@ -97,6 +98,8 @@ public class MusicControllerActivity extends AbsFabActivity { SquareIfPlaceImageView albumArt; @InjectView(R.id.toolbar) Toolbar toolbar; + @InjectView(R.id.favorite_icon) + ImageView favoriteIcon; TextView songCurrentProgress; TextView songTotalTime; @@ -542,6 +545,56 @@ public class MusicControllerActivity extends AbsFabActivity { updateShuffleState(); } + private void animateSetFavorite() { + favoriteIcon.clearAnimation(); + + favoriteIcon.setAlpha(0f); + favoriteIcon.setScaleX(0f); + favoriteIcon.setScaleY(0f); + favoriteIcon.setVisibility(View.VISIBLE); + favoriteIcon.setPivotX(favoriteIcon.getWidth() / 2); + favoriteIcon.setPivotY(favoriteIcon.getHeight() / 2); + + favoriteIcon.animate() + .setDuration(600) + .setInterpolator(new OvershootInterpolator()) + .scaleX(1f) + .scaleY(1f) + .alpha(1f) + .setListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + + } + + @Override + public void onAnimationCancel(Animator animation) { + favoriteIcon.setVisibility(View.INVISIBLE); + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }) + .withEndAction(new Runnable() { + @Override + public void run() { + favoriteIcon.animate() + .setDuration(300) + .setInterpolator(new DecelerateInterpolator()) + .alpha(0f) + .start(); + } + }) + .start(); + } + @Override public void onPlayingMetaChanged() { super.onPlayingMetaChanged(); @@ -576,6 +629,9 @@ public class MusicControllerActivity extends AbsFabActivity { switch (id) { case R.id.action_toggle_favorite: MusicUtil.toggleFavorite(this, song); + if (MusicUtil.isFavorite(this, song)) { + animateSetFavorite(); + } invalidateOptionsMenu(); return true; case R.id.action_share: diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java index ca8da482..86f340f9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/MusicUtil.java @@ -209,7 +209,7 @@ public class MusicUtil { if (isFavorite(context, song)) { PlaylistsUtil.removeFromPlaylist(context, song, getFavoritesPlaylist(context).id); } else { - PlaylistsUtil.addToPlaylist(context, song, getOrCreateFavoritesPlaylist(context).id); + PlaylistsUtil.addToPlaylist(context, song, getOrCreateFavoritesPlaylist(context).id, false); } } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java index c3831de4..49f07bab 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PlaylistsUtil.java @@ -85,13 +85,13 @@ public class PlaylistsUtil { App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } - public static void addToPlaylist(final Context context, final Song song, final int playlistId) { + public static void addToPlaylist(final Context context, final Song song, final int playlistId, final boolean showToastOnFinish) { List helperList = new ArrayList<>(); helperList.add(song); - addToPlaylist(context, helperList, playlistId); + addToPlaylist(context, helperList, playlistId, showToastOnFinish); } - public static void addToPlaylist(final Context context, final List songs, final int playlistId) { + public static void addToPlaylist(final Context context, final List songs, final int playlistId, final boolean showToastOnFinish) { final int size = songs.size(); final ContentResolver resolver = context.getContentResolver(); final String[] projection = new String[]{ @@ -117,8 +117,10 @@ public class PlaylistsUtil { for (int offSet = 0; offSet < size; offSet += 1000) numinserted += resolver.bulkInsert(uri, makeInsertItems(songs, offSet, 1000, base)); - Toast.makeText(context, context.getResources().getString( - R.string.inserted_x_songs_into_playlist, numinserted), Toast.LENGTH_SHORT).show(); + if (showToastOnFinish) { + Toast.makeText(context, context.getResources().getString( + R.string.inserted_x_songs_into_playlist, numinserted), Toast.LENGTH_SHORT).show(); + } App.bus.post(new DataBaseChangedEvent(DataBaseChangedEvent.PLAYLISTS_CHANGED)); } diff --git a/app/src/main/res/drawable-xxxhdpi/ic_favorite_red_a400_96dp.png b/app/src/main/res/drawable-xxxhdpi/ic_favorite_red_a400_96dp.png new file mode 100644 index 00000000..ea3771d5 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_favorite_red_a400_96dp.png differ diff --git a/app/src/main/res/layout/activity_music_controller.xml b/app/src/main/res/layout/activity_music_controller.xml index a5c670ff..bf74e10b 100644 --- a/app/src/main/res/layout/activity_music_controller.xml +++ b/app/src/main/res/layout/activity_music_controller.xml @@ -208,6 +208,14 @@ android:transitionName="@string/transition_album_cover" tools:ignore="ContentDescription,UnusedAttribute" /> + +