initial work for album and artist lists

This commit is contained in:
dkanada 2020-04-25 13:48:20 +09:00
commit ef0f5e500a
19 changed files with 228 additions and 447 deletions

View file

@ -1,11 +1,8 @@
package com.kabouzeid.gramophone.ui.activities;
import android.content.Context;
import android.graphics.PorterDuff;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;
@ -31,26 +28,23 @@ import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.interfaces.LoaderIds;
import com.kabouzeid.gramophone.interfaces.MediaCallback;
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
import com.kabouzeid.gramophone.loader.AlbumLoader;
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.QueryUtil;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder, LoaderManager.LoaderCallbacks<Album> {
private static final int LOADER_ID = LoaderIds.ALBUM_DETAIL_ACTIVITY;
public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder {
public static final String EXTRA_ALBUM_ID = "extra_album_id";
private Album album;
@ -99,7 +93,12 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
setUpToolBar();
setUpViews();
getSupportLoaderManager().initLoader(LOADER_ID, getIntent().getExtras(), this);
QueryUtil.getAlbum(getIntent().getExtras().getString(EXTRA_ALBUM_ID), new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
setAlbum((Album) media.get(0));
}
});
}
@Override
@ -209,10 +208,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
});
}
private void reload() {
getSupportLoaderManager().restartLoader(LOADER_ID, getIntent().getExtras(), this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_album_detail, menu);
@ -291,7 +286,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
reload();
}
@Override
@ -317,34 +311,4 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
if (album == null) album = new Album();
return album;
}
@Override
public Loader<Album> onCreateLoader(int id, Bundle args) {
return new AsyncAlbumLoader(this, args.getInt(EXTRA_ALBUM_ID));
}
@Override
public void onLoadFinished(Loader<Album> loader, Album data) {
setAlbum(data);
}
@Override
public void onLoaderReset(Loader<Album> loader) {
this.album = new Album();
adapter.swapDataSet(album.songs);
}
private static class AsyncAlbumLoader extends WrappedAsyncTaskLoader<Album> {
private final int albumId;
public AsyncAlbumLoader(Context context, int albumId) {
super(context);
this.albumId = albumId;
}
@Override
public Album loadInBackground() {
return AlbumLoader.getAlbum(getContext(), albumId);
}
}
}

View file

@ -1,7 +1,5 @@
package com.kabouzeid.gramophone.ui.activities;
import android.content.Context;
import android.content.Intent;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.view.LayoutInflater;
@ -13,8 +11,6 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
@ -37,22 +33,19 @@ import com.kabouzeid.gramophone.glide.ArtistGlideRequest;
import com.kabouzeid.gramophone.glide.CustomPaletteTarget;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.interfaces.LoaderIds;
import com.kabouzeid.gramophone.interfaces.MediaCallback;
import com.kabouzeid.gramophone.interfaces.PaletteColorHolder;
import com.kabouzeid.gramophone.loader.ArtistLoader;
import com.kabouzeid.gramophone.misc.SimpleObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.PhonographColorUtil;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.QueryUtil;
public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder, LoaderManager.LoaderCallbacks<Artist> {
private static final int LOADER_ID = LoaderIds.ARTIST_DETAIL_ACTIVITY;
public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implements PaletteColorHolder, CabHolder {
public static final String EXTRA_ARTIST_ID = "extra_artist_id";
@BindView(R.id.list)
@ -119,7 +112,12 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
setUpToolbar();
setUpViews();
getSupportLoaderManager().initLoader(LOADER_ID, getIntent().getExtras(), this);
QueryUtil.getArtist(getIntent().getExtras().getString(EXTRA_ARTIST_ID), new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
setArtist((Artist) media.get(0));
}
});
}
@Override
@ -179,10 +177,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
this.usePalette = usePalette;
}
private void reload() {
getSupportLoaderManager().restartLoader(LOADER_ID, getIntent().getExtras(), this);
}
private void loadArtistImage() {
ArtistGlideRequest.Builder.from(Glide.with(this), artist)
.generatePalette(this).build()
@ -305,7 +299,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
@Override
public void onMediaStoreChanged() {
super.onMediaStoreChanged();
reload();
}
@Override
@ -331,35 +324,4 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
if (artist == null) artist = new Artist();
return artist;
}
@Override
public Loader<Artist> onCreateLoader(int id, Bundle args) {
return new AsyncArtistDataLoader(this, args.getInt(EXTRA_ARTIST_ID));
}
@Override
public void onLoadFinished(Loader<Artist> loader, Artist data) {
setArtist(data);
}
@Override
public void onLoaderReset(Loader<Artist> loader) {
this.artist = new Artist();
songAdapter.swapDataSet(artist.getSongs());
albumAdapter.swapDataSet(artist.albums);
}
private static class AsyncArtistDataLoader extends WrappedAsyncTaskLoader<Artist> {
private final int artistId;
public AsyncArtistDataLoader(Context context, int artistId) {
super(context);
this.artistId = artistId;
}
@Override
public Artist loadInBackground() {
return ArtistLoader.getArtist(getContext(), artistId);
}
}
}

View file

@ -1,34 +1,27 @@
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.GridLayoutManager;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.album.AlbumAdapter;
import com.kabouzeid.gramophone.interfaces.LoaderIds;
import com.kabouzeid.gramophone.loader.AlbumLoader;
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
import com.kabouzeid.gramophone.interfaces.MediaCallback;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.QueryUtil;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridLayoutManager> implements LoaderManager.LoaderCallbacks<List<Album>> {
private static final int LOADER_ID = LoaderIds.ALBUMS_FRAGMENT;
public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment<AlbumAdapter, GridLayoutManager> {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(LOADER_ID, null, this);
}
@Override
@ -36,18 +29,22 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
return new GridLayoutManager(getActivity(), getGridSize());
}
@NonNull
@Override
protected AlbumAdapter createAdapter() {
int itemLayoutRes = getItemLayoutRes();
notifyLayoutResChanged(itemLayoutRes);
List<Album> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
return new AlbumAdapter(
getLibraryFragment().getMainActivity(),
dataSet,
itemLayoutRes,
loadUsePalette(),
getLibraryFragment());
AlbumAdapter adapter = new AlbumAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
QueryUtil.getAlbums(new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
dataSet.addAll((Collection<Album>) media);
adapter.notifyDataSetChanged();
}
});
return adapter;
}
@Override
@ -67,7 +64,6 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
@Override
protected void setSortOrder(String sortOrder) {
getLoaderManager().restartLoader(LOADER_ID, null, this);
}
@Override
@ -113,32 +109,6 @@ public class AlbumsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFra
@Override
public void onMediaStoreChanged() {
getLoaderManager().restartLoader(LOADER_ID, null, this);
}
@Override
public Loader<List<Album>> onCreateLoader(int id, Bundle args) {
return new AsyncAlbumLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<List<Album>> loader, List<Album> data) {
getAdapter().swapDataSet(data);
}
@Override
public void onLoaderReset(Loader<List<Album>> loader) {
getAdapter().swapDataSet(new ArrayList<>());
}
private static class AsyncAlbumLoader extends WrappedAsyncTaskLoader<List<Album>> {
public AsyncAlbumLoader(Context context) {
super(context);
}
@Override
public List<Album> loadInBackground() {
return AlbumLoader.getAllAlbums(getContext());
}
super.onMediaStoreChanged();
}
}

View file

@ -1,34 +1,28 @@
package com.kabouzeid.gramophone.ui.fragments.mainactivity.library.pager;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.GridLayoutManager;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.artist.ArtistAdapter;
import com.kabouzeid.gramophone.interfaces.LoaderIds;
import com.kabouzeid.gramophone.loader.ArtistLoader;
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
import com.kabouzeid.gramophone.interfaces.MediaCallback;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.util.PreferenceUtil;
import com.kabouzeid.gramophone.util.QueryUtil;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment<ArtistAdapter, GridLayoutManager> implements LoaderManager.LoaderCallbacks<List<Artist>> {
private static final int LOADER_ID = LoaderIds.ARTISTS_FRAGMENT;
public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFragment<ArtistAdapter, GridLayoutManager> {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(LOADER_ID, null, this);
}
@NonNull
@ -43,22 +37,28 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
int itemLayoutRes = getItemLayoutRes();
notifyLayoutResChanged(itemLayoutRes);
List<Artist> dataSet = getAdapter() == null ? new ArrayList<>() : getAdapter().getDataSet();
return new ArtistAdapter(
getLibraryFragment().getMainActivity(),
dataSet,
itemLayoutRes,
loadUsePalette(),
getLibraryFragment());
ArtistAdapter adapter = new ArtistAdapter(getLibraryFragment().getMainActivity(), dataSet, itemLayoutRes, loadUsePalette(), getLibraryFragment());
QueryUtil.getArtists(new MediaCallback() {
@Override
public void onLoadMedia(List<?> media) {
dataSet.addAll((Collection<Artist>) media);
adapter.notifyDataSetChanged();
}
});
return adapter;
}
@Override
protected int getEmptyMessage() {
return R.string.no_artists;
}
@Override
public void onMediaStoreChanged() {
getLoaderManager().restartLoader(LOADER_ID, null, this);
super.onMediaStoreChanged();
}
@Override
@ -73,7 +73,6 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
@Override
protected void setSortOrder(String sortOrder) {
getLoaderManager().restartLoader(LOADER_ID, null, this);
}
@Override
@ -116,33 +115,4 @@ public class ArtistsFragment extends AbsLibraryPagerRecyclerViewCustomGridSizeFr
getLayoutManager().setSpanCount(gridSize);
getAdapter().notifyDataSetChanged();
}
@Override
public Loader<List<Artist>> onCreateLoader(int id, Bundle args) {
return new AsyncArtistLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<List<Artist>> loader, List<Artist> data) {
getAdapter().swapDataSet(data);
}
@Override
public void onLoaderReset(Loader<List<Artist>> loader) {
getAdapter().swapDataSet(new ArrayList<>());
}
private static class AsyncArtistLoader extends WrappedAsyncTaskLoader<List<Artist>> {
public AsyncArtistLoader(Context context) {
super(context);
}
@Override
public List<Artist> loadInBackground() {
return ArtistLoader.getAllArtists(getContext());
}
}
}