/**
* 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.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.CompoundButton;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.content.AvatarRequest;
import com.galaxy.meetup.client.android.content.EsAvatarData;
import com.galaxy.meetup.client.android.service.ImageCache;
import com.galaxy.meetup.client.android.service.ImageCache.ImageConsumer;
import com.galaxy.meetup.client.android.service.ImageCache.OnAvatarChangeListener;
/**
*
* @author sihai
*
*/
public class PhotoTagAvatarView extends CompoundButton implements
ImageConsumer, OnAvatarChangeListener {
private static Integer sAvatarHeight;
private static Integer sAvatarWidth;
private Drawable mAvatar;
private final ImageCache mAvatarCache;
private boolean mAvatarInvalidated;
private AvatarRequest mAvatarRequest;
private Rect mDrawRect;
private String mSubjectGaiaId;
private int mTagHeight;
private int mTagLeft;
private int mTagTop;
private int mTagWidth;
public PhotoTagAvatarView(Context context)
{
this(context, null);
}
public PhotoTagAvatarView(Context context, AttributeSet attributeset)
{
super(context, attributeset);
mDrawRect = new Rect();
mAvatarCache = ImageCache.getInstance(context);
if(sAvatarWidth == null)
{
Resources resources = context.getApplicationContext().getResources();
sAvatarWidth = Integer.valueOf(resources.getDimensionPixelSize(R.dimen.photo_tag_scroller_avatar_width));
sAvatarHeight = Integer.valueOf(resources.getDimensionPixelSize(R.dimen.photo_tag_scroller_avatar_height));
}
}
protected void drawableStateChanged()
{
super.drawableStateChanged();
if(mAvatar != null)
{
int ai[] = getDrawableState();
mAvatar.setState(ai);
invalidate();
}
}
public void jumpDrawablesToCurrentState()
{
super.jumpDrawablesToCurrentState();
if(mAvatar != null)
mAvatar.jumpToCurrentState();
}
protected void onAttachedToWindow()
{
super.onAttachedToWindow();
ImageCache _tmp = mAvatarCache;
ImageCache.registerAvatarChangeListener(this);
}
public void onAvatarChanged(String s)
{
if(s != null && s.equals(String.valueOf(mSubjectGaiaId)) && mAvatarRequest != null)
{
mAvatarInvalidated = true;
invalidate();
}
}
protected void onDetachedFromWindow()
{
super.onDetachedFromWindow();
ImageCache _tmp = mAvatarCache;
ImageCache.unregisterAvatarChangeListener(this);
}
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
if(mAvatar instanceof BitmapDrawable) {
if(mAvatarInvalidated && mAvatarRequest != null)
{
mAvatarInvalidated = false;
mAvatarCache.refreshImage(this, mAvatarRequest);
}
canvas.drawBitmap(((BitmapDrawable)mAvatar).getBitmap(), null, mDrawRect, null);
} else if(null != mAvatar) {
int i = getPaddingTop();
int j = getPaddingLeft() + mTagLeft;
int k = i + mTagTop;
int l = j + sAvatarWidth.intValue();
int i1 = k + sAvatarHeight.intValue();
mAvatar.setBounds(j, k, l, i1);
mAvatar.draw(canvas);
}
}
protected void onLayout(boolean flag, int i, int j, int k, int l)
{
super.onLayout(flag, i, j, k, l);
getWidth();
getPaddingRight();
//mTagWidth;
int i1;
switch(0x70 & getGravity()) {
case 16:
i1 = ((getPaddingTop() + getHeight()) - getPaddingBottom()) / 2 - mTagHeight / 2;
//mTagHeight;
break;
case 80:
i1 = getHeight() - getPaddingBottom() - mTagHeight;
break;
default:
i1 = getPaddingTop();
//mTagHeight;
break;
}
int j1;
switch(7 & getGravity()) {
case 1:
j1 = ((getPaddingLeft() + getWidth()) - getPaddingRight()) / 2 - mTagWidth / 2;
//mTagWidth;
break;
case 5:
j1 = getWidth() - getPaddingRight() - mTagWidth;
break;
default:
j1 = getPaddingLeft();
//mTagWidth;
break;
}
mTagLeft = j1;
mTagTop = i1;
int k1 = mTagLeft + getPaddingLeft();
int l1 = mTagTop + getPaddingTop();
mDrawRect.set(k1, l1, k1 + sAvatarWidth.intValue(), l1 + sAvatarHeight.intValue());
if(mAvatar == null)
if(mAvatarRequest != null)
mAvatarCache.loadImage(this, mAvatarRequest);
else
setBitmap(null, true);
return;
}
public void onMeasure(int i, int j)
{
int k;
int l;
if(mSubjectGaiaId != null)
{
int i1 = sAvatarWidth.intValue();
int j1 = sAvatarHeight.intValue();
int k1 = getPaddingTop() + getPaddingBottom();
l = i1 + (getPaddingLeft() + getPaddingRight());
k = k1 + j1;
} else
{
k = 0;
l = 0;
}
mTagWidth = l;
mTagHeight = k;
super.onMeasure(i, j);
setMeasuredDimension(Math.max(getMeasuredWidth(), l), Math.max(getMeasuredHeight(), k));
}
public void setBitmap(Bitmap bitmap, boolean flag)
{
if(bitmap == null)
mAvatar = new BitmapDrawable(EsAvatarData.getSmallDefaultAvatar(getContext()));
else
mAvatar = new BitmapDrawable(bitmap);
invalidate();
}
public void setSubjectGaiaId(String s)
{
if(!TextUtils.equals(mSubjectGaiaId, s))
{
mSubjectGaiaId = s;
if(s != null)
mAvatarRequest = new AvatarRequest(s, 1);
else
mAvatarRequest = null;
mAvatar = null;
requestLayout();
}
}
protected boolean verifyDrawable(Drawable drawable)
{
boolean flag;
if(super.verifyDrawable(drawable) || drawable == mAvatar)
flag = true;
else
flag = false;
return flag;
}
}