/**
* 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.NinePatchDrawable;
import android.text.StaticLayout;
import android.text.TextPaint;
import com.galaxy.meetup.client.android.R;
/**
*
* @author sihai
*
*/
public class ClickableButton implements ClickableItem {
private static int sBitmapTextXSpacing;
private static boolean sClickableButtonInitialized;
private static int sExtraTextXPadding;
private static int sTextXPadding;
private Bitmap mBitmap;
private boolean mClicked;
private NinePatchDrawable mClickedBackground;
private CharSequence mContentDescription;
private Context mContext;
private NinePatchDrawable mDefaultBackground;
private ClickableButtonListener mListener;
private Rect mRect;
private StaticLayout mTextLayout;
public ClickableButton(Context context, Bitmap bitmap, NinePatchDrawable ninepatchdrawable, NinePatchDrawable ninepatchdrawable1, ClickableButtonListener clickablebuttonlistener, int i, int j,
CharSequence charsequence)
{
this(context, bitmap, null, null, ninepatchdrawable, ninepatchdrawable1, clickablebuttonlistener, i, j, charsequence, false);
}
public ClickableButton(Context context, Bitmap bitmap, CharSequence charsequence, TextPaint textpaint, NinePatchDrawable ninepatchdrawable, NinePatchDrawable ninepatchdrawable1, ClickableButtonListener clickablebuttonlistener,
int i, int j)
{
this(context, null, charsequence, textpaint, ninepatchdrawable, ninepatchdrawable1, null, i, j, charsequence, false);
}
public ClickableButton(Context context, Bitmap bitmap, CharSequence charsequence, TextPaint textpaint, NinePatchDrawable ninepatchdrawable, NinePatchDrawable ninepatchdrawable1, ClickableButtonListener clickablebuttonlistener,
int i, int j, CharSequence charsequence1)
{
this(context, bitmap, charsequence, textpaint, ninepatchdrawable, ninepatchdrawable1, clickablebuttonlistener, i, j, charsequence1, false);
}
public ClickableButton(Context context, Bitmap bitmap, CharSequence charsequence, TextPaint textpaint, NinePatchDrawable ninepatchdrawable, NinePatchDrawable ninepatchdrawable1, ClickableButtonListener clickablebuttonlistener,
int i, int j, CharSequence charsequence1, boolean flag)
{
initialize(context);
mContext = context;
mBitmap = bitmap;
mDefaultBackground = ninepatchdrawable;
mClickedBackground = ninepatchdrawable1;
mListener = clickablebuttonlistener;
mContentDescription = charsequence1;
int k = ninepatchdrawable.getMinimumWidth();
int l = ninepatchdrawable.getMinimumHeight();
int i1;
int j1;
int k1;
int l1;
int i2;
if(mBitmap != null && charsequence != null)
i1 = sBitmapTextXSpacing;
else
i1 = 0;
if(charsequence == null)
{
k1 = 0;
j1 = 0;
} else
{
j1 = (int)textpaint.measureText(charsequence.toString());
mTextLayout = new StaticLayout(charsequence, textpaint, j1, android.text.Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.0F, false);
k1 = mTextLayout.getHeight();
}
if(bitmap == null)
l1 = 0;
else
l1 = bitmap.getWidth();
if(bitmap == null)
i2 = 0;
else
i2 = bitmap.getHeight();
mRect = new Rect(i, j, i + Math.max(k, i1 + (j1 + l1)) + 2 * getTextXPadding(flag), j + Math.max(l, Math.max(k1, i2)));
}
public ClickableButton(Context context, CharSequence charsequence, TextPaint textpaint, NinePatchDrawable ninepatchdrawable, NinePatchDrawable ninepatchdrawable1, ClickableButtonListener clickablebuttonlistener, int i,
int j)
{
this(context, null, charsequence, textpaint, ninepatchdrawable, ninepatchdrawable1, clickablebuttonlistener, i, j, charsequence, false);
}
private static int getTextXPadding(boolean flag)
{
int i;
if(flag)
i = sExtraTextXPadding;
else
i = sTextXPadding;
return i;
}
public static int getTotalPadding(Context context, boolean flag, boolean flag1)
{
initialize(context);
return 2 * getTextXPadding(true) + sBitmapTextXSpacing;
}
private static void initialize(Context context)
{
if(!sClickableButtonInitialized)
{
sClickableButtonInitialized = true;
Resources resources = context.getResources();
sTextXPadding = (int)resources.getDimension(R.dimen.clickable_button_horizontal_spacing);
sExtraTextXPadding = (int)resources.getDimension(R.dimen.clickable_button_extra_horizontal_spacing);
sBitmapTextXSpacing = (int)resources.getDimension(R.dimen.clickable_button_bitmap_text_x_spacing);
}
}
public final int compare(ClickableItem obj, ClickableItem obj1)
{
ClickableItem clickableitem = (ClickableItem)obj;
ClickableItem clickableitem1 = (ClickableItem)obj1;
return sComparator.compare(clickableitem, clickableitem1);
}
public final ClickableButton createAbsoluteCoordinatesCopy(int i, int j)
{
Object obj;
TextPaint textpaint;
if(mTextLayout == null)
{
obj = null;
textpaint = null;
} else
{
obj = mTextLayout.getText().toString();
textpaint = mTextLayout.getPaint();
}
return new ClickableButton(mContext, mBitmap, ((CharSequence) (obj)), textpaint, mDefaultBackground, mClickedBackground, null, i + mRect.left, j + mRect.top, mContentDescription);
}
public final void draw(Canvas canvas) {
NinePatchDrawable ninepatchdrawable;
int i;
int j;
int k;
if(mClicked)
ninepatchdrawable = mClickedBackground;
else
ninepatchdrawable = mDefaultBackground;
if(ninepatchdrawable != null)
{
ninepatchdrawable.setBounds(mRect);
ninepatchdrawable.draw(canvas);
}
if(mBitmap == null)
i = 0;
else
i = mBitmap.getWidth();
if(mTextLayout == null)
j = 0;
else
j = mTextLayout.getWidth();
k = mRect.left + (mRect.width() - i - j) / 2;
if(mBitmap != null)
{
int i1 = mRect.top + (mRect.height() - mBitmap.getHeight()) / 2;
canvas.drawBitmap(mBitmap, k, i1, null);
StaticLayout staticlayout = mTextLayout;
int j1 = 0;
if(staticlayout != null)
j1 = sBitmapTextXSpacing;
k += j1 + i;
}
if(mTextLayout != null)
{
int l = mRect.top + (mRect.height() - mTextLayout.getHeight()) / 2;
canvas.translate(k, l);
mTextLayout.draw(canvas);
canvas.translate(-k, -l);
}
}
public final CharSequence getContentDescription()
{
return mContentDescription;
}
public final Rect getRect()
{
return mRect;
}
public static interface ClickableButtonListener {
void onClickableButtonListenerClick(ClickableButton clickablebutton);
}
public final boolean handleEvent(int i, int j, int k) {
ClickableButtonListener clickablebuttonlistener = mListener;
if(null == clickablebuttonlistener) {
return false;
}
boolean flag = false;
if (k == 3) {
mClicked = false;
return true;
}
if (!mRect.contains(i, j)) {
flag = false;
if (k == 1) {
mClicked = false;
flag = false;
}
return false;
}
mClicked = true;
if(mClicked)
mListener.onClickableButtonListenerClick(this);
mClicked = false;
return true;
}
public final void setListener(
ClickableButtonListener clickablebuttonlistener) {
mListener = clickablebuttonlistener;
}
}