pass items between activities to improve load times

This commit is contained in:
dkanada 2020-05-03 02:22:23 +09:00
commit 35f7c0cb2a
11 changed files with 90 additions and 32 deletions

View file

@ -147,12 +147,12 @@ public class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.ViewHolder
switch (getItemViewType()) { switch (getItemViewType()) {
case ALBUM: case ALBUM:
NavigationUtil.goToAlbum(activity, NavigationUtil.goToAlbum(activity,
((Album) item).getId(), (Album) item,
Pair.create(image, activity.getResources().getString(R.string.transition_album_art))); Pair.create(image, activity.getResources().getString(R.string.transition_album_art)));
break; break;
case ARTIST: case ARTIST:
NavigationUtil.goToArtist(activity, NavigationUtil.goToArtist(activity,
((Artist) item).getId(), (Artist) item,
Pair.create(image, activity.getResources().getString(R.string.transition_artist_image))); Pair.create(image, activity.getResources().getString(R.string.transition_artist_image)));
break; break;
case SONG: case SONG:

View file

@ -217,7 +217,7 @@ public class AlbumAdapter extends AbsMultiSelectAdapter<AlbumAdapter.ViewHolder,
toggleChecked(getAdapterPosition()); toggleChecked(getAdapterPosition());
} else { } else {
Pair[] albumPairs = new Pair[]{Pair.create(image, activity.getResources().getString(R.string.transition_album_art))}; Pair[] albumPairs = new Pair[]{Pair.create(image, activity.getResources().getString(R.string.transition_album_art))};
NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()).getId(), albumPairs); NavigationUtil.goToAlbum(activity, dataSet.get(getAdapterPosition()), albumPairs);
} }
} }

View file

@ -202,7 +202,7 @@ public class ArtistAdapter extends AbsMultiSelectAdapter<ArtistAdapter.ViewHolde
toggleChecked(getAdapterPosition()); toggleChecked(getAdapterPosition());
} else { } else {
Pair[] artistPairs = new Pair[]{Pair.create(image, activity.getResources().getString(R.string.transition_artist_image))}; Pair[] artistPairs = new Pair[]{Pair.create(image, activity.getResources().getString(R.string.transition_artist_image))};
NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()).getId(), artistPairs); NavigationUtil.goToArtist(activity, dataSet.get(getAdapterPosition()), artistPairs);
} }
} }

View file

@ -11,6 +11,8 @@ public class AudioFileCover {
public AudioFileCover(String item) { public AudioFileCover(String item) {
ImageOptions options = new ImageOptions(); ImageOptions options = new ImageOptions();
options.setImageType(ImageType.Primary); options.setImageType(ImageType.Primary);
options.setQuality(60);
options.setMaxHeight(800);
this.location = App.getApiClient().GetImageUrl(item, options); this.location = App.getApiClient().GetImageUrl(item, options);
} }

View file

@ -84,11 +84,23 @@ public class Album implements Parcelable {
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedList(songs); dest.writeString(id);
dest.writeString(title);
dest.writeInt(year);
dest.writeString(artistId);
dest.writeString(artistName);
} }
protected Album(Parcel in) { protected Album(Parcel in) {
this.songs = in.createTypedArrayList(Song.CREATOR); this.songs = new ArrayList<>();
this.id = in.readString();
this.title = in.readString();
this.year = in.readInt();
this.artistId = in.readString();
this.artistName = in.readString();
} }
public static final Creator<Album> CREATOR = new Creator<Album>() { public static final Creator<Album> CREATOR = new Creator<Album>() {

View file

@ -85,11 +85,19 @@ public class Artist implements Parcelable {
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedList(this.albums); dest.writeString(id);
dest.writeString(name);
dest.writeLong(duration);
} }
protected Artist(Parcel in) { 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<Artist> CREATOR = new Parcelable.Creator<Artist>() { public static final Parcelable.Creator<Artist> CREATOR = new Parcelable.Creator<Artist>() {

View file

@ -45,6 +45,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder { 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"; public static final String EXTRA_ALBUM_ID = "extra_album_id";
private Album album; private Album album;
@ -93,7 +94,15 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
setUpToolBar(); setUpToolBar();
setUpViews(); 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 @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
Album album = (Album) media.get(0); Album album = (Album) media.get(0);

View file

@ -48,6 +48,7 @@ import com.kabouzeid.gramophone.util.QueryUtil;
import org.jellyfin.apiclient.model.querying.ItemQuery; import org.jellyfin.apiclient.model.querying.ItemQuery;
public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder { 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"; public static final String EXTRA_ARTIST_ID = "extra_artist_id";
@BindView(R.id.list) @BindView(R.id.list)
@ -114,7 +115,15 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
setUpToolbar(); setUpToolbar();
setUpViews(); 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 @Override
public void onLoadMedia(List<?> media) { public void onLoadMedia(List<?> media) {
Artist artist = (Artist) media.get(0); Artist artist = (Artist) media.get(0);
@ -240,7 +249,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
private void setUpToolbar() { private void setUpToolbar() {
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
//noinspection ConstantConditions // noinspection ConstantConditions
getSupportActionBar().setTitle(null); getSupportActionBar().setTitle(null);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} }
@ -339,8 +348,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
albumCountTextView.setText(MusicUtil.getAlbumCountString(this, artist.getAlbumCount())); albumCountTextView.setText(MusicUtil.getAlbumCountString(this, artist.getAlbumCount()));
durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, artist.getSongs()))); durationTextView.setText(MusicUtil.getReadableDurationString(MusicUtil.getTotalDuration(this, artist.getSongs())));
songAdapter.swapDataSet(artist.getSongs()); // TODO this activity will crash when an artist is passed with an empty album array
albumAdapter.swapDataSet(artist.albums); // 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() { private Artist getArtist() {

View file

@ -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(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment, null).commit();
currentFragment = (MainActivityFragmentCallbacks) fragment; currentFragment = (MainActivityFragmentCallbacks) fragment;
} }

View file

@ -139,6 +139,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde
if (PreferenceUtil.getInstance(getContext()).getRememberLastTab()) { if (PreferenceUtil.getInstance(getContext()).getRememberLastTab()) {
pager.setCurrentItem(PreferenceUtil.getInstance(getContext()).getLastTab()); pager.setCurrentItem(PreferenceUtil.getInstance(getContext()).getLastTab());
} }
pager.addOnPageChangeListener(this); pager.addOnPageChangeListener(this);
} }

View file

@ -7,6 +7,8 @@ import androidx.annotation.Nullable;
import androidx.core.app.ActivityOptionsCompat; import androidx.core.app.ActivityOptionsCompat;
import androidx.core.util.Pair; 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.Genre;
import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity; import com.kabouzeid.gramophone.ui.activities.AlbumDetailActivity;
@ -16,41 +18,54 @@ import com.kabouzeid.gramophone.ui.activities.PlaylistDetailActivity;
public class NavigationUtil { 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); 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) { startActivitySharedElements(activity, intent, sharedElements);
// noinspection unchecked
activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle());
} else {
activity.startActivity(intent);
}
} }
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); 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) { startActivitySharedElements(activity, intent, sharedElements);
// noinspection unchecked
activity.startActivity(intent, ActivityOptionsCompat.makeSceneTransitionAnimation(activity, sharedElements).toBundle());
} else {
activity.startActivity(intent);
}
} }
public static void goToGenre(@NonNull final Activity activity, final Genre genre, @Nullable Pair... sharedElements) { public static void goToGenre(@NonNull final Activity activity, final Genre genre, @Nullable Pair... sharedElements) {
final Intent intent = new Intent(activity, GenreDetailActivity.class); final Intent intent = new Intent(activity, GenreDetailActivity.class);
intent.putExtra(GenreDetailActivity.EXTRA_GENRE, genre); 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) { public static void goToPlaylist(@NonNull final Activity activity, final Playlist playlist, @Nullable Pair... sharedElements) {
final Intent intent = new Intent(activity, PlaylistDetailActivity.class); final Intent intent = new Intent(activity, PlaylistDetailActivity.class);
intent.putExtra(PlaylistDetailActivity.EXTRA_PLAYLIST, playlist); 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);
}
} }
} }