package co.smartreceipts.android.widget.model;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.google.common.base.Preconditions;
import com.hadisatrio.optional.Optional;
public class UiIndicator implements Parcelable {
public enum State {
Idle, Loading, Error, Succcess
}
private final State state;
private final Optional<String> message;
public UiIndicator(@NonNull State state, @Nullable String message) {
this.state = Preconditions.checkNotNull(state);
this.message = Optional.ofNullable(message);
}
@NonNull
public static UiIndicator idle() {
return new UiIndicator(State.Idle, null);
}
@NonNull
public static UiIndicator loading() {
return new UiIndicator(State.Loading, null);
}
@NonNull
public static UiIndicator error() {
return new UiIndicator(State.Error, null);
}
@NonNull
public static UiIndicator error(@NonNull String message) {
return new UiIndicator(State.Error, message);
}
@NonNull
public static UiIndicator success() {
return new UiIndicator(State.Succcess, null);
}
@NonNull
public static UiIndicator success(@NonNull String message) {
return new UiIndicator(State.Succcess, message);
}
@NonNull
public State getState() {
return state;
}
@NonNull
public Optional<String> getMessage() {
return message;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof UiIndicator)) return false;
UiIndicator that = (UiIndicator) o;
if (state != that.state) return false;
return message.equals(that.message);
}
@Override
public int hashCode() {
int result = state.hashCode();
result = 31 * result + message.hashCode();
return result;
}
@Override
public String toString() {
return "UiIndicator{" +
"state=" + state +
", message='" + message + '\'' +
'}';
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.state.ordinal());
dest.writeString(this.message.orNull());
}
public static final Creator<UiIndicator> CREATOR = new Creator<UiIndicator>() {
@Override
public UiIndicator createFromParcel(Parcel in) {
return new UiIndicator(State.values()[in.readInt()], in.readString());
}
@Override
public UiIndicator[] newArray(int size) {
return new UiIndicator[size];
}
};
}