initial fixes for playlist detail activity

This commit is contained in:
dkanada 2020-04-29 17:57:45 +09:00
commit 1366060040

View file

@ -1,6 +1,5 @@
package com.kabouzeid.gramophone.ui.activities; package com.kabouzeid.gramophone.ui.activities;
import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -9,8 +8,6 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -27,28 +24,27 @@ import com.kabouzeid.gramophone.adapter.song.SongAdapter;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote; import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper; import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.interfaces.LoaderIds; import com.kabouzeid.gramophone.interfaces.MediaCallback;
import com.kabouzeid.gramophone.loader.PlaylistLoader; import com.kabouzeid.gramophone.loader.PlaylistLoader;
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.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity; import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
import com.kabouzeid.gramophone.util.QueryUtil;
import com.kabouzeid.gramophone.util.ThemeUtil; import com.kabouzeid.gramophone.util.ThemeUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil; import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.ViewUtil; import com.kabouzeid.gramophone.util.ViewUtil;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
import org.jellyfin.apiclient.model.querying.ItemQuery;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity implements CabHolder, LoaderManager.LoaderCallbacks<List<Song>> { public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity implements CabHolder {
private static final int LOADER_ID = LoaderIds.PLAYLIST_DETAIL_ACTIVITY;
@NonNull @NonNull
public static String EXTRA_PLAYLIST = "extra_playlist"; public static String EXTRA_PLAYLIST = "extra_playlist";
@ -81,10 +77,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
playlist = getIntent().getExtras().getParcelable(EXTRA_PLAYLIST); playlist = getIntent().getExtras().getParcelable(EXTRA_PLAYLIST);
setUpRecyclerView(); setUpRecyclerView();
setUpToolbar(); setUpToolbar();
getSupportLoaderManager().initLoader(LOADER_ID, null, this);
} }
@Override @Override
@ -108,6 +101,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
adapter.notifyItemMoved(fromPosition, toPosition); adapter.notifyItemMoved(fromPosition, toPosition);
} }
}); });
wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter); wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter);
recyclerView.setAdapter(wrappedAdapter); recyclerView.setAdapter(wrappedAdapter);
@ -167,13 +161,15 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
.setCloseDrawableRes(R.drawable.ic_close_white_24dp) .setCloseDrawableRes(R.drawable.ic_close_white_24dp)
.setBackgroundColor(ThemeUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this))) .setBackgroundColor(ThemeUtil.shiftBackgroundColorForLightText(ThemeStore.primaryColor(this)))
.start(callback); .start(callback);
return cab; return cab;
} }
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (cab != null && cab.isActive()) cab.finish(); if (cab != null && cab.isActive()) {
else { cab.finish();
} else {
recyclerView.stopScroll(); recyclerView.stopScroll();
super.onBackPressed(); super.onBackPressed();
} }
@ -197,8 +193,6 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
setToolbarTitle(playlist.name); setToolbarTitle(playlist.name);
} }
} }
getSupportLoaderManager().restartLoader(LOADER_ID, null, this);
} }
private void checkIsEmpty() { private void checkIsEmpty() {
@ -232,44 +226,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
WrapperAdapterUtils.releaseAll(wrappedAdapter); WrapperAdapterUtils.releaseAll(wrappedAdapter);
wrappedAdapter = null; wrappedAdapter = null;
} }
adapter = null;
adapter = null;
super.onDestroy(); super.onDestroy();
} }
@Override
public Loader<List<Song>> onCreateLoader(int id, Bundle args) {
return new AsyncPlaylistSongLoader(this, playlist);
}
@Override
public void onLoadFinished(Loader<List<Song>> loader, List<Song> data) {
if (adapter != null)
adapter.swapDataSet(data);
}
@Override
public void onLoaderReset(Loader<List<Song>> loader) {
if (adapter != null)
adapter.swapDataSet(new ArrayList<>());
}
private static class AsyncPlaylistSongLoader extends WrappedAsyncTaskLoader<List<Song>> {
private final Playlist playlist;
public AsyncPlaylistSongLoader(Context context, Playlist playlist) {
super(context);
this.playlist = playlist;
}
@Override
public List<Song> loadInBackground() {
if (playlist instanceof AbsSmartPlaylist) {
return ((AbsSmartPlaylist) playlist).getSongs(getContext());
} else {
//noinspection unchecked
return (List) PlaylistSongLoader.getPlaylistSongList(getContext(), playlist.id.hashCode());
}
}
}
} }