diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java index 87962f4f..c0449384 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/SearchAdapter.java @@ -147,12 +147,12 @@ public class SearchAdapter extends RecyclerView.Adapter(); + + this.id = in.readString(); + this.title = in.readString(); + this.year = in.readInt(); + + this.artistId = in.readString(); + this.artistName = in.readString(); } public static final Creator CREATOR = new Creator() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java index 002db424..2ebed6b6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java @@ -85,11 +85,19 @@ public class Artist implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeTypedList(this.albums); + dest.writeString(id); + dest.writeString(name); + dest.writeLong(duration); } protected Artist(Parcel in) { - this.albums = in.createTypedArrayList(Album.CREATOR); + this.genres = new ArrayList<>(); + this.albums = new ArrayList<>(); + this.songs = new ArrayList<>(); + + this.id = in.readString(); + this.name = in.readString(); + this.duration = in.readLong(); } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 81d6fc9c..dda11a2a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -45,6 +45,7 @@ import butterknife.BindView; import butterknife.ButterKnife; public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder { + public static final String EXTRA_ALBUM = "extra_album"; public static final String EXTRA_ALBUM_ID = "extra_album_id"; private Album album; @@ -93,7 +94,15 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements setUpToolBar(); setUpViews(); - QueryUtil.getAlbum(getIntent().getExtras().getString(EXTRA_ALBUM_ID), new MediaCallback() { + Album album = getIntent().getExtras().getParcelable(EXTRA_ALBUM); + String id = getIntent().getExtras().getString(EXTRA_ALBUM_ID); + + if (album != null) { + setAlbum(album); + id = album.getId(); + } + + QueryUtil.getAlbum(id, new MediaCallback() { @Override public void onLoadMedia(List media) { Album album = (Album) media.get(0); 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 f4a9a356..eb591e41 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 @@ -48,6 +48,7 @@ import com.kabouzeid.gramophone.util.QueryUtil; import org.jellyfin.apiclient.model.querying.ItemQuery; public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder { + public static final String EXTRA_ARTIST = "extra_artist"; public static final String EXTRA_ARTIST_ID = "extra_artist_id"; @BindView(R.id.list) @@ -114,7 +115,15 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement setUpToolbar(); setUpViews(); - QueryUtil.getArtist(getIntent().getExtras().getString(EXTRA_ARTIST_ID), new MediaCallback() { + Artist artist = getIntent().getExtras().getParcelable(EXTRA_ARTIST); + String id = getIntent().getExtras().getString(EXTRA_ARTIST_ID); + + if (artist != null) { + setArtist(artist); + id = artist.getId(); + } + + QueryUtil.getArtist(id, new MediaCallback() { @Override public void onLoadMedia(List media) { Artist artist = (Artist) media.get(0); @@ -240,7 +249,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement private void setUpToolbar() { setSupportActionBar(toolbar); - //noinspection ConstantConditions + // noinspection ConstantConditions getSupportActionBar().setTitle(null); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @@ -339,8 +348,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement albumCountTextView.setText(MusicUtil.getAlbumCountString(this, artist.getAlbumCount())); durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, artist.getSongs()))); - songAdapter.swapDataSet(artist.getSongs()); - albumAdapter.swapDataSet(artist.albums); + // TODO this activity will crash when an artist is passed with an empty album array + // something in the album adapter is causing the issue + if (artist.albums.size() != 0) songAdapter.swapDataSet(artist.songs); + if (artist.albums.size() != 0) albumAdapter.swapDataSet(artist.albums); } private Artist getArtist() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java index 2633c4f4..76f5e979 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/MainActivity.java @@ -103,7 +103,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity { }); } - private void setCurrentFragment(@SuppressWarnings("NullableProblems") Fragment fragment) { + private void setCurrentFragment(Fragment fragment) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, null).commit(); currentFragment = (MainActivityFragmentCallbacks) fragment; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java index 20e41b82..f5465783 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivity/library/LibraryFragment.java @@ -139,6 +139,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde if (PreferenceUtil.getInstance(getContext()).getRememberLastTab()) { pager.setCurrentItem(PreferenceUtil.getInstance(getContext()).getLastTab()); } + pager.addOnPageChangeListener(this); } 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 940dfe89..df69802b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/NavigationUtil.java @@ -7,6 +7,8 @@ import androidx.annotation.Nullable; import androidx.core.app.ActivityOptionsCompat; import androidx.core.util.Pair; +import com.kabouzeid.gramophone.model.Album; +import com.kabouzeid.gramophone.model.Artist; import com.kabouzeid.gramophone.model.Genre; import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity; @@ -16,41 +18,54 @@ import com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity; public class NavigationUtil { - public static void goToArtist(@NonNull final Activity activity, final String artistId, @Nullable Pair... sharedElements) { + public static void goToArtist(@NonNull final Activity activity, final Artist artist, @Nullable Pair... sharedElements) { final Intent intent = new Intent(activity, ArtistDetailActivity.class); - intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST_ID, artistId); + intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST, artist); - if (sharedElements != null && sharedElements.length > 0) { - // noinspection unchecked - activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); - } else { - activity.startActivity(intent); - } + startActivitySharedElements(activity, intent, sharedElements); } - public static void goToAlbum(@NonNull final Activity activity, final String albumId, @Nullable Pair... sharedElements) { + public static void goToAlbum(@NonNull final Activity activity, final Album album, @Nullable Pair... sharedElements) { final Intent intent = new Intent(activity, AlbumDetailActivity.class); - intent.putExtra(AlbumDetailActivity.EXTRA_ALBUM_ID, albumId); + intent.putExtra(AlbumDetailActivity.EXTRA_ALBUM, album); - if (sharedElements != null && sharedElements.length > 0) { - // noinspection unchecked - activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); - } else { - activity.startActivity(intent); - } + startActivitySharedElements(activity, intent, sharedElements); } public static void goToGenre(@NonNull final Activity activity, final Genre genre, @Nullable Pair... sharedElements) { final Intent intent = new Intent(activity, GenreDetailActivity.class); intent.putExtra(GenreDetailActivity.EXTRA_GENRE, genre); - activity.startActivity(intent); + startActivitySharedElements(activity, intent, sharedElements); } public static void goToPlaylist(@NonNull final Activity activity, final Playlist playlist, @Nullable Pair... sharedElements) { final Intent intent = new Intent(activity, PlaylistDetailActivity.class); intent.putExtra(PlaylistDetailActivity.EXTRA_PLAYLIST, playlist); - activity.startActivity(intent); + startActivitySharedElements(activity, intent, sharedElements); + } + + public static void goToArtist(@NonNull final Activity activity, final String artist, @Nullable Pair... sharedElements) { + final Intent intent = new Intent(activity, ArtistDetailActivity.class); + intent.putExtra(ArtistDetailActivity.EXTRA_ARTIST_ID, artist); + + startActivitySharedElements(activity, intent, sharedElements); + } + + public static void goToAlbum(@NonNull final Activity activity, final String album, @Nullable Pair... sharedElements) { + final Intent intent = new Intent(activity, AlbumDetailActivity.class); + intent.putExtra(AlbumDetailActivity.EXTRA_ALBUM_ID, album); + + startActivitySharedElements(activity, intent, sharedElements); + } + + public static void startActivitySharedElements(@NonNull final Activity activity, Intent intent, @Nullable Pair... sharedElements) { + if (sharedElements != null && sharedElements.length > 0) { + // noinspection unchecked + activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle()); + } else { + activity.startActivity(intent); + } } }