From 5bdd7632488982d8dc4bf1c4f26dc1d45329370c Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Wed, 23 Dec 2015 17:30:29 +0100 Subject: [PATCH] Replaced Serializable with Parcelable everywhere --- .../adapter/AlbumCoverPagerAdapter.java | 4 +- .../adapter/song/ArtistSongAdapter.java | 2 +- .../dialogs/AddToPlaylistDialog.java | 4 +- .../dialogs/ClearSmartPlaylistDialog.java | 4 +- .../dialogs/CreatePlaylistDialog.java | 4 +- .../dialogs/DeletePlaylistDialog.java | 4 +- .../gramophone/dialogs/DeleteSongsDialog.java | 4 +- .../dialogs/PlayingQueueDialog.java | 6 +- .../dialogs/RemoveFromPlaylistDialog.java | 4 +- .../gramophone/dialogs/SongDetailDialog.java | 4 +- .../gramophone/dialogs/SongShareDialog.java | 4 +- .../com/kabouzeid/gramophone/model/Album.java | 103 +++++++++------ .../kabouzeid/gramophone/model/Artist.java | 88 ++++++++----- .../kabouzeid/gramophone/model/Playlist.java | 66 ++++++---- .../gramophone/model/PlaylistSong.java | 63 +++++++-- .../com/kabouzeid/gramophone/model/Song.java | 124 ++++++++++++------ .../model/smartplaylist/AbsSmartPlaylist.java | 20 ++- .../model/smartplaylist/HistoryPlaylist.java | 26 ++++ .../smartplaylist/LastAddedPlaylist.java | 26 ++++ .../smartplaylist/MyTopTracksPlaylist.java | 26 ++++ .../ui/activities/PlaylistDetailActivity.java | 2 +- 21 files changed, 413 insertions(+), 175 deletions(-) diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java index 953ded85..534b4141 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/AlbumCoverPagerAdapter.java @@ -93,7 +93,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter { public static AlbumCoverFragment newInstance(final Song song) { AlbumCoverFragment frag = new AlbumCoverFragment(); final Bundle args = new Bundle(); - args.putSerializable(SONG_ARG, song); + args.putParcelable(SONG_ARG, song); frag.setArguments(args); return frag; } @@ -101,7 +101,7 @@ public class AlbumCoverPagerAdapter extends CustomFragmentStatePagerAdapter { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); - song = (Song) getArguments().getSerializable(SONG_ARG); + song = (Song) getArguments().getParcelable(SONG_ARG); } @Override 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 74c047ea..7845177e 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 @@ -157,7 +157,7 @@ public class ArtistSongAdapter extends ArrayAdapter implements MaterialCab final int size = checked.size(); 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)); } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java index 9f72f74f..e98d495f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/AddToPlaylistDialog.java @@ -31,7 +31,7 @@ public class AddToPlaylistDialog extends LeakDetectDialogFragment { public static AddToPlaylistDialog create(ArrayList songs) { AddToPlaylistDialog dialog = new AddToPlaylistDialog(); Bundle args = new Bundle(); - args.putSerializable("songs", songs); + args.putParcelableArrayList("songs", songs); dialog.setArguments(args); return dialog; } @@ -52,7 +52,7 @@ public class AddToPlaylistDialog extends LeakDetectDialogFragment { @Override public void onSelection(@NonNull MaterialDialog materialDialog, View view, int i, CharSequence charSequence) { //noinspection unchecked - final ArrayList songs = (ArrayList) getArguments().getSerializable("songs"); + final ArrayList songs = getArguments().getParcelableArrayList("songs"); if (songs == null) return; if (i == 0) { materialDialog.dismiss(); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java index f7104664..fabd4932 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/ClearSmartPlaylistDialog.java @@ -18,7 +18,7 @@ public class ClearSmartPlaylistDialog extends LeakDetectDialogFragment { public static ClearSmartPlaylistDialog create(AbsSmartPlaylist playlist) { ClearSmartPlaylistDialog dialog = new ClearSmartPlaylistDialog(); Bundle args = new Bundle(); - args.putSerializable("playlist", playlist); + args.putParcelable("playlist", playlist); dialog.setArguments(args); return dialog; } @@ -27,7 +27,7 @@ public class ClearSmartPlaylistDialog extends LeakDetectDialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //noinspection unchecked - final AbsSmartPlaylist playlist = (AbsSmartPlaylist) getArguments().getSerializable("playlist"); + final AbsSmartPlaylist playlist = (AbsSmartPlaylist) getArguments().getParcelable("playlist"); int title = R.string.clear_playlist_title; //noinspection ConstantConditions CharSequence content = Html.fromHtml(getString(R.string.clear_playlist_x, playlist.name)); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java index 6ba1a30e..74e0a5f6 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/CreatePlaylistDialog.java @@ -35,7 +35,7 @@ public class CreatePlaylistDialog extends LeakDetectDialogFragment { public static CreatePlaylistDialog create(ArrayList songs) { CreatePlaylistDialog dialog = new CreatePlaylistDialog(); Bundle args = new Bundle(); - args.putSerializable("songs", songs); + args.putParcelableArrayList("songs", songs); dialog.setArguments(args); return dialog; } @@ -59,7 +59,7 @@ public class CreatePlaylistDialog extends LeakDetectDialogFragment { final int playlistId = PlaylistsUtil.createPlaylist(getActivity(), charSequence.toString()); if (playlistId != -1 && getActivity() != null) { //noinspection unchecked - ArrayList songs = (ArrayList) getArguments().getSerializable("songs"); + ArrayList songs = getArguments().getParcelableArrayList("songs"); if (songs != null) { PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true); } diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java index 18c6bbd8..4db51603 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeletePlaylistDialog.java @@ -28,7 +28,7 @@ public class DeletePlaylistDialog extends LeakDetectDialogFragment { public static DeletePlaylistDialog create(ArrayList playlists) { DeletePlaylistDialog dialog = new DeletePlaylistDialog(); Bundle args = new Bundle(); - args.putSerializable("playlists", playlists); + args.putParcelableArrayList("playlists", playlists); dialog.setArguments(args); return dialog; } @@ -37,7 +37,7 @@ public class DeletePlaylistDialog extends LeakDetectDialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //noinspection unchecked - final ArrayList playlists = (ArrayList) getArguments().getSerializable("playlists"); + final ArrayList playlists = getArguments().getParcelableArrayList("playlists"); int title; CharSequence content; //noinspection ConstantConditions diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java index 4f0092af..1f169777 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/DeleteSongsDialog.java @@ -28,7 +28,7 @@ public class DeleteSongsDialog extends LeakDetectDialogFragment { public static DeleteSongsDialog create(ArrayList songs) { DeleteSongsDialog dialog = new DeleteSongsDialog(); Bundle args = new Bundle(); - args.putSerializable("songs", songs); + args.putParcelableArrayList("songs", songs); dialog.setArguments(args); return dialog; } @@ -37,7 +37,7 @@ public class DeleteSongsDialog extends LeakDetectDialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //noinspection unchecked - final ArrayList songs = (ArrayList) getArguments().getSerializable("songs"); + final ArrayList songs = getArguments().getParcelableArrayList("songs"); int title; CharSequence content; if (songs.size() > 1) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/PlayingQueueDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/PlayingQueueDialog.java index 87b9ad32..51bbabca 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/PlayingQueueDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/PlayingQueueDialog.java @@ -25,7 +25,7 @@ public class PlayingQueueDialog extends LeakDetectDialogFragment { final ArrayList playingQueue = MusicPlayerRemote.getPlayingQueue(); PlayingQueueDialog dialog = new PlayingQueueDialog(); Bundle args = new Bundle(); - args.putSerializable("queue", playingQueue); + args.putParcelableArrayList("queue", playingQueue); dialog.setArguments(args); return dialog; } @@ -44,14 +44,14 @@ public class PlayingQueueDialog extends LeakDetectDialogFragment { if (getActivity() == null) return; //noinspection unchecked - ArrayList playingQueue = (ArrayList) getArguments().getSerializable("queue"); + ArrayList playingQueue = getArguments().getParcelableArrayList("queue"); AddToPlaylistDialog.create(playingQueue).show(getActivity().getSupportFragmentManager(), "ADD_PLAYLIST"); } }) .build(); //noinspection unchecked - final ArrayList playingQueue = (ArrayList) getArguments().getSerializable("queue"); + final ArrayList playingQueue = getArguments().getParcelableArrayList("queue"); final DragSortListView dragSortListView = (DragSortListView) dialog.getCustomView().findViewById(R.id.dragSortListView); final PlayingQueueAdapterDeprecated playingQueueAdapterDeprecated = new PlayingQueueAdapterDeprecated((AppCompatActivity) getActivity(), playingQueue); diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java index b792ce7d..a91f57b9 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/RemoveFromPlaylistDialog.java @@ -28,7 +28,7 @@ public class RemoveFromPlaylistDialog extends LeakDetectDialogFragment { public static RemoveFromPlaylistDialog create(ArrayList songs) { RemoveFromPlaylistDialog dialog = new RemoveFromPlaylistDialog(); Bundle args = new Bundle(); - args.putSerializable("songs", songs); + args.putParcelableArrayList("songs", songs); dialog.setArguments(args); return dialog; } @@ -37,7 +37,7 @@ public class RemoveFromPlaylistDialog extends LeakDetectDialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { //noinspection unchecked - final ArrayList songs = (ArrayList) getArguments().getSerializable("songs"); + final ArrayList songs = getArguments().getParcelableArrayList("songs"); int title; CharSequence content; if (songs.size() > 1) { diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java index 25720619..2e881ea2 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongDetailDialog.java @@ -38,7 +38,7 @@ public class SongDetailDialog extends LeakDetectDialogFragment { public static SongDetailDialog create(Song song) { SongDetailDialog dialog = new SongDetailDialog(); Bundle args = new Bundle(); - args.putSerializable("song", song); + args.putParcelable("song", song); dialog.setArguments(args); return dialog; } @@ -57,7 +57,7 @@ public class SongDetailDialog extends LeakDetectDialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Activity context = getActivity(); - final Song song = (Song) getArguments().getSerializable("song"); + final Song song = (Song) getArguments().getParcelable("song"); MaterialDialog dialog = new MaterialDialog.Builder(context) .customView(R.layout.dialog_file_details, true) diff --git a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java index 1e3e411b..ef0aa289 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java +++ b/app/src/main/java/com/kabouzeid/gramophone/dialogs/SongShareDialog.java @@ -19,7 +19,7 @@ public class SongShareDialog extends LeakDetectDialogFragment { public static SongShareDialog create(final Song song) { final SongShareDialog dialog = new SongShareDialog(); final Bundle args = new Bundle(); - args.putSerializable("song", song); + args.putParcelable("song", song); dialog.setArguments(args); return dialog; } @@ -27,7 +27,7 @@ public class SongShareDialog extends LeakDetectDialogFragment { @NonNull @Override 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); return new MaterialDialog.Builder(getActivity()) .title(R.string.what_do_you_want_to_share) diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java index 440d47b4..5175f4ed 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Album.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Album.java @@ -1,13 +1,12 @@ package com.kabouzeid.gramophone.model; -import android.support.annotation.Nullable; -import android.text.TextUtils; +import android.os.Parcel; +import android.os.Parcelable; /** * @author Karim Abou Zeid (kabouzeid) */ -public class Album { - +public class Album implements Parcelable { public final int id; public final int artistId; public final String title; @@ -34,47 +33,77 @@ public class Album { 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 public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + id; - result = prime * result + (title == null ? 0 : title.hashCode()); - result = prime * result + (artistName == null ? 0 : artistName.hashCode()); - result = prime * result + songCount; - result = prime * result + year; + int result = id; + result = 31 * result + artistId; + result = 31 * result + (title != null ? title.hashCode() : 0); + result = 31 * result + (artistName != null ? artistName.hashCode() : 0); + result = 31 * result + songCount; + result = 31 * result + year; return result; } @Override - public boolean equals(@Nullable final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - 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; + public String toString() { + return "Album{" + + "id=" + id + + ", artistId=" + artistId + + ", title='" + title + '\'' + + ", artistName='" + artistName + '\'' + + ", songCount=" + songCount + + ", year=" + year + + '}'; + } + + + @Override + public int describeContents() { + return 0; } @Override - public String toString() { - return title; + public void writeToParcel(Parcel dest, int flags) { + 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 CREATOR = new Parcelable.Creator() { + public Album createFromParcel(Parcel source) { + return new Album(source); + } + + public Album[] newArray(int size) { + return new Album[size]; + } + }; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java index 238d0399..bad86935 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Artist.java @@ -1,12 +1,12 @@ package com.kabouzeid.gramophone.model; -import android.support.annotation.Nullable; -import android.text.TextUtils; +import android.os.Parcel; +import android.os.Parcelable; /** * @author Karim Abou Zeid (kabouzeid) */ -public class Artist { +public class Artist implements Parcelable { public final int id; public final String name; public final int albumCount; @@ -26,43 +26,67 @@ public class Artist { 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 public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + albumCount; - result = prime * result + id; - result = prime * result + (name == null ? 0 : name.hashCode()); - result = prime * result + songCount; + int result = id; + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + albumCount; + result = 31 * result + songCount; return result; } @Override - public boolean equals(@Nullable final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - 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; + public String toString() { + return "Artist{" + + "id=" + id + + ", name='" + name + '\'' + + ", albumCount=" + albumCount + + ", songCount=" + songCount + + '}'; + } + + + @Override + public int describeContents() { + return 0; } @Override - public String toString() { - return name; + public void writeToParcel(Parcel dest, int flags) { + 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 CREATOR = new Parcelable.Creator() { + public Artist createFromParcel(Parcel source) { + return new Artist(source); + } + + public Artist[] newArray(int size) { + return new Artist[size]; + } + }; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java index 3f52cc22..23da5feb 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Playlist.java @@ -1,17 +1,12 @@ package com.kabouzeid.gramophone.model; -import android.support.annotation.Nullable; -import android.text.TextUtils; - -import java.io.Serializable; +import android.os.Parcel; +import android.os.Parcelable; /** * @author Karim Abou Zeid (kabouzeid) */ -public class Playlist implements Serializable { - - private static final long serialVersionUID = 3013703495354856981L; - +public class Playlist implements Parcelable { public final int id; public final String name; @@ -25,35 +20,48 @@ public class Playlist implements Serializable { 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 public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + id; - result = prime * result + (name == null ? 0 : name.hashCode()); + int result = id; + result = 31 * result + (name != null ? name.hashCode() : 0); return result; } @Override - public boolean equals(@Nullable final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Playlist other = (Playlist) obj; - if (id != other.id) { - return false; - } - return TextUtils.equals(name, other.name); + public String toString() { + return "Playlist{" + + "id=" + id + + ", name='" + name + '\'' + + '}'; + } + + + @Override + public int describeContents() { + return 0; } @Override - public String toString() { - return name; + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(this.id); + dest.writeString(this.name); } + + protected Playlist(Parcel in) { + this.id = in.readInt(); + this.name = in.readString(); + } + } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java index dc563367..2cf2ed20 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/PlaylistSong.java @@ -1,8 +1,8 @@ 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 idInPlayList; @@ -20,21 +20,62 @@ public class PlaylistSong extends Song { 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 public int hashCode() { - final int prime = 31; int result = super.hashCode(); - result = prime * result + playlistId; - result = prime * result + idInPlayList; + result = 31 * result + playlistId; + result = 31 * result + idInPlayList; return result; } @Override - public boolean equals(final Object obj) { - if (super.equals(obj)) { - final PlaylistSong other = (PlaylistSong) obj; - return playlistId == other.playlistId && idInPlayList == other.idInPlayList; - } - return false; + public String toString() { + return super.toString() + + "PlaylistSong{" + + "playlistId=" + playlistId + + ", idInPlayList=" + idInPlayList + + '}'; } + + + @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 CREATOR = new Creator() { + public PlaylistSong createFromParcel(Parcel source) { + return new PlaylistSong(source); + } + + public PlaylistSong[] newArray(int size) { + return new PlaylistSong[size]; + } + }; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java index beeeb6ed..da1a1709 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/Song.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/Song.java @@ -1,17 +1,12 @@ package com.kabouzeid.gramophone.model; -import android.support.annotation.Nullable; -import android.text.TextUtils; - -import java.io.Serializable; +import android.os.Parcel; +import android.os.Parcelable; /** * @author Karim Abou Zeid (kabouzeid) */ -public class Song implements Serializable { - - private static final long serialVersionUID = 3720703366054566981L; - +public class Song implements Parcelable { public final int id; public final int albumId; public final int artistId; @@ -47,47 +42,94 @@ public class Song implements Serializable { 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 public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (albumName == null ? 0 : albumName.hashCode()); - result = prime * result + (artistName == null ? 0 : artistName.hashCode()); - result = prime * result + (int) duration; - result = prime * result + id; - result = prime * result + (title == null ? 0 : title.hashCode()); + int result = id; + result = 31 * result + albumId; + result = 31 * result + artistId; + result = 31 * result + (title != null ? title.hashCode() : 0); + result = 31 * result + (artistName != null ? artistName.hashCode() : 0); + result = 31 * result + (albumName != null ? albumName.hashCode() : 0); + result = 31 * result + (int) (duration ^ (duration >>> 32)); + result = 31 * result + trackNumber; + result = 31 * result + (data != null ? data.hashCode() : 0); return result; } @Override - public boolean equals(@Nullable final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - 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); + public String toString() { + return "Song{" + + "id=" + id + + ", albumId=" + albumId + + ", artistId=" + artistId + + ", title='" + title + '\'' + + ", artistName='" + artistName + '\'' + + ", albumName='" + albumName + '\'' + + ", duration=" + duration + + ", trackNumber=" + trackNumber + + ", data='" + data + '\'' + + '}'; + } + + + @Override + public int describeContents() { + return 0; } @Override - public String toString() { - return title; + public void writeToParcel(Parcel dest, int flags) { + 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 CREATOR = new Creator() { + public Song createFromParcel(Parcel source) { + return new Song(source); + } + + public Song[] newArray(int size) { + return new Song[size]; + } + }; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java index 7e9a78ea..8a89f8c3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/AbsSmartPlaylist.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; +import android.os.Parcel; import android.support.annotation.DrawableRes; import android.support.annotation.Nullable; @@ -14,8 +15,6 @@ import java.util.ArrayList; * @author Karim Abou Zeid (kabouzeid) */ public abstract class AbsSmartPlaylist extends Playlist { - private static final long serialVersionUID = 3013701295356403681L; - @DrawableRes public final int iconRes; @@ -52,4 +51,21 @@ public abstract class AbsSmartPlaylist extends Playlist { } 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(); + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java index ad042a7c..02cc93c3 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/HistoryPlaylist.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; +import android.os.Parcel; import android.support.annotation.NonNull; import com.kabouzeid.gramophone.R; @@ -29,4 +30,29 @@ public class HistoryPlaylist extends AbsSmartPlaylist { public void clear(@NonNull Context context) { 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 CREATOR = new Creator() { + public HistoryPlaylist createFromParcel(Parcel source) { + return new HistoryPlaylist(source); + } + + public HistoryPlaylist[] newArray(int size) { + return new HistoryPlaylist[size]; + } + }; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java index 88e014f0..f3772c0f 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/LastAddedPlaylist.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; +import android.os.Parcel; import android.support.annotation.NonNull; import com.kabouzeid.gramophone.R; @@ -29,4 +30,29 @@ public class LastAddedPlaylist extends AbsSmartPlaylist { public void clear(@NonNull Context context) { 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 CREATOR = new Creator() { + public LastAddedPlaylist createFromParcel(Parcel source) { + return new LastAddedPlaylist(source); + } + + public LastAddedPlaylist[] newArray(int size) { + return new LastAddedPlaylist[size]; + } + }; } diff --git a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java index 8cf7e0e4..444debf1 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java +++ b/app/src/main/java/com/kabouzeid/gramophone/model/smartplaylist/MyTopTracksPlaylist.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.model.smartplaylist; import android.content.Context; +import android.os.Parcel; import android.support.annotation.NonNull; import com.kabouzeid.gramophone.R; @@ -29,4 +30,29 @@ public class MyTopTracksPlaylist extends AbsSmartPlaylist { public void clear(@NonNull Context context) { 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 CREATOR = new Creator() { + public MyTopTracksPlaylist createFromParcel(Parcel source) { + return new MyTopTracksPlaylist(source); + } + + public MyTopTracksPlaylist[] newArray(int size) { + return new MyTopTracksPlaylist[size]; + } + }; } \ 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 51bb3938..da0867ef 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 @@ -144,7 +144,7 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme private void getIntentExtras() { Bundle intentExtras = getIntent().getExtras(); try { - playlist = (Playlist) intentExtras.getSerializable(EXTRA_PLAYLIST); + playlist = (Playlist) intentExtras.getParcelable(EXTRA_PLAYLIST); } catch (ClassCastException ignored) { } if (playlist == null) {