diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java index 4f6d12ae..8a851966 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/song/ArtistSongAdapter.java @@ -44,18 +44,23 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab @NonNull private final AppCompatActivity activity; - public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList songs, @Nullable CabHolder cabHolder) { - super(activity, R.layout.item_list, songs); + public ArtistSongAdapter(@NonNull AppCompatActivity activity, @NonNull ArrayList 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 getDataSet() { return dataSet; } + public void swapDataSet(ArrayList dataSet) { + this.dataSet = dataSet; + notifyDataSetChanged(); + } + @Nullable @Override public View getView(final int position, @Nullable View convertView, ViewGroup parent) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java index 72c50313..5043d71a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/AlbumDetailActivity.java @@ -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 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(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java index d0dfc30c..3c6b027d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/ArtistDetailActivity.java @@ -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 loadSongDataSet() { + return ArtistSongLoader.getArtistSongList(this, artist.id); + } + + private ArrayList 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(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java index f1763477..f3b5e11e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/PlaylistDetailActivity.java @@ -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) (List) loadPlaylistDataSet()); + } + } + + private ArrayList loadPlaylistDataSet() { + return PlaylistSongLoader.getPlaylistSongList(this, playlist.id); + } + + private ArrayList 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 diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java index 46ac69c7..9a5c0353 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SearchActivity.java @@ -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); + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java index 84e21d36..d7e79082 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/fragments/mainactivityfragments/AbsMainActivityRecyclerViewFragment.java @@ -59,7 +59,7 @@ public abstract class AbsMainActivityRecyclerViewFragment