package com.xda.one.model.augmented; import com.xda.one.api.model.interfaces.Message; import com.xda.one.api.model.response.ResponseMessage; import com.xda.one.parser.ContentParser; import com.xda.one.parser.TextDataStructure; import com.xda.one.util.StringUtils; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; public class AugmentedMessage implements Message { public static final Parcelable.Creator<AugmentedMessage> CREATOR = new Parcelable.Creator<AugmentedMessage>() { @Override public AugmentedMessage createFromParcel(final Parcel in) { return new AugmentedMessage(in); } @Override public AugmentedMessage[] newArray(final int size) { return new AugmentedMessage[size]; } }; private static final int MAX_LENGTH = 100; private final Message mMessage; private int mMessageRead; private String mSubMessage; private Spanned mMessageContent; private TextDataStructure mTextDataStructure; public AugmentedMessage(final Context context, final Message message) { mMessage = message; // Augmentation time mMessageRead = message.getMessageReadStatus(); final CharSequence messageText = mMessage.getMessageContent(); if (TextUtils.isEmpty(messageText)) { return; } final Spanned spanned = ContentParser.parseBBCode(context, messageText); setMessageContent(spanned); final String sub = StringUtils.trimCharSequence(spanned.toString(), MAX_LENGTH); mSubMessage = StringUtils.removeWhiteSpaces(sub); } private AugmentedMessage(final Parcel in) { mMessage = new ResponseMessage(in); mMessageRead = in.readInt(); final Spanned spanned = Html.fromHtml(in.readString()); setMessageContent(spanned); mSubMessage = in.readString(); } @Override public int getPmId() { return mMessage.getPmId(); } @Override public String getFromUserId() { return mMessage.getFromUserId(); } @Override public String getFromUserName() { return mMessage.getFromUserName(); } @Override public String getTitle() { return mMessage.getTitle(); } @Override public long getDate() { return mMessage.getDate(); } @Override public boolean isMessageUnread() { return mMessageRead == 0; } @Override public String getToUserArray() { return mMessage.getToUserArray(); } @Override public boolean isShowSignature() { return mMessage.isShowSignature(); } @Override public boolean isAllowSmilie() { return mMessage.isAllowSmilie(); } @Override public int getMessageReadStatus() { return mMessageRead; } @Override public void setMessageReadStatus(int messageRead) { mMessageRead = messageRead; } @Override public String getAvatarUrl() { return mMessage.getAvatarUrl(); } // Class specific stuff starts here @Override public Spanned getMessageContent() { return mMessageContent; } private void setMessageContent(final Spanned messageContent) { mMessageContent = messageContent; // While setting the message, also update the data structure mTextDataStructure = new TextDataStructure(messageContent); } @Override public String getSubMessage() { return mSubMessage; } @Override public TextDataStructure getTextDataStructure() { return mTextDataStructure; } private Message getMessage() { return mMessage; } // Parcelable starts here @Override public int describeContents() { return mMessage.describeContents(); } @Override public void writeToParcel(final Parcel dest, final int flags) { mMessage.writeToParcel(dest, flags); dest.writeInt(mMessageRead); dest.writeString(Html.toHtml(mMessageContent)); dest.writeString(mSubMessage); } // Equals and hashcode @Override public boolean equals(Object o) { if (!(o instanceof AugmentedMessage)) { return false; } final AugmentedMessage other = (AugmentedMessage) o; return getMessage().equals(other.getMessage()); } @Override public int hashCode() { return mMessage.hashCode() + 41; } }