Automatically update the data list in every view when the media store has changed.
This commit is contained in:
parent
73cd0105ec
commit
5c513115e7
6 changed files with 119 additions and 16 deletions
|
|
@ -44,18 +44,23 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
|||
@NonNull
|
||||
private final AppCompatActivity activity;
|
||||
|
||||
public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList<Song> songs, @Nullable CabHolder cabHolder) {
|
||||
super(activity, R.layout.item_list, songs);
|
||||
public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList<Song> dataSet, @Nullable CabHolder cabHolder) {
|
||||
super(activity, R.layout.item_list, dataSet);
|
||||
this.activity = activity;
|
||||
this.cabHolder = cabHolder;
|
||||
this.dataSet = dataSet;
|
||||
checked = new ArrayList<>();
|
||||
dataSet = songs;
|
||||
}
|
||||
|
||||
public ArrayList<Song> getDataSet() {
|
||||
return dataSet;
|
||||
}
|
||||
|
||||
public void swapDataSet(ArrayList<Song> dataSet) {
|
||||
this.dataSet = dataSet;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View getView(final int position, @Nullable View convertView, ViewGroup parent) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import android.support.annotation.NonNull;
|
|||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.util.Pair;
|
||||
import android.support.v7.widget.GridLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.transition.Transition;
|
||||
import android.view.Menu;
|
||||
|
|
@ -35,6 +36,7 @@ import com.kabouzeid.gramophone.loader.AlbumSongLoader;
|
|||
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
||||
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
||||
import com.kabouzeid.gramophone.model.Album;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AbsTagEditorActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.tageditor.AlbumTagEditorActivity;
|
||||
|
|
@ -50,6 +52,8 @@ import com.nostra13.universalimageloader.core.assist.FailReason;
|
|||
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
|
||||
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
|
|
@ -187,7 +191,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
|
||||
private void setUpViews() {
|
||||
albumTitleView.setText(album.title);
|
||||
setUpListView();
|
||||
setUpRecyclerViewView();
|
||||
setUpSongsAdapter();
|
||||
setUpAlbumArtAndApplyPalette();
|
||||
}
|
||||
|
|
@ -267,7 +271,7 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
return toolbarColor;
|
||||
}
|
||||
|
||||
private void setUpListView() {
|
||||
private void setUpRecyclerViewView() {
|
||||
recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks);
|
||||
recyclerView.setPadding(0, albumArtViewHeight + titleViewHeight, 0, bottomOffset);
|
||||
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
||||
|
|
@ -290,9 +294,24 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
}
|
||||
|
||||
private void setUpSongsAdapter() {
|
||||
adapter = new AlbumSongAdapter(this, AlbumSongLoader.getAlbumSongList(this, album.id), R.layout.item_list, this);
|
||||
adapter = new AlbumSongAdapter(this, loadSongDataSet(), R.layout.item_list, this);
|
||||
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
|
||||
recyclerView.setAdapter(adapter);
|
||||
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
|
||||
@Override
|
||||
public void onChanged() {
|
||||
super.onChanged();
|
||||
if (adapter.getItemCount() == 0) finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void reloadDataSet() {
|
||||
adapter.swapDataSet(loadSongDataSet());
|
||||
}
|
||||
|
||||
private ArrayList<Song> loadSongDataSet() {
|
||||
return AlbumSongLoader.getAlbumSongList(this, album.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -395,4 +414,10 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
|||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaStoreChanged() {
|
||||
super.onMediaStoreChanged();
|
||||
reloadDataSet();
|
||||
}
|
||||
}
|
||||
|
|
@ -43,7 +43,9 @@ import com.kabouzeid.gramophone.loader.ArtistLoader;
|
|||
import com.kabouzeid.gramophone.loader.ArtistSongLoader;
|
||||
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
|
||||
import com.kabouzeid.gramophone.misc.SmallTransitionListener;
|
||||
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.ColorUtil;
|
||||
import com.kabouzeid.gramophone.util.MusicUtil;
|
||||
|
|
@ -58,6 +60,8 @@ import com.nostra13.universalimageloader.core.assist.FailReason;
|
|||
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
|
||||
import com.nostra13.universalimageloader.core.process.BitmapProcessor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
import retrofit.Callback;
|
||||
|
|
@ -226,7 +230,7 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, bottomOffset);
|
||||
songListView.addHeaderView(songListHeader);
|
||||
|
||||
songAdapter = new ArtistSongAdapter(this, ArtistSongLoader.getArtistSongList(this, artist.id), this);
|
||||
songAdapter = new ArtistSongAdapter(this, loadSongDataSet(), this);
|
||||
songListView.setAdapter(songAdapter);
|
||||
|
||||
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
||||
|
|
@ -241,8 +245,28 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
|
||||
private void setUpAlbumRecyclerView() {
|
||||
albumRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
|
||||
albumAdapter = new HorizontalAlbumAdapter(this, ArtistAlbumLoader.getArtistAlbumList(this, artist.id), this);
|
||||
albumAdapter = new HorizontalAlbumAdapter(this, loadAlbumDataSet(), this);
|
||||
albumRecyclerView.setAdapter(albumAdapter);
|
||||
albumAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
|
||||
@Override
|
||||
public void onChanged() {
|
||||
super.onChanged();
|
||||
if (albumAdapter.getItemCount() == 0) finish();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void reloadDataSets() {
|
||||
songAdapter.swapDataSet(loadSongDataSet());
|
||||
albumAdapter.swapDataSet(loadAlbumDataSet());
|
||||
}
|
||||
|
||||
private ArrayList<Song> loadSongDataSet() {
|
||||
return ArtistSongLoader.getArtistSongList(this, artist.id);
|
||||
}
|
||||
|
||||
private ArrayList<Album> loadAlbumDataSet() {
|
||||
return ArtistAlbumLoader.getArtistAlbumList(this, artist.id);
|
||||
}
|
||||
|
||||
private void loadBiography() {
|
||||
|
|
@ -496,4 +520,10 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
|||
super.onBackPressed();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaStoreChanged() {
|
||||
super.onMediaStoreChanged();
|
||||
reloadDataSets();
|
||||
}
|
||||
}
|
||||
|
|
@ -21,6 +21,7 @@ import com.kabouzeid.gramophone.interfaces.CabHolder;
|
|||
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
|
||||
import com.kabouzeid.gramophone.misc.DragSortRecycler;
|
||||
import com.kabouzeid.gramophone.model.Playlist;
|
||||
import com.kabouzeid.gramophone.model.PlaylistSong;
|
||||
import com.kabouzeid.gramophone.model.Song;
|
||||
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsSlidingMusicPanelActivity;
|
||||
|
|
@ -28,6 +29,9 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
|
|||
import com.kabouzeid.gramophone.util.PlaylistsUtil;
|
||||
import com.kabouzeid.gramophone.util.PreferenceUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
|
|
@ -71,9 +75,9 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
private void setUpRecyclerView() {
|
||||
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
|
||||
if (playlist instanceof AbsSmartPlaylist) {
|
||||
adapter = new SmartPlaylistSongAdapter(this, ((AbsSmartPlaylist) playlist).getSongs(this), R.layout.item_list, this);
|
||||
adapter = new SmartPlaylistSongAdapter(this, loadSmartPlaylistDataSet(), R.layout.item_list, this);
|
||||
} else {
|
||||
adapter = new PlaylistSongAdapter(this, PlaylistSongLoader.getPlaylistSongList(this, playlist.id), R.layout.item_list, this);
|
||||
adapter = new PlaylistSongAdapter(this, loadPlaylistDataSet(), R.layout.item_list, this);
|
||||
|
||||
DragSortRecycler dragSortRecycler = new DragSortRecycler();
|
||||
dragSortRecycler.setViewHandleId(R.id.image);
|
||||
|
|
@ -96,6 +100,31 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
recyclerView.setItemAnimator(null);
|
||||
}
|
||||
recyclerView.setAdapter(adapter);
|
||||
|
||||
adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
|
||||
@Override
|
||||
public void onChanged() {
|
||||
super.onChanged();
|
||||
checkIsEmpty();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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() {
|
||||
|
|
@ -170,6 +199,12 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaStoreChanged() {
|
||||
super.onMediaStoreChanged();
|
||||
reloadDataSet();
|
||||
}
|
||||
|
||||
private void checkIsEmpty() {
|
||||
empty.setVisibility(
|
||||
adapter.getItemCount() == 0 ? View.VISIBLE : View.GONE
|
||||
|
|
|
|||
|
|
@ -21,13 +21,13 @@ import android.widget.TextView;
|
|||
|
||||
import com.kabouzeid.gramophone.R;
|
||||
import com.kabouzeid.gramophone.adapter.SearchAdapter;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsBaseActivity;
|
||||
import com.kabouzeid.gramophone.ui.activities.base.AbsMusicStateActivity;
|
||||
import com.kabouzeid.gramophone.util.Util;
|
||||
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
|
||||
public class SearchActivity extends AbsBaseActivity {
|
||||
public class SearchActivity extends AbsMusicStateActivity {
|
||||
|
||||
public static final String TAG = SearchActivity.class.getSimpleName();
|
||||
@Bind(R.id.recycler_view)
|
||||
|
|
@ -38,10 +38,11 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
@Bind(android.R.id.empty)
|
||||
TextView empty;
|
||||
|
||||
|
||||
private SearchView searchView;
|
||||
private SearchAdapter searchAdapter;
|
||||
|
||||
private String searchQuery = "";
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
|
@ -138,9 +139,16 @@ public class SearchActivity extends AbsBaseActivity {
|
|||
}
|
||||
|
||||
private void search(@NonNull String query) {
|
||||
searchQuery = query;
|
||||
if (searchAdapter != null) {
|
||||
searchAdapter.search(query);
|
||||
empty.setVisibility(searchAdapter.getItemCount() < 1 ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMediaStoreChanged() {
|
||||
super.onMediaStoreChanged();
|
||||
search(searchQuery);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
|
|||
|
||||
setUpRecyclerView();
|
||||
|
||||
showEmptyMessageIfEmpty();
|
||||
checkIsEmpty();
|
||||
}
|
||||
|
||||
private void setUpRecyclerView() {
|
||||
|
|
@ -73,7 +73,7 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
|
|||
@Override
|
||||
public void onChanged() {
|
||||
super.onChanged();
|
||||
showEmptyMessageIfEmpty();
|
||||
checkIsEmpty();
|
||||
}
|
||||
});
|
||||
recyclerView.setAdapter(adapter);
|
||||
|
|
@ -131,7 +131,7 @@ public abstract class AbsMainActivityRecyclerViewFragment<A extends RecyclerView
|
|||
recyclerView.setEnabled(false);
|
||||
}
|
||||
|
||||
private void showEmptyMessageIfEmpty() {
|
||||
private void checkIsEmpty() {
|
||||
if (empty != null) {
|
||||
RecyclerView.Adapter adapter = getAdapter();
|
||||
if (adapter != null) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue