/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.galaxy.meetup.client.android.R;
/**
*
* @author sihai
*
*/
public class ConstrainedTextView extends View {
private ItemClickListener mClickListener;
private ClickableStaticLayout mContentLayout;
private ClickableItem mCurrentClickableItem;
private boolean mEllipsize;
private int mMaxHeight;
private int mMaxLines;
private CharSequence mText;
private TextPaint mTextPaint;
public ConstrainedTextView(Context context)
{
this(context, null);
}
public ConstrainedTextView(Context context, AttributeSet attributeset)
{
this(context, attributeset, 0);
}
public ConstrainedTextView(Context context, AttributeSet attributeset, int i)
{
super(context, attributeset, i);
mEllipsize = true;
TypedArray typedarray = context.obtainStyledAttributes(attributeset, R.styleable.ConstrainedTextView, 0, i);
int j = typedarray.getColor(2, 0);
int k = typedarray.getInt(1, 0);
float f = typedarray.getDimension(0, 0.0F);
mMaxLines = typedarray.getInt(5, -1);
mMaxHeight = typedarray.getDimensionPixelSize(3, -1);
mText = typedarray.getString(4);
mTextPaint = new TextPaint();
mTextPaint.setAntiAlias(true);
mTextPaint.setColor(j);
mTextPaint.setTextSize(f);
mTextPaint.setTypeface(Typeface.defaultFromStyle(k));
if(mText == null)
mText = "";
}
public boolean dispatchTouchEvent(MotionEvent motionevent)
{
boolean flag = true;
int i;
int j;
i = (int)motionevent.getX();
j = (int)motionevent.getY();
switch(motionevent.getAction()) {
case 0:
if(mContentLayout != null && mContentLayout.handleEvent(i, j, 0))
{
mCurrentClickableItem = mContentLayout;
invalidate();
} else
{
flag = false;
}
break;
case 1:
mCurrentClickableItem = null;
if(mContentLayout != null)
mContentLayout.handleEvent(i, j, 1);
invalidate();
flag = false;
break;
case 2:
flag = false;
break;
case 3:
if(mCurrentClickableItem != null)
{
mCurrentClickableItem.handleEvent(i, j, 3);
mCurrentClickableItem = null;
invalidate();
} else
{
flag = false;
}
break;
default:
flag = false;
break;
}
return flag;
}
public final int getLength()
{
int i;
if(mText != null)
i = mText.length();
else
i = 0;
return i;
}
protected void onDraw(Canvas canvas)
{
if(mContentLayout != null)
mContentLayout.draw(canvas);
}
protected void onMeasure(int i, int j)
{
int k = android.view.View.MeasureSpec.getSize(i);
int l = android.view.View.MeasureSpec.getSize(j);
int i1 = android.view.View.MeasureSpec.getMode(j);
boolean flag;
TextPaint textpaint;
int j1;
int k1;
if(i1 == 0x80000000 || i1 == 0x40000000 || mMaxLines >= 0 || mMaxHeight >= 0)
flag = true;
else
flag = false;
if(mMaxHeight >= 0)
if(i1 == 0)
l = mMaxHeight;
else
l = Math.min(l, mMaxHeight);
textpaint = mTextPaint;
j1 = 0;
if(textpaint != null)
if(i1 != 0 || mMaxHeight >= 0)
{
j1 = l / (int)(mTextPaint.descent() - mTextPaint.ascent());
if(mMaxLines >= 0)
j1 = Math.min(j1, mMaxLines);
} else
{
j1 = mMaxLines;
}
if(mTextPaint != null && (j1 > 0 || i1 == 0))
{
if(mEllipsize && flag)
mContentLayout = ClickableStaticLayout.createConstrainedLayout(mTextPaint, mText, k, j1, mClickListener);
else
mContentLayout = new ClickableStaticLayout(mText, mTextPaint, k, android.text.Layout.Alignment.ALIGN_NORMAL, 1.0F, 0.0F, false, mClickListener);
mContentLayout.setPosition(0, 0);
k1 = mContentLayout.getHeight();
} else
{
mContentLayout = null;
k1 = 0;
}
setMeasuredDimension(k, View.resolveSize(k1, j));
}
public void setClickListener(ItemClickListener itemclicklistener)
{
mClickListener = itemclicklistener;
}
public void setHtmlText(String s, boolean flag)
{
mText = ClickableStaticLayout.buildStateSpans(s);
mEllipsize = flag;
requestLayout();
}
public void setMaxHeight(int i)
{
mMaxHeight = i;
}
public void setMaxLines(int i)
{
mMaxLines = i;
requestLayout();
}
public void setText(CharSequence charsequence)
{
if(charsequence == null)
charsequence = "";
setText(charsequence, true);
}
public void setText(CharSequence charsequence, boolean flag)
{
mText = charsequence;
mEllipsize = flag;
requestLayout();
}
public void setTextColor(int i)
{
mTextPaint.setColor(i);
requestLayout();
}
public void setTextPaint(TextPaint textpaint)
{
mTextPaint = textpaint;
}
public void setTextSize(float f)
{
mTextPaint.setTextSize(f);
requestLayout();
}
public void setTypeface(Typeface typeface)
{
mTextPaint.setTypeface(typeface);
requestLayout();
}
}