package com.marverenic.music.player; import android.os.Parcel; import android.os.Parcelable; import com.marverenic.music.model.Song; import java.util.ArrayList; import java.util.Collections; import java.util.List; public final class PlayerState implements Parcelable { private final boolean mIsPlaying; private final List<Song> mQueue; private final List<Song> mShuffledQueue; private final int mQueuePosition; private final int mSeekPosition; private PlayerState(boolean isPlaying, List<Song> queue, List<Song> shuffledQueue, int queuePosition, int seekPosition) { mIsPlaying = isPlaying; mQueue = queue; mShuffledQueue = shuffledQueue; mQueuePosition = queuePosition; mSeekPosition = seekPosition; } protected PlayerState(Parcel in) { mIsPlaying = in.readByte() != 0; mQueue = in.createTypedArrayList(Song.CREATOR); mShuffledQueue = in.createTypedArrayList(Song.CREATOR); mQueuePosition = in.readInt(); mSeekPosition = in.readInt(); } public static final Creator<PlayerState> CREATOR = new Creator<PlayerState>() { @Override public PlayerState createFromParcel(Parcel in) { return new PlayerState(in); } @Override public PlayerState[] newArray(int size) { return new PlayerState[size]; } }; public boolean isPlaying() { return mIsPlaying; } public List<Song> getQueue() { return mQueue; } public List<Song> getShuffledQueue() { return mShuffledQueue; } public int getQueuePosition() { return mQueuePosition; } public int getSeekPosition() { return mSeekPosition; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeByte((byte) (mIsPlaying ? 1 : 0)); dest.writeTypedList(mQueue); dest.writeTypedList(mShuffledQueue); dest.writeInt(mQueuePosition); dest.writeInt(mSeekPosition); } public static final class Builder { private boolean mIsPlaying; private List<Song> mQueue; private List<Song> mShuffledQueue; private int mQueuePosition; private int mSeekPosition; public Builder setPlaying(boolean isPlaying) { mIsPlaying = isPlaying; return this; } public Builder setQueue(List<Song> queue) { mQueue = Collections.unmodifiableList(new ArrayList<>(queue)); return this; } public Builder setShuffledQueue(List<Song> shuffledQueue) { mShuffledQueue = Collections.unmodifiableList(new ArrayList<>(shuffledQueue)); return this; } public Builder setQueuePosition(int queuePosition) { mQueuePosition = queuePosition; return this; } public Builder setSeekPosition(int seekPosition) { mSeekPosition = seekPosition; return this; } public PlayerState build() { return new PlayerState(mIsPlaying, mQueue, mShuffledQueue, mQueuePosition, mSeekPosition); } } }