From dd98206ec7a16f289c4cd9fdd8af853362b828f7 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Thu, 28 Jan 2016 18:47:49 +0100 Subject: [PATCH] Added transition when opening a playlist. --- .../ui/activities/ArtistDetailActivity.java | 5 +++ .../ui/activities/PlaylistDetailActivity.java | 6 ++++ .../base/AbsSlidingMusicPanelActivity.java | 8 +++++ .../gramophone/util/NavigationUtil.java | 35 ++++++++++++++++--- .../res/layout/activity_playlist_detail.xml | 4 ++- .../main/res/layout/fragment_mini_player.xml | 5 ++- app/src/main/res/values/values.xml | 1 + 7 files changed, 57 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index 229edacb..2d00f27f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -28,6 +28,7 @@ import com.bumptech.glide.request.target.Target; import com.github.ksoichiro.android.observablescrollview.ObservableListView; import com.kabouzeid.appthemehelper.util.ColorUtil; import com.kabouzeid.appthemehelper.util.MaterialValueHelper; +import com.kabouzeid.gramophone.BuildConfig; import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.adapter.album.HorizontalAlbumAdapter; import com.kabouzeid.gramophone.adapter.song.ArtistSongAdapter; @@ -218,6 +219,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement } private void loadBiography() { + if (BuildConfig.DEBUG) { + biography = Html.fromHtml("Not available in debug builds, because this is causing a crash for whatever reason."); + return; + } lastFMRestClient.getApiService().getArtistInfo(artist.name, null).enqueue(new Callback() { @Override public void onResponse(Response response) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index 7c6c93c1..d0ca8ef7 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -1,10 +1,12 @@ package com.kabouzeid.gramophone.ui.activities; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; +import android.transition.Slide; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -77,6 +79,10 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme checkIsEmpty(); setUpToolBar(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + getWindow().setEnterTransition(new Slide()); + } } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java index 32f4ceb4..80116b59 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/base/AbsSlidingMusicPanelActivity.java @@ -214,4 +214,12 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi super.setTaskDescriptionColor(color); } } + + public MiniPlayerFragment getMiniPlayerFragment() { + return miniPlayerFragment; + } + + public AbsPlayerFragment getPlayerFragment() { + return playerFragment; + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java index 6cc4ef96..744cc915 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java @@ -8,6 +8,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.util.Pair; +import android.view.View; import android.widget.Toast; import com.kabouzeid.gramophone.R; @@ -17,44 +18,68 @@ import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity; import com.kabouzeid.gramophone.ui.activities.ArtistDetailActivity; import com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity; +import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; /** * @author Karim Abou Zeid (kabouzeid) */ public class NavigationUtil { - public static void goToArtist(@NonNull final Activity activity, final int artistId, @Nullable final Pair... sharedElements) { - if (activity instanceof ArtistDetailActivity) return; + public static void goToArtist(@NonNull final Activity activity, final int artistId, @Nullable Pair... sharedElements) { if (!disableViewsAndCheckIsReadyForTransition(activity)) return; final Intent intent = new Intent(activity, ArtistDetailActivity.class); intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST_ID, artistId); + sharedElements = addMiniPlayerSharedElement(activity, sharedElements); + //noinspection unchecked activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); } - public static void goToAlbum(@NonNull final Activity activity, final int albumId, @Nullable final Pair... sharedElements) { - if (activity instanceof AlbumDetailActivity) return; + public static void goToAlbum(@NonNull final Activity activity, final int albumId, @Nullable Pair... sharedElements) { if (!disableViewsAndCheckIsReadyForTransition(activity)) return; final Intent intent = new Intent(activity, AlbumDetailActivity.class); intent.putExtra(AlbumDetailActivity.EXTRA_ALBUM_ID, albumId); + sharedElements = addMiniPlayerSharedElement(activity, sharedElements); + //noinspection unchecked activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); } - public static void goToPlaylist(@NonNull final Activity activity, final Playlist playlist, @Nullable final Pair... sharedElements) { + public static void goToPlaylist(@NonNull final Activity activity, final Playlist playlist, @Nullable Pair... sharedElements) { if (!disableViewsAndCheckIsReadyForTransition(activity)) return; final Intent intent = new Intent(activity, PlaylistDetailActivity.class); intent.putExtra(PlaylistDetailActivity.EXTRA_PLAYLIST, playlist); + sharedElements = addMiniPlayerSharedElement(activity, sharedElements); + //noinspection unchecked activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); } + private static Pair[] addMiniPlayerSharedElement(Activity activity, @Nullable Pair... sharedElements) { + if (activity instanceof AbsSlidingMusicPanelActivity) { + View miniPlayer = ((AbsSlidingMusicPanelActivity) activity).getMiniPlayerFragment().getView(); + Pair miniPlayerSharedElement = Pair.create(miniPlayer, activity.getString(R.string.transition_mini_player)); + + if (sharedElements != null) { + Pair[] tmpSharedElements; + tmpSharedElements = new Pair[sharedElements.length + 1]; + System.arraycopy(sharedElements, 0, tmpSharedElements, 0, sharedElements.length); + sharedElements = tmpSharedElements; + + sharedElements[sharedElements.length - 1] = miniPlayerSharedElement; + } else { + sharedElements = new Pair[]{miniPlayerSharedElement}; + } + } + return sharedElements; + } + private static boolean disableViewsAndCheckIsReadyForTransition(@NonNull final Activity activity) { if (activity instanceof KabViewsDisableAble) { if (((KabViewsDisableAble) activity).areViewsEnabled()) { diff --git a/app/src/main/res/layout/activity_playlist_detail.xml b/app/src/main/res/layout/activity_playlist_detail.xml index d94b68c7..cf474a15 100644 --- a/app/src/main/res/layout/activity_playlist_detail.xml +++ b/app/src/main/res/layout/activity_playlist_detail.xml @@ -1,7 +1,9 @@ + android:layout_height="match_parent" + android:transitionGroup="true" + tools:ignore="UnusedAttribute"> + android:focusable="false" + android:transitionName="@string/transition_mini_player" + tools:ignore="UnusedAttribute"> album_art_transition artist_image_transition fab_transition + mini_player_transition \ No newline at end of file