package com.xda.one.model.augmented;
import com.xda.one.api.model.interfaces.UnifiedThread;
import com.xda.one.api.model.response.ResponseUnifiedThread;
import com.xda.one.parser.ContentParser;
import com.xda.one.parser.TextDataStructure;
import com.xda.one.util.PostUtils;
import com.xda.one.util.StringUtils;
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.Spannable;
public class AugmentedUnifiedThread implements UnifiedThread {
public static final Parcelable.Creator<AugmentedUnifiedThread> CREATOR
= new Parcelable.Creator<AugmentedUnifiedThread>() {
@Override
public AugmentedUnifiedThread createFromParcel(Parcel source) {
return new AugmentedUnifiedThread(source);
}
@Override
public AugmentedUnifiedThread[] newArray(int size) {
return new AugmentedUnifiedThread[size];
}
};
private static final int MAX_STRING_LENGTH = 100;
private final UnifiedThread mUnifiedThread;
private final String mSubPageText;
private boolean mSubscribed;
public AugmentedUnifiedThread(final UnifiedThread thread, final Context context) {
mUnifiedThread = thread;
mSubscribed = thread.isSubscribed();
final String text = thread.getFirstPostContent();
final Spannable formattedContent = ContentParser.parseAndSmilifyBBCode(context, text);
final TextDataStructure dataStructure = new TextDataStructure(formattedContent);
mSubPageText = PostUtils.getCreatedText(dataStructure, MAX_STRING_LENGTH);
}
public AugmentedUnifiedThread(final Parcel source) {
mUnifiedThread = new ResponseUnifiedThread(source);
mSubscribed = source.readByte() != 0;
mSubPageText = source.readString();
}
// Important methods
@Override
public boolean isSubscribed() {
return mSubscribed;
}
public void setSubscribedFlag(boolean newValue) {
mSubscribed = newValue;
}
public String getSubPageText() {
return mSubPageText;
}
// Delegated methods
@Override
public String getThreadId() {
return mUnifiedThread.getThreadId();
}
@Override
public int getLastPostId() {
return mUnifiedThread.getLastPostId();
}
@Override
public String getLastPoster() {
return mUnifiedThread.getLastPoster();
}
@Override
public boolean isAttach() {
return mUnifiedThread.isAttach();
}
@Override
public int getFirstPostId() {
return mUnifiedThread.getFirstPostId();
}
@Override
public int getReplyCount() {
return mUnifiedThread.getReplyCount();
}
@Override
public boolean hasAttachment() {
return mUnifiedThread.hasAttachment();
}
@Override
public String getThreadSlug() {
return mUnifiedThread.getThreadSlug();
}
@Override
public String getForumTitle() {
return mUnifiedThread.getForumTitle();
}
@Override
public int getForumId() {
return mUnifiedThread.getForumId();
}
@Override
public int getViews() {
return mUnifiedThread.getViews();
}
@Override
public long getLastPost() {
return mUnifiedThread.getLastPost();
}
@Override
public String getTitle() {
return mUnifiedThread.getTitle();
}
@Override
public String getFirstPostContent() {
return mUnifiedThread.getFirstPostContent();
}
@Override
public String getPostUsername() {
return mUnifiedThread.getPostUsername();
}
@Override
public boolean isSticky() {
return mUnifiedThread.isSticky();
}
@Override
public int getTotalPosts() {
return mUnifiedThread.getTotalPosts();
}
@Override
public String getAvatarUrl() {
return mUnifiedThread.getAvatarUrl();
}
@Override
public boolean isUnread() {
return mUnifiedThread.isUnread();
}
@Override
public boolean isOpen() {
return mUnifiedThread.isOpen();
}
@Override
public String getWebUri() {
return mUnifiedThread.getWebUri();
}
// Parcelable interface
@Override
public int describeContents() {
return mUnifiedThread.describeContents();
}
@Override
public void writeToParcel(Parcel parcel, int i) {
mUnifiedThread.writeToParcel(parcel, i);
parcel.writeByte(mSubscribed ? (byte) 1 : (byte) 0);
parcel.writeString(mSubPageText);
}
@Override
public boolean equals(final Object o) {
if (this == o) {
return true;
} else if (o == null || getClass() != o.getClass()) {
return false;
}
final AugmentedUnifiedThread thread = (AugmentedUnifiedThread) o;
return mUnifiedThread.equals(thread.mUnifiedThread);
}
@Override
public int hashCode() {
return mUnifiedThread.hashCode();
}
}