package com.mcxiaoke.minicat.ui.widget;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.mcxiaoke.minicat.R;
import com.mcxiaoke.minicat.controller.UIController;
import com.mcxiaoke.minicat.util.StringHelper;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
/**
* @author mcxiaoke
* @version 1.1 2012.03.29
*/
public class ItemView extends RelativeLayout {
public static final DisplayImageOptions DISPLAY_OPTIONS = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.showImageOnFail(R.drawable.photo_placeholder_small)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.bitmapConfig(Bitmap.Config.RGB_565).build();
private ImageView mImageView;
private TextView mUserNameTextView;
private TextView mUserIdTextView;
private TextView mContentTextView;
private TextView mTimeTextView;
private TextView mMetaTextView;
private ImageView mPhotoView;
private LinearLayout mViewStub;
private View mIconsView;
private ImageView mIconFavorite;
private ImageView mIconThread;
private ImageView mIconPhoto;
private ImageView mIconRetweet;
private ImageView mIconLock;
private Context mContext;
private LayoutInflater mInflater;
private ViewMode mViewMode;
private OnImageClickListener mListener;
public ItemView(Context context) {
this(context, null);
}
public ItemView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize(context, attrs, defStyle);
}
private void initialize(Context context, AttributeSet attrs, int defStyle) {
setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
mContext = context;
mInflater = LayoutInflater.from(mContext);
mInflater.inflate(R.layout.item_view, this, true);
mImageView = (ImageView) findViewById(R.id.image);
mUserNameTextView = (TextView) findViewById(R.id.user_name);
mUserIdTextView = (TextView) findViewById(R.id.user_id);
mContentTextView = (TextView) findViewById(R.id.text);
mTimeTextView = (TextView) findViewById(R.id.time);
mMetaTextView = (TextView) findViewById(R.id.meta);
mPhotoView = (ImageView) findViewById(R.id.photo);
mViewStub = (LinearLayout) findViewById(R.id.stub);
mIconsView = findViewById(R.id.icons);
mIconFavorite = (ImageView) findViewById(R.id.ic_favorite);
mIconThread = (ImageView) findViewById(R.id.ic_thread);
mIconPhoto = (ImageView) findViewById(R.id.ic_photo);
mIconRetweet = (ImageView) findViewById(R.id.ic_retweet);
mIconLock = (ImageView) findViewById(R.id.ic_lock);
mMetaTextView.setVisibility(View.GONE);
final Resources res = getResources();
mViewMode = ViewMode.StatusMode;
checkViewMode();
mImageView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.onImageClick(mImageView);
}
}
});
}
private void checkViewMode() {
if (ViewMode.MessageMode.equals(mViewMode)) {
}
}
public void setOnImageClickListener(OnImageClickListener listener) {
this.mListener = listener;
}
public void setUserName(CharSequence text) {
mUserNameTextView.setText(text);
}
public void setUserId(CharSequence text) {
mUserIdTextView.setText(text);
}
private void updatePhoto(final String photoUrl) {
final boolean hasPhoto = !StringHelper.isEmpty(photoUrl);
mPhotoView.setVisibility(hasPhoto ? View.VISIBLE : View.GONE);
loadBigImage(photoUrl, mPhotoView);
}
private void loadBigImage(final String imageUri, final ImageView imageView) {
ImageLoader.getInstance().displayImage(imageUri, imageView, DISPLAY_OPTIONS);
}
public void setContent(CharSequence text) {
mContentTextView.setText(text);
}
public void setPhoto(final String photoUrl) {
setPhoto(photoUrl, null);
}
public void setPhoto(final String photoUrl, final String largeUrl) {
updatePhoto(photoUrl);
if (!StringHelper.isEmpty(largeUrl)) {
mPhotoView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
UIController.showPhoto((android.app.Activity) getContext(), largeUrl);
}
});
} else {
mPhotoView.setOnClickListener(null);
}
}
public void setTime(CharSequence text) {
mTimeTextView.setText(text);
}
public void setMeta(CharSequence text) {
mMetaTextView.setText(text);
}
public void setImage(Bitmap bitmap) {
mImageView.setImageBitmap(bitmap);
}
public void setImage(Drawable drawable) {
mImageView.setImageDrawable(drawable);
}
public void setImage(int resId) {
mImageView.setImageResource(resId);
}
public void showImage(boolean show) {
mImageView.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showIcons(boolean show) {
mIconsView.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showIconFavorite(boolean show) {
mIconFavorite.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showIconThread(boolean show) {
mIconThread.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showIconPhoto(boolean show) {
mIconPhoto.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showIconRetweet(boolean show) {
mIconRetweet.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showIconLock(boolean show) {
mIconLock.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showTitle(boolean show) {
mUserNameTextView.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showContent(boolean show) {
mContentTextView.setVisibility(show ? View.VISIBLE : View.GONE);
}
public void showMeta(boolean showA, boolean showB) {
mTimeTextView.setVisibility(showA ? View.VISIBLE : View.GONE);
mMetaTextView.setVisibility(showB ? View.VISIBLE : View.GONE);
}
public void setTitleTextSize(float size) {
mUserNameTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
}
public void setContentTextSize(float size) {
mContentTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
}
public void setMetaTextSize(float sizeA, float sizeB) {
mTimeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, sizeA);
mMetaTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, sizeB);
}
public void setUserNameTextColor(int color) {
mUserNameTextView.setTextColor(color);
}
public void setContentTextColor(int color) {
mContentTextView.setTextColor(color);
}
public void setContentMaxLines(int maxLines) {
mContentTextView.setMaxLines(maxLines);
}
public void setMetaTextColor(int color) {
mMetaTextView.setTextColor(color);
}
public ImageView getImageView() {
return mImageView;
}
public TextView getContentTextView() {
return mContentTextView;
}
public enum ViewMode {
StatusMode(0), UserMode(1), MessageMode(2);
private final int mode;
private ViewMode(int mode) {
this.mode = mode;
}
public static ViewMode of(int mode) {
for (ViewMode viewMode : ViewMode.values()) {
if (viewMode.mode == mode) {
return viewMode;
}
}
return StatusMode;
}
}
public interface OnImageClickListener {
public void onImageClick(ImageView view);
}
}