Replaced Serializable with Parcelable everywhere

This commit is contained in:
Karim Abou Zeid 2015-12-23 17:30:29 +01:00
commit 5bdd763248
21 changed files with 413 additions and 175 deletions

View file

@ -93,7 +93,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
public static AlbumCoverFragment newInstance(final Song song) { public static AlbumCoverFragment newInstance(final Song song) {
AlbumCoverFragment frag = new AlbumCoverFragment(); AlbumCoverFragment frag = new AlbumCoverFragment();
final Bundle args = new Bundle(); final Bundle args = new Bundle();
args.putSerializable(SONG_ARG, song); args.putParcelable(SONG_ARG, song);
frag.setArguments(args); frag.setArguments(args);
return frag; return frag;
} }
@ -101,7 +101,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter {
@Override @Override
public void onCreate(final Bundle savedInstanceState) { public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
song = (Song) getArguments().getSerializable(SONG_ARG); song = (Song) getArguments().getParcelable(SONG_ARG);
} }
@Override @Override

View file

@ -157,7 +157,7 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
final int size = checked.size(); final int size = checked.size();
if (size <= 0) cab.finish(); if (size <= 0) cab.finish();
else if (size == 1) cab.setTitle(checked.get(0).toString()); else if (size == 1) cab.setTitle(checked.get(0).title);
else if (size > 1) cab.setTitle(String.valueOf(size)); else if (size > 1) cab.setTitle(String.valueOf(size));
} }
} }

View file

@ -31,7 +31,7 @@ public class AddToPlaylistDialog extends LeakDetectDialogFragment {
public static AddToPlaylistDialog create(ArrayList<Song> songs) { public static AddToPlaylistDialog create(ArrayList<Song> songs) {
AddToPlaylistDialog dialog = new AddToPlaylistDialog(); AddToPlaylistDialog dialog = new AddToPlaylistDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("songs", songs); args.putParcelableArrayList("songs", songs);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -52,7 +52,7 @@ public class AddToPlaylistDialog extends LeakDetectDialogFragment {
@Override @Override
public void onSelection(@NonNull MaterialDialog materialDialog, View view, int i, CharSequence charSequence) { public void onSelection(@NonNull MaterialDialog materialDialog, View view, int i, CharSequence charSequence) {
//noinspection unchecked //noinspection unchecked
final ArrayList<Song> songs = (ArrayList<Song>) getArguments().getSerializable("songs"); final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs");
if (songs == null) return; if (songs == null) return;
if (i == 0) { if (i == 0) {
materialDialog.dismiss(); materialDialog.dismiss();

View file

@ -18,7 +18,7 @@ public class ClearSmartPlaylistDialog extends LeakDetectDialogFragment {
public static ClearSmartPlaylistDialog create(AbsSmartPlaylist playlist) { public static ClearSmartPlaylistDialog create(AbsSmartPlaylist playlist) {
ClearSmartPlaylistDialog dialog = new ClearSmartPlaylistDialog(); ClearSmartPlaylistDialog dialog = new ClearSmartPlaylistDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("playlist", playlist); args.putParcelable("playlist", playlist);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -27,7 +27,7 @@ public class ClearSmartPlaylistDialog extends LeakDetectDialogFragment {
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
//noinspection unchecked //noinspection unchecked
final AbsSmartPlaylist playlist = (AbsSmartPlaylist) getArguments().getSerializable("playlist"); final AbsSmartPlaylist playlist = (AbsSmartPlaylist) getArguments().getParcelable("playlist");
int title = R.string.clear_playlist_title; int title = R.string.clear_playlist_title;
//noinspection ConstantConditions //noinspection ConstantConditions
CharSequence content = Html.fromHtml(getString(R.string.clear_playlist_x, playlist.name)); CharSequence content = Html.fromHtml(getString(R.string.clear_playlist_x, playlist.name));

View file

@ -35,7 +35,7 @@ public class CreatePlaylistDialog extends LeakDetectDialogFragment {
public static CreatePlaylistDialog create(ArrayList<Song> songs) { public static CreatePlaylistDialog create(ArrayList<Song> songs) {
CreatePlaylistDialog dialog = new CreatePlaylistDialog(); CreatePlaylistDialog dialog = new CreatePlaylistDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("songs", songs); args.putParcelableArrayList("songs", songs);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -59,7 +59,7 @@ public class CreatePlaylistDialog extends LeakDetectDialogFragment {
final int playlistId = PlaylistsUtil.createPlaylist(getActivity(), charSequence.toString()); final int playlistId = PlaylistsUtil.createPlaylist(getActivity(), charSequence.toString());
if (playlistId != -1 && getActivity() != null) { if (playlistId != -1 && getActivity() != null) {
//noinspection unchecked //noinspection unchecked
ArrayList<Song> songs = (ArrayList<Song>) getArguments().getSerializable("songs"); ArrayList<Song> songs = getArguments().getParcelableArrayList("songs");
if (songs != null) { if (songs != null) {
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true); PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true);
} }

View file

@ -28,7 +28,7 @@ public class DeletePlaylistDialog extends LeakDetectDialogFragment {
public static DeletePlaylistDialog create(ArrayList<Playlist> playlists) { public static DeletePlaylistDialog create(ArrayList<Playlist> playlists) {
DeletePlaylistDialog dialog = new DeletePlaylistDialog(); DeletePlaylistDialog dialog = new DeletePlaylistDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("playlists", playlists); args.putParcelableArrayList("playlists", playlists);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -37,7 +37,7 @@ public class DeletePlaylistDialog extends LeakDetectDialogFragment {
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
//noinspection unchecked //noinspection unchecked
final ArrayList<Playlist> playlists = (ArrayList<Playlist>) getArguments().getSerializable("playlists"); final ArrayList<Playlist> playlists = getArguments().getParcelableArrayList("playlists");
int title; int title;
CharSequence content; CharSequence content;
//noinspection ConstantConditions //noinspection ConstantConditions

View file

@ -28,7 +28,7 @@ public class DeleteSongsDialog extends LeakDetectDialogFragment {
public static DeleteSongsDialog create(ArrayList<Song> songs) { public static DeleteSongsDialog create(ArrayList<Song> songs) {
DeleteSongsDialog dialog = new DeleteSongsDialog(); DeleteSongsDialog dialog = new DeleteSongsDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("songs", songs); args.putParcelableArrayList("songs", songs);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -37,7 +37,7 @@ public class DeleteSongsDialog extends LeakDetectDialogFragment {
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
//noinspection unchecked //noinspection unchecked
final ArrayList<Song> songs = (ArrayList<Song>) getArguments().getSerializable("songs"); final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs");
int title; int title;
CharSequence content; CharSequence content;
if (songs.size() > 1) { if (songs.size() > 1) {

View file

@ -25,7 +25,7 @@ public class PlayingQueueDialog extends LeakDetectDialogFragment {
final ArrayList<Song> playingQueue = MusicPlayerRemote.getPlayingQueue(); final ArrayList<Song> playingQueue = MusicPlayerRemote.getPlayingQueue();
PlayingQueueDialog dialog = new PlayingQueueDialog(); PlayingQueueDialog dialog = new PlayingQueueDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("queue", playingQueue); args.putParcelableArrayList("queue", playingQueue);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -44,14 +44,14 @@ public class PlayingQueueDialog extends LeakDetectDialogFragment {
if (getActivity() == null) if (getActivity() == null)
return; return;
//noinspection unchecked //noinspection unchecked
ArrayList<Song> playingQueue = (ArrayList<Song>) getArguments().getSerializable("queue"); ArrayList<Song> playingQueue = getArguments().getParcelableArrayList("queue");
AddToPlaylistDialog.create(playingQueue).show(getActivity().getSupportFragmentManager(), "ADD_PLAYLIST"); AddToPlaylistDialog.create(playingQueue).show(getActivity().getSupportFragmentManager(), "ADD_PLAYLIST");
} }
}) })
.build(); .build();
//noinspection unchecked //noinspection unchecked
final ArrayList<Song> playingQueue = (ArrayList<Song>) getArguments().getSerializable("queue"); final ArrayList<Song> playingQueue = getArguments().getParcelableArrayList("queue");
final DragSortListView dragSortListView = (DragSortListView) dialog.getCustomView().findViewById(R.id.dragSortListView); final DragSortListView dragSortListView = (DragSortListView) dialog.getCustomView().findViewById(R.id.dragSortListView);
final PlayingQueueAdapterDeprecated playingQueueAdapterDeprecated = final PlayingQueueAdapterDeprecated playingQueueAdapterDeprecated =
new PlayingQueueAdapterDeprecated((AppCompatActivity) getActivity(), playingQueue); new PlayingQueueAdapterDeprecated((AppCompatActivity) getActivity(), playingQueue);

View file

@ -28,7 +28,7 @@ public class RemoveFromPlaylistDialog extends LeakDetectDialogFragment {
public static RemoveFromPlaylistDialog create(ArrayList<PlaylistSong> songs) { public static RemoveFromPlaylistDialog create(ArrayList<PlaylistSong> songs) {
RemoveFromPlaylistDialog dialog = new RemoveFromPlaylistDialog(); RemoveFromPlaylistDialog dialog = new RemoveFromPlaylistDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("songs", songs); args.putParcelableArrayList("songs", songs);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -37,7 +37,7 @@ public class RemoveFromPlaylistDialog extends LeakDetectDialogFragment {
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
//noinspection unchecked //noinspection unchecked
final ArrayList<PlaylistSong> songs = (ArrayList<PlaylistSong>) getArguments().getSerializable("songs"); final ArrayList<PlaylistSong> songs = getArguments().getParcelableArrayList("songs");
int title; int title;
CharSequence content; CharSequence content;
if (songs.size() > 1) { if (songs.size() > 1) {

View file

@ -38,7 +38,7 @@ public class SongDetailDialog extends LeakDetectDialogFragment {
public static SongDetailDialog create(Song song) { public static SongDetailDialog create(Song song) {
SongDetailDialog dialog = new SongDetailDialog(); SongDetailDialog dialog = new SongDetailDialog();
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable("song", song); args.putParcelable("song", song);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -57,7 +57,7 @@ public class SongDetailDialog extends LeakDetectDialogFragment {
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
final Activity context = getActivity(); final Activity context = getActivity();
final Song song = (Song) getArguments().getSerializable("song"); final Song song = (Song) getArguments().getParcelable("song");
MaterialDialog dialog = new MaterialDialog.Builder(context) MaterialDialog dialog = new MaterialDialog.Builder(context)
.customView(R.layout.dialog_file_details, true) .customView(R.layout.dialog_file_details, true)

View file

@ -19,7 +19,7 @@ public class SongShareDialog extends LeakDetectDialogFragment {
public static SongShareDialog create(final Song song) { public static SongShareDialog create(final Song song) {
final SongShareDialog dialog = new SongShareDialog(); final SongShareDialog dialog = new SongShareDialog();
final Bundle args = new Bundle(); final Bundle args = new Bundle();
args.putSerializable("song", song); args.putParcelable("song", song);
dialog.setArguments(args); dialog.setArguments(args);
return dialog; return dialog;
} }
@ -27,7 +27,7 @@ public class SongShareDialog extends LeakDetectDialogFragment {
@NonNull @NonNull
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
final Song song = (Song) getArguments().getSerializable("song"); final Song song = (Song) getArguments().getParcelable("song");
final String currentlyListening = getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName); final String currentlyListening = getString(R.string.currently_listening_to_x_by_x, song.title, song.artistName);
return new MaterialDialog.Builder(getActivity()) return new MaterialDialog.Builder(getActivity())
.title(R.string.what_do_you_want_to_share) .title(R.string.what_do_you_want_to_share)

View file

@ -1,13 +1,12 @@
package com.kabouzeid.gramophone.model; package com.kabouzeid.gramophone.model;
import android.support.annotation.Nullable; import android.os.Parcel;
import android.text.TextUtils; import android.os.Parcelable;
/** /**
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public class Album { public class Album implements Parcelable {
public final int id; public final int id;
public final int artistId; public final int artistId;
public final String title; public final String title;
@ -34,47 +33,77 @@ public class Album {
year = -1; year = -1;
} }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Album album = (Album) o;
if (id != album.id) return false;
if (artistId != album.artistId) return false;
if (songCount != album.songCount) return false;
if (year != album.year) return false;
if (title != null ? !title.equals(album.title) : album.title != null) return false;
return artistName != null ? artistName.equals(album.artistName) : album.artistName == null;
}
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; int result = id;
int result = 1; result = 31 * result + artistId;
result = prime * result + id; result = 31 * result + (title != null ? title.hashCode() : 0);
result = prime * result + (title == null ? 0 : title.hashCode()); result = 31 * result + (artistName != null ? artistName.hashCode() : 0);
result = prime * result + (artistName == null ? 0 : artistName.hashCode()); result = 31 * result + songCount;
result = prime * result + songCount; result = 31 * result + year;
result = prime * result + year;
return result; return result;
} }
@Override @Override
public boolean equals(@Nullable final Object obj) { public String toString() {
if (this == obj) { return "Album{" +
return true; "id=" + id +
", artistId=" + artistId +
", title='" + title + '\'' +
", artistName='" + artistName + '\'' +
", songCount=" + songCount +
", year=" + year +
'}';
} }
if (obj == null) {
return false;
} @Override
if (getClass() != obj.getClass()) { public int describeContents() {
return false; return 0;
}
final Album other = (Album) obj;
if (id != other.id) {
return false;
}
if (!TextUtils.equals(title, other.title)) {
return false;
}
if (!TextUtils.equals(artistName, other.artistName)) {
return false;
}
if (songCount != other.songCount) {
return false;
}
return year == other.year;
} }
@Override @Override
public String toString() { public void writeToParcel(Parcel dest, int flags) {
return title; dest.writeInt(this.id);
dest.writeInt(this.artistId);
dest.writeString(this.title);
dest.writeString(this.artistName);
dest.writeInt(this.songCount);
dest.writeInt(this.year);
} }
protected Album(Parcel in) {
this.id = in.readInt();
this.artistId = in.readInt();
this.title = in.readString();
this.artistName = in.readString();
this.songCount = in.readInt();
this.year = in.readInt();
}
public static final Parcelable.Creator<Album> CREATOR = new Parcelable.Creator<Album>() {
public Album createFromParcel(Parcel source) {
return new Album(source);
}
public Album[] newArray(int size) {
return new Album[size];
}
};
} }

View file

@ -1,12 +1,12 @@
package com.kabouzeid.gramophone.model; package com.kabouzeid.gramophone.model;
import android.support.annotation.Nullable; import android.os.Parcel;
import android.text.TextUtils; import android.os.Parcelable;
/** /**
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public class Artist { public class Artist implements Parcelable {
public final int id; public final int id;
public final String name; public final String name;
public final int albumCount; public final int albumCount;
@ -26,43 +26,67 @@ public class Artist {
albumCount = -1; albumCount = -1;
} }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Artist artist = (Artist) o;
if (id != artist.id) return false;
if (albumCount != artist.albumCount) return false;
if (songCount != artist.songCount) return false;
return name != null ? name.equals(artist.name) : artist.name == null;
}
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; int result = id;
int result = 1; result = 31 * result + (name != null ? name.hashCode() : 0);
result = prime * result + albumCount; result = 31 * result + albumCount;
result = prime * result + id; result = 31 * result + songCount;
result = prime * result + (name == null ? 0 : name.hashCode());
result = prime * result + songCount;
return result; return result;
} }
@Override @Override
public boolean equals(@Nullable final Object obj) { public String toString() {
if (this == obj) { return "Artist{" +
return true; "id=" + id +
", name='" + name + '\'' +
", albumCount=" + albumCount +
", songCount=" + songCount +
'}';
} }
if (obj == null) {
return false;
} @Override
if (getClass() != obj.getClass()) { public int describeContents() {
return false; return 0;
}
final Artist other = (Artist) obj;
if (albumCount != other.albumCount) {
return false;
}
if (id != other.id) {
return false;
}
if (!TextUtils.equals(name, other.name)) {
return false;
}
return songCount == other.songCount;
} }
@Override @Override
public String toString() { public void writeToParcel(Parcel dest, int flags) {
return name; dest.writeInt(this.id);
dest.writeString(this.name);
dest.writeInt(this.albumCount);
dest.writeInt(this.songCount);
} }
protected Artist(Parcel in) {
this.id = in.readInt();
this.name = in.readString();
this.albumCount = in.readInt();
this.songCount = in.readInt();
}
public static final Parcelable.Creator<Artist> CREATOR = new Parcelable.Creator<Artist>() {
public Artist createFromParcel(Parcel source) {
return new Artist(source);
}
public Artist[] newArray(int size) {
return new Artist[size];
}
};
} }

View file

@ -1,17 +1,12 @@
package com.kabouzeid.gramophone.model; package com.kabouzeid.gramophone.model;
import android.support.annotation.Nullable; import android.os.Parcel;
import android.text.TextUtils; import android.os.Parcelable;
import java.io.Serializable;
/** /**
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public class Playlist implements Serializable { public class Playlist implements Parcelable {
private static final long serialVersionUID = 3013703495354856981L;
public final int id; public final int id;
public final String name; public final String name;
@ -25,35 +20,48 @@ public class Playlist implements Serializable {
this.name = ""; this.name = "";
} }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Playlist playlist = (Playlist) o;
if (id != playlist.id) return false;
return name != null ? name.equals(playlist.name) : playlist.name == null;
}
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; int result = id;
int result = 1; result = 31 * result + (name != null ? name.hashCode() : 0);
result = prime * result + id;
result = prime * result + (name == null ? 0 : name.hashCode());
return result; return result;
} }
@Override @Override
public boolean equals(@Nullable final Object obj) { public String toString() {
if (this == obj) { return "Playlist{" +
return true; "id=" + id +
", name='" + name + '\'' +
'}';
} }
if (obj == null) {
return false;
} @Override
if (getClass() != obj.getClass()) { public int describeContents() {
return false; return 0;
}
final Playlist other = (Playlist) obj;
if (id != other.id) {
return false;
}
return TextUtils.equals(name, other.name);
} }
@Override @Override
public String toString() { public void writeToParcel(Parcel dest, int flags) {
return name; dest.writeInt(this.id);
dest.writeString(this.name);
} }
protected Playlist(Parcel in) {
this.id = in.readInt();
this.name = in.readString();
}
} }

View file

@ -1,8 +1,8 @@
package com.kabouzeid.gramophone.model; package com.kabouzeid.gramophone.model;
public class PlaylistSong extends Song { import android.os.Parcel;
private static final long serialVersionUID = 1098600801627571043L; public class PlaylistSong extends Song {
public final int playlistId; public final int playlistId;
public final int idInPlayList; public final int idInPlayList;
@ -20,21 +20,62 @@ public class PlaylistSong extends Song {
idInPlayList = -1; idInPlayList = -1;
} }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
PlaylistSong that = (PlaylistSong) o;
if (playlistId != that.playlistId) return false;
return idInPlayList == that.idInPlayList;
}
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31;
int result = super.hashCode(); int result = super.hashCode();
result = prime * result + playlistId; result = 31 * result + playlistId;
result = prime * result + idInPlayList; result = 31 * result + idInPlayList;
return result; return result;
} }
@Override @Override
public boolean equals(final Object obj) { public String toString() {
if (super.equals(obj)) { return super.toString() +
final PlaylistSong other = (PlaylistSong) obj; "PlaylistSong{" +
return playlistId == other.playlistId && idInPlayList == other.idInPlayList; "playlistId=" + playlistId +
", idInPlayList=" + idInPlayList +
'}';
} }
return false;
@Override
public int describeContents() {
return 0;
} }
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(this.playlistId);
dest.writeInt(this.idInPlayList);
}
protected PlaylistSong(Parcel in) {
super(in);
this.playlistId = in.readInt();
this.idInPlayList = in.readInt();
}
public static final Creator<PlaylistSong> CREATOR = new Creator<PlaylistSong>() {
public PlaylistSong createFromParcel(Parcel source) {
return new PlaylistSong(source);
}
public PlaylistSong[] newArray(int size) {
return new PlaylistSong[size];
}
};
} }

View file

@ -1,17 +1,12 @@
package com.kabouzeid.gramophone.model; package com.kabouzeid.gramophone.model;
import android.support.annotation.Nullable; import android.os.Parcel;
import android.text.TextUtils; import android.os.Parcelable;
import java.io.Serializable;
/** /**
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public class Song implements Serializable { public class Song implements Parcelable {
private static final long serialVersionUID = 3720703366054566981L;
public final int id; public final int id;
public final int albumId; public final int albumId;
public final int artistId; public final int artistId;
@ -47,47 +42,94 @@ public class Song implements Serializable {
this.data = ""; this.data = "";
} }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Song song = (Song) o;
if (id != song.id) return false;
if (albumId != song.albumId) return false;
if (artistId != song.artistId) return false;
if (duration != song.duration) return false;
if (trackNumber != song.trackNumber) return false;
if (title != null ? !title.equals(song.title) : song.title != null) return false;
if (artistName != null ? !artistName.equals(song.artistName) : song.artistName != null)
return false;
if (albumName != null ? !albumName.equals(song.albumName) : song.albumName != null)
return false;
return data != null ? data.equals(song.data) : song.data == null;
}
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; int result = id;
int result = 1; result = 31 * result + albumId;
result = prime * result + (albumName == null ? 0 : albumName.hashCode()); result = 31 * result + artistId;
result = prime * result + (artistName == null ? 0 : artistName.hashCode()); result = 31 * result + (title != null ? title.hashCode() : 0);
result = prime * result + (int) duration; result = 31 * result + (artistName != null ? artistName.hashCode() : 0);
result = prime * result + id; result = 31 * result + (albumName != null ? albumName.hashCode() : 0);
result = prime * result + (title == null ? 0 : title.hashCode()); result = 31 * result + (int) (duration ^ (duration >>> 32));
result = 31 * result + trackNumber;
result = 31 * result + (data != null ? data.hashCode() : 0);
return result; return result;
} }
@Override @Override
public boolean equals(@Nullable final Object obj) { public String toString() {
if (this == obj) { return "Song{" +
return true; "id=" + id +
", albumId=" + albumId +
", artistId=" + artistId +
", title='" + title + '\'' +
", artistName='" + artistName + '\'' +
", albumName='" + albumName + '\'' +
", duration=" + duration +
", trackNumber=" + trackNumber +
", data='" + data + '\'' +
'}';
} }
if (obj == null) {
return false;
} @Override
if (getClass() != obj.getClass()) { public int describeContents() {
return false; return 0;
}
final Song other = (Song) obj;
if (id != other.id) {
return false;
}
if (!TextUtils.equals(albumName, other.albumName)) {
return false;
}
if (!TextUtils.equals(artistName, other.artistName)) {
return false;
}
if (duration != other.duration) {
return false;
}
return TextUtils.equals(title, other.title);
} }
@Override @Override
public String toString() { public void writeToParcel(Parcel dest, int flags) {
return title; dest.writeInt(this.id);
dest.writeInt(this.albumId);
dest.writeInt(this.artistId);
dest.writeString(this.title);
dest.writeString(this.artistName);
dest.writeString(this.albumName);
dest.writeLong(this.duration);
dest.writeInt(this.trackNumber);
dest.writeString(this.data);
} }
protected Song(Parcel in) {
this.id = in.readInt();
this.albumId = in.readInt();
this.artistId = in.readInt();
this.title = in.readString();
this.artistName = in.readString();
this.albumName = in.readString();
this.duration = in.readLong();
this.trackNumber = in.readInt();
this.data = in.readString();
}
public static final Creator<Song> CREATOR = new Creator<Song>() {
public Song createFromParcel(Parcel source) {
return new Song(source);
}
public Song[] newArray(int size) {
return new Song[size];
}
};
} }

View file

@ -1,6 +1,7 @@
package com.kabouzeid.gramophone.model.smartplaylist; package com.kabouzeid.gramophone.model.smartplaylist;
import android.content.Context; import android.content.Context;
import android.os.Parcel;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
@ -14,8 +15,6 @@ import java.util.ArrayList;
* @author Karim Abou Zeid (kabouzeid) * @author Karim Abou Zeid (kabouzeid)
*/ */
public abstract class AbsSmartPlaylist extends Playlist { public abstract class AbsSmartPlaylist extends Playlist {
private static final long serialVersionUID = 3013701295356403681L;
@DrawableRes @DrawableRes
public final int iconRes; public final int iconRes;
@ -52,4 +51,21 @@ public abstract class AbsSmartPlaylist extends Playlist {
} }
return false; return false;
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(this.iconRes);
}
protected AbsSmartPlaylist(Parcel in) {
super(in);
this.iconRes = in.readInt();
}
} }

View file

@ -1,6 +1,7 @@
package com.kabouzeid.gramophone.model.smartplaylist; package com.kabouzeid.gramophone.model.smartplaylist;
import android.content.Context; import android.content.Context;
import android.os.Parcel;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
@ -29,4 +30,29 @@ public class HistoryPlaylist extends AbsSmartPlaylist {
public void clear(@NonNull Context context) { public void clear(@NonNull Context context) {
HistoryStore.getInstance(context).clear(); HistoryStore.getInstance(context).clear();
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
}
protected HistoryPlaylist(Parcel in) {
super(in);
}
public static final Creator<HistoryPlaylist> CREATOR = new Creator<HistoryPlaylist>() {
public HistoryPlaylist createFromParcel(Parcel source) {
return new HistoryPlaylist(source);
}
public HistoryPlaylist[] newArray(int size) {
return new HistoryPlaylist[size];
}
};
} }

View file

@ -1,6 +1,7 @@
package com.kabouzeid.gramophone.model.smartplaylist; package com.kabouzeid.gramophone.model.smartplaylist;
import android.content.Context; import android.content.Context;
import android.os.Parcel;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
@ -29,4 +30,29 @@ public class LastAddedPlaylist extends AbsSmartPlaylist {
public void clear(@NonNull Context context) { public void clear(@NonNull Context context) {
PreferenceUtil.getInstance(context).setLastAddedCutoffTimestamp(System.currentTimeMillis()); PreferenceUtil.getInstance(context).setLastAddedCutoffTimestamp(System.currentTimeMillis());
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
}
protected LastAddedPlaylist(Parcel in) {
super(in);
}
public static final Creator<LastAddedPlaylist> CREATOR = new Creator<LastAddedPlaylist>() {
public LastAddedPlaylist createFromParcel(Parcel source) {
return new LastAddedPlaylist(source);
}
public LastAddedPlaylist[] newArray(int size) {
return new LastAddedPlaylist[size];
}
};
} }

View file

@ -1,6 +1,7 @@
package com.kabouzeid.gramophone.model.smartplaylist; package com.kabouzeid.gramophone.model.smartplaylist;
import android.content.Context; import android.content.Context;
import android.os.Parcel;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
@ -29,4 +30,29 @@ public class MyTopTracksPlaylist extends AbsSmartPlaylist {
public void clear(@NonNull Context context) { public void clear(@NonNull Context context) {
SongPlayCountStore.getInstance(context).clear(); SongPlayCountStore.getInstance(context).clear();
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
}
protected MyTopTracksPlaylist(Parcel in) {
super(in);
}
public static final Creator<MyTopTracksPlaylist> CREATOR = new Creator<MyTopTracksPlaylist>() {
public MyTopTracksPlaylist createFromParcel(Parcel source) {
return new MyTopTracksPlaylist(source);
}
public MyTopTracksPlaylist[] newArray(int size) {
return new MyTopTracksPlaylist[size];
}
};
} }

View file

@ -144,7 +144,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
private void getIntentExtras() { private void getIntentExtras() {
Bundle intentExtras = getIntent().getExtras(); Bundle intentExtras = getIntent().getExtras();
try { try {
playlist = (Playlist) intentExtras.getSerializable(EXTRA_PLAYLIST); playlist = (Playlist) intentExtras.getParcelable(EXTRA_PLAYLIST);
} catch (ClassCastException ignored) { } catch (ClassCastException ignored) {
} }
if (playlist == null) { if (playlist == null) {