/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.util.AttributeSet; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.content.EsAvatarData; import com.galaxy.meetup.client.android.content.cache.ImageRequest; /** * * @author sihai * */ public class MessageListItemViewImage extends RelativeLayout implements OnClickListener { private static Bitmap sDefaultUserImage; private static int sFailedAuthorColor; private static int sNormalAuthorColor; private ImageView mAuthorArrow; private TextView mAuthorNameTextView; private AvatarView mAvatarView; private TextView mCancelButton; private String mFullResUrl; private String mGaiaId; private View mImageFrame; private Integer mImageHeight; private Integer mImageWidth; private OnMeasuredListener mMeasuredListener; private MessageClickListener mMessageClickListener; private EsImageView mMessageImageView; private long mMessageRowId; private int mMessageStatus; private int mPosition; private TextView mRetryButton; private boolean mShowAuthor; private boolean mShowStatus; private ImageView mStatusImage; private TextView mTimeSinceTextView; public MessageListItemViewImage(Context context) { this(context, null); } public MessageListItemViewImage(Context context, AttributeSet attributeset) { super(context, attributeset); mImageWidth = null; mImageHeight = null; if(sDefaultUserImage == null) { Resources resources = getContext().getApplicationContext().getResources(); sDefaultUserImage = EsAvatarData.getMediumDefaultAvatar(context); sNormalAuthorColor = resources.getColor(R.color.realtimechat_message_author); sFailedAuthorColor = resources.getColor(R.color.realtimechat_message_author_failed); } } private void updateStatusImages() { if(!mShowStatus) { mStatusImage.setVisibility(8); return; } switch(mMessageStatus) { case 0: case 1: case 7: mStatusImage.setImageResource(R.drawable.ic_huddle_sending); mStatusImage.setVisibility(0); break; case 2: case 8: mStatusImage.setVisibility(8); break; case 3: case 4: mStatusImage.setImageResource(R.drawable.ic_huddle_sent); mStatusImage.setVisibility(0); break; case 5: mStatusImage.setImageResource(R.drawable.ic_huddle_read); mStatusImage.setVisibility(0); break; case 6: default: mStatusImage.setVisibility(8); mRetryButton.setVisibility(8); mCancelButton.setVisibility(8); mTimeSinceTextView.setVisibility(8); break; } if(mMessageStatus == 2 || mMessageStatus == 8) { mTimeSinceTextView.setVisibility(8); mRetryButton.setVisibility(0); mCancelButton.setVisibility(0); mAuthorNameTextView.setTextColor(sFailedAuthorColor); mAuthorNameTextView.setVisibility(0); } else { mAuthorNameTextView.setTextColor(sNormalAuthorColor); if(mShowAuthor) mTimeSinceTextView.setVisibility(0); else mTimeSinceTextView.setVisibility(8); mRetryButton.setVisibility(8); mCancelButton.setVisibility(8); } } public final void clear() { mAuthorNameTextView.setText(null); mTimeSinceTextView.setText(null); mMessageImageView.onRecycle(); mGaiaId = null; mStatusImage.setVisibility(8); mRetryButton.setVisibility(8); } public final String getFullResUrl() { return mFullResUrl; } public final Integer getImageHeight() { return mImageHeight; } public final Integer getImageWidth() { return mImageWidth; } public final void hideAuthor() { mShowAuthor = false; mAvatarView.setVisibility(8); mAuthorNameTextView.setVisibility(8); mAuthorArrow.setVisibility(8); updateStatusImages(); } public void onClick(View view) { if(view != mAvatarView || mMessageClickListener == null) { if(view == mRetryButton && mMessageClickListener != null) mMessageClickListener.onRetryButtonClicked(mMessageRowId); else if(view == mCancelButton && mMessageClickListener != null) mMessageClickListener.onCancelButtonClicked(mMessageRowId); else if(view == mMessageImageView && mMessageClickListener != null) mMessageClickListener.onMediaImageClick(mFullResUrl, mAvatarView.getGaiaId()); } else { mMessageClickListener.onUserImageClicked(null); } } public void onFinishInflate() { mAvatarView = (AvatarView)findViewById(R.id.avatar_image); mAuthorArrow = (ImageView)findViewById(R.id.authorArrow); mAvatarView.setOnClickListener(this); mAuthorNameTextView = (TextView)findViewById(R.id.authorName); mMessageImageView = (EsImageView)findViewById(R.id.messageImage); mMessageImageView.setOnClickListener(this); mImageFrame = findViewById(R.id.image_frame); mTimeSinceTextView = (TextView)findViewById(R.id.timeSince); mStatusImage = (ImageView)findViewById(R.id.message_status); mRetryButton = (TextView)findViewById(R.id.retry_send); mRetryButton.setOnClickListener(this); mCancelButton = (TextView)findViewById(R.id.cancel_send); mCancelButton.setOnClickListener(this); mShowStatus = true; mShowAuthor = true; } protected void onMeasure(int i, int j) { super.onMeasure(i, j); mImageWidth = Integer.valueOf(mMessageImageView.getMeasuredWidth()); mImageHeight = Integer.valueOf(mMessageImageView.getMeasuredHeight()); if(mMeasuredListener != null) mMeasuredListener.onMeasured(this); } public void setAuthorName(CharSequence charsequence) { mAuthorNameTextView.setText(charsequence); } public void setGaiaId(String s) { mAvatarView.setGaiaId(s); } public void setImage(String s, ImageRequest imagerequest) { mFullResUrl = s; mMessageImageView.setRequest(imagerequest); mMessageImageView.setVisibility(0); mImageFrame.setVisibility(0); } public void setMessage(CharSequence charsequence) { mMessageImageView.setVisibility(8); mImageFrame.setVisibility(8); setBackgroundResource(R.color.clear); } public void setMessageClickListener(MessageClickListener messageclicklistener) { mMessageClickListener = messageclicklistener; } public void setMessageRowId(long l) { mMessageRowId = l; } public void setMessageStatus(int i, boolean flag) { mMessageStatus = i; mShowStatus = flag; updateStatusImages(); } public void setOnMeasureListener(OnMeasuredListener onmeasuredlistener) { mMeasuredListener = onmeasuredlistener; } public void setPosition(int i) { mPosition = i; } public void setTimeSince(CharSequence charsequence) { mTimeSinceTextView.setText(charsequence); } public final void showAuthor() { mShowAuthor = true; mAvatarView.setVisibility(0); mAuthorNameTextView.setVisibility(0); mAuthorArrow.setVisibility(0); updateStatusImages(); } public final void updateContentDescription() { StringBuilder stringbuilder = new StringBuilder(); Resources resources = getResources(); if(mShowAuthor) { CharSequence charsequence1 = mAuthorNameTextView.getText(); if(charsequence1 != null && charsequence1.length() > 0) { stringbuilder.append(resources.getString(R.string.realtimechat_message_description_author, new Object[] { charsequence1 })); stringbuilder.append(" "); } } CharSequence charsequence = mTimeSinceTextView.getText(); if(charsequence != null && charsequence.length() > 0) { stringbuilder.append(resources.getString(R.string.realtimechat_message_description_time_since, new Object[] { charsequence })); stringbuilder.append(" "); } stringbuilder.append(resources.getString(R.string.realtimechat_message_description_image)); setContentDescription(stringbuilder.toString()); } public static interface OnMeasuredListener { public abstract void onMeasured(View view); } }