Created CustomPlaylist class, cleaned up some code

This commit is contained in:
Karim Abou Zeid 2017-04-22 15:34:59 +02:00
commit 3232370e47
11 changed files with 70 additions and 56 deletions

View file

@ -22,6 +22,7 @@ import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper;
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.model.AbsCustomPlaylist;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
@ -157,8 +158,8 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
private ArrayList<Song> getSongList(@NonNull List<Playlist> playlists) {
final ArrayList<Song> songs = new ArrayList<>();
for (Playlist playlist : playlists) {
if (playlist instanceof AbsSmartPlaylist) {
songs.addAll(((AbsSmartPlaylist) playlist).getSongs(activity));
if (playlist instanceof AbsCustomPlaylist) {
songs.addAll(((AbsCustomPlaylist) playlist).getSongs(activity));
} else {
songs.addAll(PlaylistSongLoader.getPlaylistSongList(activity, playlist.id));
}

View file

@ -18,11 +18,11 @@ import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class SmartPlaylistSongAdapter extends SongAdapter {
public class CustomPlaylistSongAdapter extends SongAdapter {
public static final String TAG = SmartPlaylistSongAdapter.class.getSimpleName();
public static final String TAG = CustomPlaylistSongAdapter.class.getSimpleName();
public SmartPlaylistSongAdapter(AppCompatActivity activity, @NonNull ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
public CustomPlaylistSongAdapter(AppCompatActivity activity, @NonNull ArrayList<Song> dataSet, @LayoutRes int itemLayoutRes, boolean usePalette, @Nullable CabHolder cabHolder) {
super(activity, dataSet, itemLayoutRes, usePalette, cabHolder);
overrideMultiSelectMenuRes(R.menu.menu_cannot_delete_single_songs_playlist_songs_selection);
}

View file

@ -3,7 +3,6 @@ package com.kabouzeid.gramophone.appshortcuts;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.IntDef;
import com.kabouzeid.gramophone.appshortcuts.shortcuttype.LastAddedShortcutType;
import com.kabouzeid.gramophone.appshortcuts.shortcuttype.ShuffleAllShortcutType;
@ -14,9 +13,6 @@ import com.kabouzeid.gramophone.model.smartplaylist.MyTopTracksPlaylist;
import com.kabouzeid.gramophone.model.smartplaylist.ShuffleAllPlaylist;
import com.kabouzeid.gramophone.service.MusicService;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
* @author Adrian Campos
*/
@ -33,7 +29,6 @@ public class AppShortcutLauncherActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ShortcutType
int shortcutType = SHORTCUT_TYPE_NONE;
//Set shortcutType from the intent extras
@ -76,9 +71,4 @@ public class AppShortcutLauncherActivity extends Activity {
startService(intent);
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({SHORTCUT_TYPE_SHUFFLE_ALL, SHORTCUT_TYPE_TOP_TRACKS, SHORTCUT_TYPE_LAST_ADDED, SHORTCUT_TYPE_NONE})
public @interface ShortcutType {
}
}

View file

@ -26,7 +26,7 @@ public abstract class BaseShortcutType {
abstract ShortcutInfo getShortcutInfo();
static public String getId(){
static public String getId() {
return ID_PREFIX + "invalid";
}
@ -37,7 +37,7 @@ public abstract class BaseShortcutType {
* @param shortcutType Describes the type of shortcut to create (ShuffleAll, TopTracks, custom playlist, etc.)
* @return
*/
Intent getPlaySongsIntent(@AppShortcutLauncherActivity.ShortcutType int shortcutType) {
Intent getPlaySongsIntent(int shortcutType) {
Intent intent = new Intent(context, AppShortcutLauncherActivity.class);
intent.setAction(Intent.ACTION_VIEW);

View file

@ -14,9 +14,9 @@ import com.kabouzeid.gramophone.dialogs.DeletePlaylistDialog;
import com.kabouzeid.gramophone.dialogs.RenamePlaylistDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.model.AbsCustomPlaylist;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import java.io.IOException;
@ -77,8 +77,8 @@ public class PlaylistMenuHelper {
@NonNull
private static ArrayList<? extends Song> getPlaylistSongs(@NonNull Activity activity, Playlist playlist) {
return playlist instanceof AbsSmartPlaylist ?
((AbsSmartPlaylist) playlist).getSongs(activity) :
return playlist instanceof AbsCustomPlaylist ?
((AbsCustomPlaylist) playlist).getSongs(activity) :
PlaylistSongLoader.getPlaylistSongList(activity, playlist.id);
}
}

View file

@ -0,0 +1,27 @@
package com.kabouzeid.gramophone.model;
import android.content.Context;
import android.os.Parcel;
import android.support.annotation.NonNull;
import java.util.ArrayList;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsCustomPlaylist extends Playlist {
public AbsCustomPlaylist(int id, String name) {
super(id, name);
}
public AbsCustomPlaylist() {
}
public AbsCustomPlaylist(Parcel in) {
super(in);
}
@NonNull
public abstract ArrayList<Song> getSongs(Context context);
}

View file

@ -6,15 +6,12 @@ import android.support.annotation.DrawableRes;
import android.support.annotation.Nullable;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import java.util.ArrayList;
import com.kabouzeid.gramophone.model.AbsCustomPlaylist;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public abstract class AbsSmartPlaylist extends Playlist {
public abstract class AbsSmartPlaylist extends AbsCustomPlaylist {
@DrawableRes
public final int iconRes;
@ -28,8 +25,6 @@ public abstract class AbsSmartPlaylist extends Playlist {
this.iconRes = R.drawable.ic_queue_music_white_24dp;
}
public abstract ArrayList<Song> getSongs(Context context);
public abstract void clear(Context context);
@Override

View file

@ -13,7 +13,7 @@ import java.util.ArrayList;
public class ShuffleAllPlaylist extends AbsSmartPlaylist {
public ShuffleAllPlaylist(@NonNull Context context) {
super(context.getString(R.string.shuffle_all), R.drawable.ic_shuffle_white_24dp);
super(context.getString(R.string.action_shuffle_all), R.drawable.ic_shuffle_white_24dp);
}
@NonNull
@ -24,10 +24,9 @@ public class ShuffleAllPlaylist extends AbsSmartPlaylist {
@Override
public void clear(@NonNull Context context) {
//Can't clear all songs. Don't do anything here?
// Shuffle all is not a real "Smart Playlist"
}
@Override
public int describeContents() {
return 0;

View file

@ -47,9 +47,9 @@ import com.kabouzeid.gramophone.glide.SongGlideRequest;
import com.kabouzeid.gramophone.helper.ShuffleHelper;
import com.kabouzeid.gramophone.helper.StopWatch;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.model.AbsCustomPlaylist;
import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.smartplaylist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.provider.HistoryStore;
import com.kabouzeid.gramophone.provider.MusicPlaybackQueueStore;
import com.kabouzeid.gramophone.provider.SongPlayCountStore;
@ -83,7 +83,6 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
public static final String ACTION_SKIP = PHONOGRAPH_PACKAGE_NAME + ".skip";
public static final String ACTION_REWIND = PHONOGRAPH_PACKAGE_NAME + ".rewind";
public static final String ACTION_QUIT = PHONOGRAPH_PACKAGE_NAME + ".quitservice";
public static final String INTENT_EXTRA_SONGS = PHONOGRAPH_PACKAGE_NAME + ".intentextra.songs";
public static final String INTENT_EXTRA_PLAYLIST = PHONOGRAPH_PACKAGE_NAME + "intentextra.playlist";
public static final String INTENT_EXTRA_SHUFFLE_MODE = PHONOGRAPH_PACKAGE_NAME + ".intentextra.shufflemode";
@ -302,31 +301,35 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
pause();
break;
case ACTION_PLAY:
//Load songs from intent
ArrayList<Song> songs = intent.getParcelableArrayListExtra(INTENT_EXTRA_SONGS);
//Play songs with the intent's shuffle mode, if it has one
playSongs(songs,
intent.getIntExtra(INTENT_EXTRA_SHUFFLE_MODE, getShuffleMode()));
play();
break;
case ACTION_PLAY_PLAYLIST:
//Load playlist from intent
Playlist playlist = intent.getParcelableExtra(INTENT_EXTRA_PLAYLIST);
int shuffleMode = intent.getIntExtra(INTENT_EXTRA_SHUFFLE_MODE, getShuffleMode());
if (playlist != null) {
//Get songs from playlist
ArrayList<Song> playlistSongs;
if (playlist instanceof AbsSmartPlaylist) {
playlistSongs = ((AbsSmartPlaylist) playlist).getSongs(getApplicationContext());
if (playlist instanceof AbsCustomPlaylist) {
playlistSongs = ((AbsCustomPlaylist) playlist).getSongs(getApplicationContext());
} else {
//noinspection unchecked
playlistSongs = (ArrayList<Song>) (List) PlaylistSongLoader.getPlaylistSongList(getApplicationContext(), playlist.id);
}
//Play songs with the intent's shuffle mode, if it has one
playSongs(playlistSongs,
intent.getIntExtra(INTENT_EXTRA_SHUFFLE_MODE, getShuffleMode()));
if (!playlistSongs.isEmpty()) {
if (shuffleMode == SHUFFLE_MODE_SHUFFLE) {
int startPosition = 0;
if (!playlistSongs.isEmpty()) {
startPosition = new Random().nextInt(playlistSongs.size());
}
openQueue(playlistSongs, startPosition, true);
setShuffleMode(shuffleMode);
} else {
openQueue(playlistSongs, 0, true);
}
} else {
Toast.makeText(getApplicationContext(), R.string.playlist_is_empty, Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), R.string.no_songs_in_playlist, Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), R.string.playlist_is_empty, Toast.LENGTH_LONG).show();
}
break;
case ACTION_REWIND:
@ -888,7 +891,7 @@ public class MusicService extends Service implements SharedPreferences.OnSharedP
}
play();
} else {
Toast.makeText(getApplicationContext(), R.string.no_songs_in_playlist, Toast.LENGTH_LONG).show();
Toast.makeText(getApplicationContext(), R.string.playlist_is_empty, Toast.LENGTH_LONG).show();
}
}

View file

@ -20,8 +20,8 @@ import com.h6ah4i.android.widget.advrecyclerview.draggable.RecyclerViewDragDropM
import com.h6ah4i.android.widget.advrecyclerview.utils.WrapperAdapterUtils;
import com.kabouzeid.appthemehelper.ThemeStore;
import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.song.CustomPlaylistSongAdapter;
import com.kabouzeid.gramophone.adapter.song.PlaylistSongAdapter;
import com.kabouzeid.gramophone.adapter.song.SmartPlaylistSongAdapter;
import com.kabouzeid.gramophone.adapter.song.SongAdapter;
import com.kabouzeid.gramophone.dialogs.SleepTimerDialog;
import com.kabouzeid.gramophone.helper.MusicPlayerRemote;
@ -29,10 +29,10 @@ import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.interfaces.LoaderIds;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.misc.WrappedAsyncTaskLoader;
import com.kabouzeid.gramophone.model.AbsCustomPlaylist;
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;
import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PhonographColorUtil;
@ -94,8 +94,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
private void setUpRecyclerView() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
if (playlist instanceof AbsSmartPlaylist) {
adapter = new SmartPlaylistSongAdapter(this, new ArrayList<Song>(), R.layout.item_list, false, this);
if (playlist instanceof AbsCustomPlaylist) {
adapter = new CustomPlaylistSongAdapter(this, new ArrayList<Song>(), R.layout.item_list, false, this);
recyclerView.setAdapter(adapter);
} else {
recyclerViewDragDropManager = new RecyclerViewDragDropManager();
@ -251,8 +251,8 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
@Override
public ArrayList<Song> loadInBackground() {
if (playlist instanceof AbsSmartPlaylist) {
return ((AbsSmartPlaylist) playlist).getSongs(getContext());
if (playlist instanceof AbsCustomPlaylist) {
return ((AbsCustomPlaylist) playlist).getSongs(getContext());
} else {
//noinspection unchecked
return (ArrayList<Song>) (List) PlaylistSongLoader.getPlaylistSongList(getContext(), playlist.id);

View file

@ -181,7 +181,6 @@
<string name="favorites">Favorites</string>
<string name="last_added">Last added</string>
<string name="history">History</string>
<string name="shuffle_all">Shuffle All</string>
<string name="my_top_tracks">My top tracks</string>
<string name="remove_cover">Remove cover</string>
<string name="download_from_last_fm">Download from Last.fm</string>
@ -290,5 +289,5 @@
<string name="app_shortcut_last_added_long">@string/last_added</string>
<string name="app_shortcut_last_added_short">@string/last_added</string>
<string name="no_songs_in_playlist">No songs in playlist</string>
<string name="playlist_is_empty">Playlist is empty</string>
</resources>