Async playlist song loading.
This commit is contained in:
parent
06096ca8f5
commit
c351921855
6 changed files with 54 additions and 49 deletions
|
|
@ -340,9 +340,6 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
public void onLoadFinished(Loader<Album> loader, Album data) {
|
public void onLoadFinished(Loader<Album> loader, Album data) {
|
||||||
supportStartPostponedEnterTransition();
|
supportStartPostponedEnterTransition();
|
||||||
setAlbum(data);
|
setAlbum(data);
|
||||||
if (getAlbum().songs.isEmpty()) {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -421,9 +421,6 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
public void onLoadFinished(Loader<ArtistData> loader, ArtistData data) {
|
public void onLoadFinished(Loader<ArtistData> loader, ArtistData data) {
|
||||||
supportStartPostponedEnterTransition();
|
supportStartPostponedEnterTransition();
|
||||||
setArtistData(data);
|
setArtistData(data);
|
||||||
if (getArtistData().albums.isEmpty()) {
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
package com.kabouzeid.gramophone.ui.activities;
|
package com.kabouzeid.gramophone.ui.activities;
|
||||||
|
|
||||||
import android.os.Build;
|
import android.content.Context;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
|
import android.support.v4.app.LoaderManager;
|
||||||
|
import android.support.v4.content.Loader;
|
||||||
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.LinearLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.transition.Slide;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
@ -26,6 +27,7 @@ import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
|
||||||
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
|
||||||
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
import com.kabouzeid.gramophone.interfaces.CabHolder;
|
||||||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||||
|
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
|
||||||
import com.kabouzeid.gramophone.model.Playlist;
|
import com.kabouzeid.gramophone.model.Playlist;
|
||||||
import com.kabouzeid.gramophone.model.PlaylistSong;
|
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||||
import com.kabouzeid.gramophone.model.Song;
|
import com.kabouzeid.gramophone.model.Song;
|
||||||
|
|
@ -41,10 +43,12 @@ import java.util.List;
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
|
|
||||||
public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity implements CabHolder {
|
public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity implements CabHolder, LoaderManager.LoaderCallbacks<ArrayList<Song>> {
|
||||||
|
|
||||||
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
|
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
|
||||||
|
|
||||||
|
private static final int LOADER_ID = 1;
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static String EXTRA_PLAYLIST = "extra_playlist";
|
public static String EXTRA_PLAYLIST = "extra_playlist";
|
||||||
|
|
||||||
|
|
@ -56,6 +60,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
TextView empty;
|
TextView empty;
|
||||||
|
|
||||||
private Playlist playlist;
|
private Playlist playlist;
|
||||||
|
|
||||||
private MaterialCab cab;
|
private MaterialCab cab;
|
||||||
private SongAdapter adapter;
|
private SongAdapter adapter;
|
||||||
|
|
||||||
|
|
@ -72,17 +77,13 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
setNavigationbarColorAuto();
|
setNavigationbarColorAuto();
|
||||||
setTaskDescriptionColorAuto();
|
setTaskDescriptionColorAuto();
|
||||||
|
|
||||||
getIntentExtras();
|
playlist = getIntent().getExtras().getParcelable(EXTRA_PLAYLIST);
|
||||||
|
|
||||||
setUpRecyclerView();
|
setUpRecyclerView();
|
||||||
|
|
||||||
checkIsEmpty();
|
|
||||||
|
|
||||||
setUpToolBar();
|
setUpToolBar();
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
getSupportLoaderManager().initLoader(LOADER_ID, null, this);
|
||||||
getWindow().setEnterTransition(new Slide());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -93,12 +94,12 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
private void setUpRecyclerView() {
|
private void setUpRecyclerView() {
|
||||||
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
recyclerView.setLayoutManager(new LinearLayoutManager(this));
|
||||||
if (playlist instanceof AbsSmartPlaylist) {
|
if (playlist instanceof AbsSmartPlaylist) {
|
||||||
adapter = new SmartPlaylistSongAdapter(this, loadSmartPlaylistDataSet(), R.layout.item_list, false, this);
|
adapter = new SmartPlaylistSongAdapter(this, new ArrayList<Song>(), R.layout.item_list, false, this);
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
} else {
|
} else {
|
||||||
recyclerViewDragDropManager = new RecyclerViewDragDropManager();
|
recyclerViewDragDropManager = new RecyclerViewDragDropManager();
|
||||||
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
|
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
|
||||||
adapter = new PlaylistSongAdapter(this, loadPlaylistDataSet(), R.layout.item_list, false, this, new PlaylistSongAdapter.OnMoveItemListener() {
|
adapter = new PlaylistSongAdapter(this, new ArrayList<PlaylistSong>(), R.layout.item_list, false, this, new PlaylistSongAdapter.OnMoveItemListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onMoveItem(int fromPosition, int toPosition) {
|
public void onMoveItem(int fromPosition, int toPosition) {
|
||||||
if (PlaylistsUtil.moveItem(PlaylistDetailActivity.this, playlist.id, fromPosition, toPosition)) {
|
if (PlaylistsUtil.moveItem(PlaylistDetailActivity.this, playlist.id, fromPosition, toPosition)) {
|
||||||
|
|
@ -125,23 +126,6 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reloadDataSet() {
|
|
||||||
if (playlist instanceof AbsSmartPlaylist) {
|
|
||||||
adapter.swapDataSet(loadSmartPlaylistDataSet());
|
|
||||||
} else {
|
|
||||||
//noinspection unchecked
|
|
||||||
adapter.swapDataSet((ArrayList<Song>) (List) loadPlaylistDataSet());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayList<PlaylistSong> loadPlaylistDataSet() {
|
|
||||||
return PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayList<Song> loadSmartPlaylistDataSet() {
|
|
||||||
return ((AbsSmartPlaylist) playlist).getSongs(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpToolBar() {
|
private void setUpToolBar() {
|
||||||
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
toolbar.setBackgroundColor(ThemeStore.primaryColor(this));
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
|
@ -150,18 +134,6 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getIntentExtras() {
|
|
||||||
Bundle intentExtras = getIntent().getExtras();
|
|
||||||
try {
|
|
||||||
playlist = intentExtras.getParcelable(EXTRA_PLAYLIST);
|
|
||||||
} catch (ClassCastException ignored) {
|
|
||||||
}
|
|
||||||
if (playlist == null) {
|
|
||||||
playlist = new Playlist();
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
|
getMenuInflater().inflate(R.menu.menu_playlist_detail, menu);
|
||||||
|
|
@ -188,6 +160,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
return super.onOptionsItemSelected(item);
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
|
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
|
||||||
if (cab != null && cab.isActive()) cab.finish();
|
if (cab != null && cab.isActive()) cab.finish();
|
||||||
|
|
@ -211,7 +184,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
@Override
|
@Override
|
||||||
public void onMediaStoreChanged() {
|
public void onMediaStoreChanged() {
|
||||||
super.onMediaStoreChanged();
|
super.onMediaStoreChanged();
|
||||||
reloadDataSet();
|
getSupportLoaderManager().restartLoader(LOADER_ID, null, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkIsEmpty() {
|
private void checkIsEmpty() {
|
||||||
|
|
@ -249,4 +222,40 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Loader<ArrayList<Song>> onCreateLoader(int id, Bundle args) {
|
||||||
|
return new AsyncPlaylistSongLoader(this, playlist);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoadFinished(Loader<ArrayList<Song>> loader, ArrayList<Song> data) {
|
||||||
|
if (adapter != null)
|
||||||
|
adapter.swapDataSet(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoaderReset(Loader<ArrayList<Song>> loader) {
|
||||||
|
if (adapter != null)
|
||||||
|
adapter.swapDataSet(new ArrayList<Song>());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class AsyncPlaylistSongLoader extends WrappedAsyncTaskLoader<ArrayList<Song>> {
|
||||||
|
private final Playlist playlist;
|
||||||
|
|
||||||
|
public AsyncPlaylistSongLoader(Context context, Playlist playlist) {
|
||||||
|
super(context);
|
||||||
|
this.playlist = playlist;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<Song> loadInBackground() {
|
||||||
|
if (playlist instanceof AbsSmartPlaylist) {
|
||||||
|
return ((AbsSmartPlaylist) playlist).getSongs(getContext());
|
||||||
|
} else {
|
||||||
|
//noinspection unchecked
|
||||||
|
return (ArrayList<Song>) (List) PlaylistSongLoader.getPlaylistSongList(getContext(), playlist.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@ public abstract class AbsLibraryPagerRecyclerViewFragment<A extends RecyclerView
|
||||||
|
|
||||||
protected void invalidateAdapter() {
|
protected void invalidateAdapter() {
|
||||||
initAdapter();
|
initAdapter();
|
||||||
|
checkIsEmpty();
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -89,7 +90,6 @@ public abstract class AbsLibraryPagerRecyclerViewFragment<A extends RecyclerView
|
||||||
checkIsEmpty();
|
checkIsEmpty();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
checkIsEmpty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initLayoutManager() {
|
private void initLayoutManager() {
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:visibility="gone"
|
||||||
android:id="@android:id/empty"
|
android:id="@android:id/empty"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
android:fontFamily="sans-serif-light"
|
android:fontFamily="sans-serif-light"
|
||||||
android:text="@string/empty"
|
android:text="@string/empty"
|
||||||
android:textColor="?android:textColorSecondary"
|
android:textColor="?android:textColorSecondary"
|
||||||
android:textSize="@dimen/empty_text_size" />
|
android:textSize="@dimen/empty_text_size"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue