Added multi select everywhere else and auto updates every activity after the music database changed. Fix issue #4

This commit is contained in:
Karim Abou Zeid 2015-05-25 19:49:10 +02:00
commit 3067d6d637
15 changed files with 380 additions and 76 deletions

View file

@ -30,6 +30,7 @@ import com.kabouzeid.gramophone.loader.AlbumSongLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
@ -60,6 +61,8 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
private Album album;
private ObservableRecyclerView recyclerView;
private AlbumSongAdapter adapter;
private ArrayList<Song> songs;
private View statusBar;
private ImageView albumArtImageView;
private View songsBackgroundView;
@ -281,10 +284,10 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
}
private void setUpSongsAdapter() {
final ArrayList<Song> songs = AlbumSongLoader.getAlbumSongList(this, album.id);
final AlbumSongAdapter albumSongAdapter = new AlbumSongAdapter(this, songs, this);
songs = AlbumSongLoader.getAlbumSongList(this, album.id);
adapter = new AlbumSongAdapter(this, songs, this);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(albumSongAdapter);
recyclerView.setAdapter(adapter);
}
@Override
@ -348,6 +351,19 @@ public class AlbumDetailActivity extends AbsFabActivity implements PaletteColorH
}
}
@Subscribe
public void onDataBaseEvent(DataBaseChangedEvent event) {
switch (event.getAction()) {
case DataBaseChangedEvent.SONGS_CHANGED:
case DataBaseChangedEvent.ALBUMS_CHANGED:
case DataBaseChangedEvent.DATABASE_CHANGED:
songs = AlbumSongLoader.getAlbumSongList(this, album.id);
adapter.updateDataSet(songs);
if (songs.size() < 1) finish();
break;
}
}
@Subscribe
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
switch (event.getAction()) {

View file

@ -41,6 +41,7 @@ import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.SmallObservableScrollViewCallbacks;
import com.kabouzeid.gramophone.model.Album;
import com.kabouzeid.gramophone.model.Artist;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.UIPreferenceChangedEvent;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
@ -56,7 +57,6 @@ import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListene
import com.squareup.otto.Subscribe;
import java.util.ArrayList;
import java.util.List;
/**
* A lot of hackery is done in this activity. Changing things may will brake the whole activity.
@ -86,6 +86,9 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
private RecyclerView albumRecyclerView;
private Spanned biography;
private ArtistAlbumAdapter albumAdapter;
private ArtistSongAdapter songAdapter;
private ArrayList<Song> songs;
private ArrayList<Album> albums;
private final SmallObservableScrollViewCallbacks observableScrollViewCallbacks = new SmallObservableScrollViewCallbacks() {
@Override
@ -211,8 +214,8 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
songListView.setPadding(0, artistImageViewHeight + titleViewHeight, 0, bottomOffset);
songListView.addHeaderView(songListHeader);
final ArrayList<Song> songs = ArtistSongLoader.getArtistSongList(this, artist.id);
ArtistSongAdapter songAdapter = new ArtistSongAdapter(this, songs, this);
songs = ArtistSongLoader.getArtistSongList(this, artist.id);
songAdapter = new ArtistSongAdapter(this, songs, this);
songListView.setAdapter(songAdapter);
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
@ -227,7 +230,7 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
private void setUpAlbumRecyclerView() {
albumRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
List<Album> albums = ArtistAlbumLoader.getArtistAlbumList(this, artist.id);
albums = ArtistAlbumLoader.getArtistAlbumList(this, artist.id);
albumAdapter = new ArtistAlbumAdapter(this, albums, this);
albumRecyclerView.setAdapter(albumAdapter);
}
@ -431,6 +434,22 @@ public class ArtistDetailActivity extends AbsFabActivity implements PaletteColor
});
}
@Subscribe
public void onDataBaseEvent(DataBaseChangedEvent event) {
switch (event.getAction()) {
case DataBaseChangedEvent.SONGS_CHANGED:
case DataBaseChangedEvent.ALBUMS_CHANGED:
case DataBaseChangedEvent.ARTISTS_CHANGED:
case DataBaseChangedEvent.DATABASE_CHANGED:
songs = ArtistSongLoader.getArtistSongList(this, artist.id);
songAdapter.updateDataSet(songs);
albums = ArtistAlbumLoader.getArtistAlbumList(this, artist.id);
albumAdapter.updateDataSet(albums);
if (songs.size() < 1) finish();
break;
}
}
@Subscribe
public void onUIPreferenceChanged(UIPreferenceChangedEvent event) {
switch (event.getAction()) {

View file

@ -10,12 +10,16 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import com.afollestad.materialcab.MaterialCab;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.songadapter.PlaylistSongAdapter;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.loader.PlaylistLoader;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.misc.AppKeys;
import com.kabouzeid.gramophone.misc.DragSortRecycler;
import com.kabouzeid.gramophone.model.DataBaseChangedEvent;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.PlaylistSong;
import com.kabouzeid.gramophone.ui.activities.base.AbsFabActivity;
@ -23,13 +27,17 @@ import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import com.kabouzeid.gramophone.util.PreferenceUtils;
import com.kabouzeid.gramophone.util.Util;
import com.squareup.otto.Subscribe;
import java.util.ArrayList;
public class PlaylistDetailActivity extends AbsFabActivity {
public class PlaylistDetailActivity extends AbsFabActivity implements CabHolder {
public static final String TAG = PlaylistDetailActivity.class.getSimpleName();
private Playlist playlist;
private MaterialCab cab;
private PlaylistSongAdapter adapter;
private ArrayList<PlaylistSong> songs;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
@ -41,8 +49,8 @@ public class PlaylistDetailActivity extends AbsFabActivity {
getIntentExtras();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
final ArrayList<PlaylistSong> songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
final PlaylistSongAdapter adapter = new PlaylistSongAdapter(this, songs);
songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
adapter = new PlaylistSongAdapter(this, songs, this);
recyclerView.setLayoutManager(new GridLayoutManager(this, 1));
recyclerView.setAdapter(adapter);
@ -72,6 +80,8 @@ public class PlaylistDetailActivity extends AbsFabActivity {
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(playlist.name);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
App.bus.register(this);
}
@Override
@ -123,4 +133,34 @@ public class PlaylistDetailActivity extends AbsFabActivity {
}
return super.onOptionsItemSelected(item);
}
@Override
public MaterialCab openCab(final int menu, final MaterialCab.Callback callback) {
if (cab != null && cab.isActive()) cab.finish();
cab = new MaterialCab(this, R.id.cab_stub)
.setMenu(menu)
.setBackgroundColor(PreferenceUtils.getInstance(this).getThemeColorPrimary())
.start(callback);
return cab;
}
@Override
protected void onDestroy() {
super.onDestroy();
App.bus.unregister(this);
}
@Subscribe
public void onDataBaseEvent(DataBaseChangedEvent event) {
switch (event.getAction()) {
case DataBaseChangedEvent.PLAYLISTS_CHANGED:
case DataBaseChangedEvent.DATABASE_CHANGED:
songs = PlaylistSongLoader.getPlaylistSongList(this, playlist.id);
adapter.updateDataSet(songs);
findViewById(android.R.id.empty).setVisibility(
songs.size() == 0 ? View.VISIBLE : View.GONE
);
break;
}
}
}