package net.rdrei.android.scdl2.api; import android.os.Parcel; import android.os.Parcelable; import com.gu.option.Option; import net.rdrei.android.scdl2.api.entity.PlaylistEntity; import net.rdrei.android.scdl2.api.entity.TrackEntity; public class MediaState implements Parcelable { private MediaDownloadType mType = MediaDownloadType.UNKNOWN; private Option<TrackEntity> mTrackOption = Option.none(); private Option<PlaylistEntity> mPlaylistOption = Option.none(); public static MediaState UNKNOWN = unknown(); public MediaState() { } public static MediaState fromEntity(TrackEntity track) { final MediaState state = new MediaState(); state.mType = MediaDownloadType.TRACK; state.mTrackOption = Option.some(track); return state; } public static MediaState fromEntity(PlaylistEntity playlist) { final MediaState state = new MediaState(); state.mType = MediaDownloadType.PLAYLIST; state.mPlaylistOption = Option.some(playlist); return state; } public MediaDownloadType getType() { return mType; } public Option<TrackEntity> getTrackOption() { return mTrackOption; } public Option<PlaylistEntity> getPlaylistOption() { return mPlaylistOption; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mType.toString()); if (this.mType == MediaDownloadType.TRACK) { dest.writeByte((byte) (mTrackOption.isEmpty() ? 0 : 1)); if (!mTrackOption.isEmpty()) { dest.writeParcelable(mTrackOption.get(), flags); ; } } else if (mType == MediaDownloadType.PLAYLIST) { dest.writeByte((byte) (mPlaylistOption.isEmpty() ? 0 : 1)); if (!mPlaylistOption.isEmpty()) { dest.writeParcelable(mPlaylistOption.get(), flags); ; } } } private MediaState(Parcel in) { mType = MediaDownloadType.valueOf(in.readString()); if (mType == MediaDownloadType.TRACK) { if (in.readByte() == 1) { mTrackOption = Option.some( (TrackEntity) in.readParcelable(TrackEntity.class.getClassLoader())); } } else if (mType == MediaDownloadType.PLAYLIST) { if (in.readByte() == 1) { mPlaylistOption = Option.some( (PlaylistEntity) in.readParcelable(PlaylistEntity.class.getClassLoader())); } } } public static Creator<MediaState> CREATOR = new Creator<MediaState>() { public MediaState createFromParcel(Parcel source) { return new MediaState(source); } public MediaState[] newArray(int size) { return new MediaState[size]; } }; @Override public String toString() { return "MediaState{" + "mType=" + mType + ", mTrackOption=" + mTrackOption + ", mPlaylistOption=" + mPlaylistOption + '}'; } private static MediaState unknown() { final MediaState state = new MediaState(); state.mType = MediaDownloadType.UNKNOWN; return state; } }